Client project

64 Theatre

A production-grade ticketing platform for a Kenyan theatre — M-Pesa checkout, signed-QR tickets and an offline gate scanner.

year
2026
role
Full-stack architecture & development
type
Client project
stack
6 technologies
64 Theatre — now showing

The problem

64 Theatre Limited (Eldoret) needed to sell tickets online, take mobile-money payments, and check guests in reliably at the gate — even when the venue's internet drops. They also needed to start selling before Safaricom had approved a paybill in their own name.

My approach

I designed and built a modular Laravel platform: public event pages with a three-step M-Pesa checkout, signed-QR ticket delivery, a Filament admin and an offline-capable gate scanner. Payments go through Kopo Kopo so the theatre could sell before its own Safaricom paybill was approved — the gateway is a swappable seam, so moving to Daraja is one environment variable.

How it's built

  • Laravel 13 / PHP 8.4 modular monolith, Filament 5 admin, SQLite on a persistent volume.
  • M-Pesa STK Push via Kopo Kopo, with a signed webhook; Pesapal and Safaricom Daraja behind the same interface.
  • HMAC-signed QR tickets verifiable offline; double-entry ledger for every sale.
  • Deployed on a shared VPS behind Caddy — its own compose project, no published port, alongside eleven other services.

Highlights

  • Offline-first gate scanner — tickets verify without internet.
  • Double-entry money ledger; every ticket redeems exactly once (DB-enforced).
  • Box office can push an M-Pesa prompt to a walk-up buyer, or take cash.
  • Payment provider switchable from the admin; credentials never leave the server.