Nairobi food and grocery businesses run on five disconnected tools: a website that nobody updates, WhatsApp for orders, M-Pesa SMS receipts on a single phone, a paper notebook for kitchen tickets, and Glovo for a slice of demand. The five do not talk. Orders get lost, stock runs out without anyone noticing, riders show up at the wrong gate.
Here is the integrated stack we build for clients in 2026.
The five jobs the stack has to do
- Take an order from the customer (web, WhatsApp, walk-in)
- Take payment (M-Pesa, card, on-delivery cash)
- Route the order to the right kitchen or fulfilment location
- Hand the order to a rider with delivery details
- Close the loop: receipt, status updates, repeat orders
If one of these five jobs is broken, you lose revenue you cannot recover. The stack below makes all five visible in one admin.
The components
Ordering layer: web + WhatsApp
The web menu is the source of truth for the catalogue. WhatsApp Cloud API (see our complete guide) syncs to the same catalogue. Customers order on whichever feels easier; the admin shows both channels in one inbox.
Payment layer: M-Pesa STK push first
Daraja STK push (see our Daraja guide) is the default. Card is added later via Flutterwave or DPO. Cash on delivery is supported via a flag on the order; the rider collects, marks paid in their app, and the system reconciles in the evening.
Operations layer: a finite-state order lifecycle
Every order moves through fixed states:
PLACED→ customer paid (or cash flagged)ACCEPTED→ kitchen confirmedPREPARING→ cooking, packingREADY→ waiting on riderOUT_FOR_DELIVERY→ rider assigned, on the wayDELIVERED→ confirmed by customer or riderCANCELLEDorREFUNDEDas alternates
Every state change triggers a WhatsApp message to the customer and an SMS fallback. The admin shows the full pipeline by status so the manager can see "5 orders preparing, 2 ready, 3 with riders" at a glance.
Inventory layer: ingredient-level deduction
For food, "1 burger" deducts "1 bun, 1 patty, 1 slice cheese, 50g lettuce". This is what Shopify cannot do natively. Custom builds handle it cleanly. When ingredient stock drops below threshold, the item auto-marks unavailable on the menu.
Delivery layer: pick your tier
Three tiers, increasing in cost:
- Tier 1: WhatsApp dispatch. Rider receives a WhatsApp message with order details and customer pin location. Free to operate. Works for under 20 deliveries per day.
- Tier 2: Rider app. Custom mobile-web app (no app store required) where riders see their queue, mark statuses, capture delivery photos. Adds KES 500 to 1,500 in dev time, ongoing cost minimal.
- Tier 3: Real-time GPS. Live map for ops + customer. Google Maps API and rider battery cost real money. Skip until you are doing 100+ deliveries per day.
Reporting layer: the three reports that matter
- Daily Z-report: total revenue, paid vs unpaid, top 5 items, items 86'd (out of stock).
- Weekly cohort: new customers vs repeat, average basket, top zones, delivery time average.
- Monthly profit: revenue minus ingredient cost minus delivery cost minus fees. The one that matters.
What we do not recommend (and why)
- Standalone POS systems with online add-on. They rarely sync correctly. Get an integrated stack from day one.
- Building your own rider GPS app before you have 50 orders/day. Cost-benefit does not work.
- Glovo as primary channel. Use Glovo for discovery, own channel for margin.
- Excel as the inventory layer. One missed update loses an entire shift's revenue.
What this costs to build
Angazé's Stack covers the web ordering, WhatsApp ordering, M-Pesa STK push, inventory, and Tier 1 WhatsApp dispatch at KES 1,500/month + 1% per transaction. If you want it set up for you, Studio (KES 80,000 flat) ships it in 2 to 4 weeks.
Most food businesses we work with start at Growth and graduate to Scale after 6 months. We migrate the data so nothing is lost.
If you are running a Nairobi food, grocery, or delivery-first business and any of the five jobs above is currently broken, send us a message and we will scope the fix within 48 hours.