02 — Food and grocery delivery, Cameroon
Tcheede
Tcheede is a live delivery app with customer, driver and store apps. Customers pay with MTN Mobile Money, Orange Money or a card. My job was to make sure money moved correctly, every time, and to keep the platform running.
- Role
- Payments and full-stack engineer
- Period
- Aug 2026 – present
- Stack
- Node.js, Express, PostgreSQL, Supabase, React Native, Nginx, PM2, Mastercard MPGS, MTN MoMo, Orange Money
- 01Customer app → Tcheede APIpay order #1042
- 02Tcheede API → Gatewaycollect total recomputed from the database
- 03Gateway → CustomerPIN prompt on the phone / card checkout
- 04Gateway → Tcheede APIauthenticated callback: SUCCESSFUL
- 05Tcheede API → Orderstatus → paid (only now)
- 06Reconcile job → Gatewayre-check payments that never called back
The problem
Every MTN payment stayed on “pending”, even when the customer had paid. The app stored its own order reference where the gateway's transaction ID belonged, so the status check never matched. Real customers had paid for orders that the system never settled.
What I did
I reworked the flow so an order is marked paid only after the gateway confirms it: totals are recomputed on the server, callbacks are authenticated, and a reconciliation job sweeps payments that never got a callback. The fix recovered the paid orders that had been left behind.
I integrated Mastercard Hosted Checkout through the acquiring bank and worked through its 18-case acceptance plan; all 28 test runs passed on the bank's test gateway. For Orange Money I diagnosed a rejected payment-method value and documented the account key the aggregator still has to issue.
When the client changed AWS accounts, I moved production to a new EC2 server and Supabase Postgres 17: session pooling for IPv4, row-level security on every table, Nginx with WebSocket proxying, SSL and PM2 restart on boot. I shipped ten Android releases of the React Native app along the way.
Outcome
Payments now settle from the gateway's own answer rather than from the app's assumptions, and every step is logged and written up in reports the client and the bank can check.