500 MB. One server. Live.
A Kenyan party’s public site, admin console and uploads, all inside a 500 MB cPanel quota. A normal npm install on the server would not fit, so the frontend is built off-server and only what it uses ships.
- 37 MB Next.js standalone frontend (9 MB compressed)
- 60 MB Python virtualenv, plus a 53 KB backend
- ~23 MB everything else (derived from the 500 MB total)
- ~380 MB left for the database and every uploaded image
The part nobody writes down: the cPanel Python selector leaves the app broken in two silent ways. It omits PassengerAppType wsgi from public_html/api/.htaccess, so Apache inherits the frontend’s Node settings, and it overwrites passenger_wsgi.py with a stub that loads itself forever. Both show up as the same blank 500. Both are now documented with the fix.
Where it started
Dates and roles as listed on my CV.
- 2020 – 2022
- Contract frontend and systems engineer. Dashboards and offline-tolerant apps for field teams on unstable networks, with idempotent actions so state stays recoverable.
- 2022 – now
- Freelance senior engineer: payments, reliability, CI/CD and ops tooling for clients, and my own platforms alongside: Chama Cha Mimi na Wewe (live), RentPin (pre-launch) and Ouroboros Network (testnet).
How it is built
From client and contract engagements, 2022 to now, as described in my CV.
- Idempotent by default
- Payout jobs that are safe to replay: no duplicate disbursements, with a full audit trail across providers.
- Reconcile, don’t trust
- Workers that match provider callbacks against the internal ledger and hand operations an audit-ready CSV.
- Readable when it breaks
- Structured logs, per-batch metrics and runbooks, so an incident takes minutes to diagnose and not hours.
A limit is a spec, not an apology.