203 lines
6.2 KiB
Markdown
203 lines
6.2 KiB
Markdown
# tokslaw.com — Personal Portfolio & Professional Website
|
|
|
|
A containerized portfolio website for **Toks Lawal**, a Product Architect and Senior Software Engineer specializing in microservices architecture, event-driven systems, and full-stack development. Built with CodeIgniter 4 and deployed via Docker.
|
|
|
|
---
|
|
|
|
## About
|
|
|
|
This site serves as the central hub for Toks Lawal's professional presence, featuring:
|
|
|
|
- **Portfolio** — Curated showcase of projects and engineering work
|
|
- **About / Experience** — Career history across MyFit.ai, Intralot, Float Mobility, and ChiefSoft Works
|
|
- **Services** — Software architecture, microservices design, and full-stack development offerings
|
|
- **Blog** — Dynamically pulled from an external blog data API (`blogdata.chiefsoft.net`)
|
|
|
|
Live at: **[tokslaw.com](https://tokslaw.com)**
|
|
|
|
---
|
|
|
|
## Tech Stack
|
|
|
|
| Layer | Technology |
|
|
|---|---|
|
|
| Framework | CodeIgniter 4 (PHP 8.1+) |
|
|
| Web Server | Apache 2.4 with `mod_rewrite` |
|
|
| Containerization | Docker + Docker Compose |
|
|
| Frontend | HTML5, CSS3, JavaScript (Hub Template by LiquidThemes) |
|
|
| Fonts | Google Fonts — Be Vietnam Pro, Libre Baskerville, Space Grotesk |
|
|
| External API | `https://blogdata.chiefsoft.net/blogdata/tokslaw` |
|
|
| Image Registry | `registry.chiefsoft.net` (private) |
|
|
| Extensions | MongoDB, Redis, xDebug (dev), GD, mysqli, pgsql |
|
|
|
|
---
|
|
|
|
## Project Structure
|
|
|
|
```
|
|
TokslawMain/
|
|
├── app/
|
|
│ ├── Controllers/
|
|
│ │ ├── BaseController.php # Shared APIcall() cURL helper
|
|
│ │ ├── Home.php # Homepage — fetches live blog data
|
|
│ │ ├── About.php # Experience timeline (hardcoded)
|
|
│ │ ├── Portfolio.php # Portfolio page
|
|
│ │ ├── Services.php # Services offered
|
|
│ │ └── Project.php # Project detail view
|
|
│ ├── Views/
|
|
│ │ ├── welcome_message.php # Homepage template
|
|
│ │ ├── about.php # About/Experience template
|
|
│ │ ├── portfolio.php # Portfolio template
|
|
│ │ ├── services.php # Services template
|
|
│ │ ├── project.php # Project detail template
|
|
│ │ └── styles.css # Custom overrides
|
|
│ └── Config/
|
|
│ ├── Routes.php # URL routing
|
|
│ └── App.php # App-level configuration
|
|
├── public/ # Web root — point your server here
|
|
│ ├── index.php # Application entry point
|
|
│ ├── .htaccess # URL rewriting rules
|
|
│ └── assets/ # CSS, JS, images, fonts, vendors
|
|
├── docker/
|
|
│ └── apache/
|
|
│ ├── Dockerfile # PHP 8.1-Apache image definition
|
|
│ └── 000-default.conf # Apache VirtualHost config
|
|
├── docker-compose.yml # Container orchestration
|
|
├── writable/ # Cache, logs, sessions (auto-generated)
|
|
├── apache_log/ # Apache access and error logs (mounted)
|
|
├── composer.json # PHP dependency manifest
|
|
├── env # Environment variable template
|
|
└── spark # CodeIgniter CLI
|
|
```
|
|
|
|
---
|
|
|
|
## Routes
|
|
|
|
| Method | URL | Controller | Description |
|
|
|---|---|---|---|
|
|
| GET | `/` | `Home::index()` | Homepage with live blog feed |
|
|
| GET | `/portfolio` | `Portfolio::index()` | Portfolio showcase |
|
|
| GET | `/about` | `About::index()` | Experience & background |
|
|
| GET | `/services` | `Services::index()` | Services offered |
|
|
| GET | `/project` | `Project::index()` | Project detail page |
|
|
|
|
---
|
|
|
|
## Getting Started
|
|
|
|
### Prerequisites
|
|
|
|
- [Docker](https://docs.docker.com/get-docker/) and Docker Compose installed
|
|
- Git
|
|
|
|
### Local Setup
|
|
|
|
```bash
|
|
# 1. Clone the repository
|
|
git clone <repo-url> TokslawMain
|
|
cd TokslawMain
|
|
|
|
# 2. Copy environment template
|
|
cp env .env
|
|
|
|
# 3. Set your local container port and UID (edit .env)
|
|
# CONTAINER_PORT=7083
|
|
# UID=1000
|
|
|
|
# 4. Build and start the container
|
|
docker-compose up -d --build
|
|
|
|
# 5. Install PHP dependencies (inside the container)
|
|
docker-compose exec tokslaw-main composer install
|
|
```
|
|
|
|
The site will be available at: **http://localhost:7083**
|
|
|
|
---
|
|
|
|
## Environment Variables
|
|
|
|
Copy `env` to `.env` and configure as needed:
|
|
|
|
```env
|
|
CONTAINER_PORT=7083 # Port to expose the site locally
|
|
UID=1000 # Host user UID for file permission mapping
|
|
```
|
|
|
|
No database credentials are required — the site does not use a local database. Blog content is fetched at runtime from the external API.
|
|
|
|
---
|
|
|
|
## Docker Details
|
|
|
|
- **Base image**: `php:8.1-apache`
|
|
- **Published image**: `registry.chiefsoft.net/tokslawcom-web:latest`
|
|
- **Exposed port**: 80 (mapped to `CONTAINER_PORT` on host)
|
|
- **Document root**: `/var/www/html/public`
|
|
- **Restart policy**: `unless-stopped`
|
|
- **Volumes**:
|
|
- `./ → /var/www/html` (source code, live-mounted)
|
|
- `./apache_log → /var/log/apache2` (persistent logs)
|
|
|
|
**PHP Extensions installed in image:**
|
|
`bcmath`, `bz2`, `calendar`, `curl`, `exif`, `gd`, `gettext`, `iconv`, `intl`, `mysqli`, `pgsql`, `pdo_mysql`, `pdo_pgsql`, `soap`, `tidy`, `xsl`, `zip` + PECL: `xdebug`, `mongodb`, `redis`
|
|
|
|
---
|
|
|
|
## Deployment
|
|
|
|
Images are built and pushed to the private ChiefSoft registry:
|
|
|
|
```bash
|
|
# Build the image
|
|
docker build -t registry.chiefsoft.net/tokslawcom-web:latest -f docker/apache/Dockerfile .
|
|
|
|
# Push to registry
|
|
docker push registry.chiefsoft.net/tokslawcom-web:latest
|
|
|
|
# On the server — pull and restart
|
|
docker-compose pull && docker-compose up -d
|
|
```
|
|
|
|
> **Note:** `xdebug` is active in the Docker image by default. Disable it in production for performance.
|
|
|
|
---
|
|
|
|
## Development
|
|
|
|
```bash
|
|
# Run tests
|
|
composer test
|
|
|
|
# PHP CodeSniffer / CS-Fixer
|
|
./vendor/bin/php-cs-fixer fix app/
|
|
|
|
# CodeIgniter CLI (spark)
|
|
php spark <command>
|
|
|
|
# View application logs
|
|
tail -f writable/logs/log-$(date +%Y-%m-%d).log
|
|
|
|
# View Apache logs
|
|
tail -f apache_log/error.log
|
|
```
|
|
|
|
---
|
|
|
|
## PHP Requirements
|
|
|
|
- PHP **8.1 or higher**
|
|
- Required extensions: `intl`, `mbstring`, `curl`, `json`
|
|
- Optional: `mysqlnd` (MySQL), `libcurl` (HTTP requests)
|
|
|
|
---
|
|
|
|
## License
|
|
|
|
MIT License — see [LICENSE](LICENSE) for details.
|
|
|
|
---
|
|
|
|
*Built and maintained by Toks Lawal — [tokslaw.com](https://tokslaw.com)*
|