

01Online store
Sebule
Sebule is an online furniture store for Kenya, built around a brand I invented. A customer finds a piece, pays with M-Pesa and follows the order to their door. Staff run orders, stock and the catalogue from one back office.
- Quick on a slow phone. Pages arrive from the server as finished HTML with about 5 KB of script, so browsing, filters and checkout still work when scripts fail.
- The shop moves without hiding anything. A product's photo glides from its card into its page with the browser's own page transitions, and flies into the cart when it is added. A visitor whose phone asks for less motion gets every page standing still, and without script every page still works.
- Orders and stock stay right. A double tap or a retry on a bad connection never places a second order, and stock is held for 15 minutes while the customer pays.
- M-Pesa replies are checked. Each payment prompt has its own signed address for the reply, a repeated reply is recorded once, and the store asks Safaricom itself when no reply comes.
- A broken release is stopped. Every release opens its own pages against the live database before the site switches to it.
- 1.91 sto the main content of the home page on a throttled phone in a lab test, and 1.4 to 1.5 s on other pages
- 0layout movement while those pages load
- 10 sfrom M-Pesa prompt to a paid order on Safaricom's test system
Laravel 13 · PHP 8.4 · Blade · Tailwind CSS 4 · Filament 5 · PostgreSQL 16 · Redis · M-Pesa Daraja · Resend · GitHub Actions
Visit the store Open the back office as staffSign in as a customerRead the code
The store resets every night. Paying sends a real M-Pesa prompt for KSh 1 on Safaricom's test system, and a visitor without a Safaricom line can use a test payment instead.





