Building
systems
that
stay
quiet.
Backend engineer. Laravel specialist. Twelve years keeping systems alive at 2am.
The slow
accumulation
of taste.
B. Nkrumah
Twelve years ago I wrote my first line of PHP in a computer lab at KNUST. The internet was slower, the deadlines were softer, and I was wrong about almost everything. I have spent every year since being slightly less wrong, which is the best thing I can say about a career in software.
Today I build agile, reliable, enterprise applications — mostly on the LAMP stack, mostly on Laravel, mostly for teams that need a system to stay up at 2am while someone else's pager handles the noise.
Reliability is a feature.
Boring is a compliment.
Things I've
shipped.
Custom Identity Provider & OAuth2/OIDC Server
A fully featured IdP with OIDC Authorization Code + PKCE, RS256-signed ID tokens, JWKS endpoint, back-channel logout, and Redis-backed real-time session revocation across all registered relying parties. MVP shipped in a 6-day AI-assisted sprint, then subjected to a 2-month code and architecture review — cutting access management overhead by 80%.
Enterprise Double-Entry Accounting System
IFRS-compliant multi-tenant accounting engine with real-time Balance Sheets, Income Statements, Trial Balances, multi-currency Forex translation, and automated aging schedules for receivables and payables. Secured GH₵ 100,000 in its first month. Delivered from scratch in 2 weeks via AI-augmented development.
Banking System for Rural Banks & Credit Unions
A core banking product for rural banks — deposits, withdrawals, and Temenos T24 core banking integration, including a field API for mobile bankers. In production since 2014. Has raised over 10 million Cedis in revenue.
Recent
essays.
Fixing Laravel IDE Helper for Multi-Tenant Setups with Stancl Tenancy
Laravel IDE Helper generates model properties from the landlord database — which doesn't have your tenant tables. One Artisan command fixes that.
Caching, Indexes, and Laravel: Surviving Scale with a WordPress Core over 8 Years
In 2017 I launched a tiny WordPress podcast service for my local church. Eight years and tens of thousands of users later, it's still alive — here's the honest journey of scaling it without a rewrite.
Testing Your Multi-database Multi-tenant Laravel Application
The stancl/tenancy testing docs didn't work. Here's the base test class pattern that actually does — and how it evolved to handle parallel runs, manual DB transactions, and fixture caching.
How to Implement CSV Exports (Millions of Rows) in Laravel with a Distributed Approach Using Queues and Jobs
Stream downloads break under millions of rows and a single job runs out of memory. Here's how a self-re-dispatching job solves both problems cleanly.
Open for
new work.