Problem
Most online selling in Ethiopia happens in Telegram channels and Instagram DMs, and it runs on cash on delivery because neither side trusts the payment step. Sellers lose goods to forged receipts, buyers lose deposits to channels that vanish, and no payment gateway offers either of them any protection.
What I built
Escrow on M-PESA's own rails. The buyer pays from a hosted checkout, in Amharic or English, with a USSD push and their PIN, and the money is held until the order's release rule is met: the buyer confirms, the courier enters a code at the door, or an inspection window runs out. A dispute freezes the release until a person decides to release, refund or split. Underneath, every escrow moves through one state machine, every birr is posted to a double-entry ledger in integer santim, and a job worker owns the timers, payouts and retries.
Result
Live as a landing site, a merchant and operations dashboard, the hosted checkout and developer docs, all on one Hono API with an OpenAPI reference, idempotency keys on every write and signed, retried webhooks. Test mode runs on a built-in M-PESA simulator that plays out cancelled prompts, low balances, timeouts and failed payouts, so the whole flow can be tried without an M-PESA account.