A 14-outlet QSR chain was leaking 25-28% of every order to aggregators. We built a complete POS + customer-app + kitchen-display platform that pulled orders back into their owned channel — and cut aggregator commissions by 38% in five months.
The chain had grown from one outlet to fourteen on the back of Swiggy and Zomato visibility. The economics had stopped working — at 25-28% commission their unit margin was thin, and aggregator-led customers churned to whichever brand had the bigger discount. They needed an owned ordering channel and a POS that did not feel like a downgrade from the legacy system.
We delivered a four-product platform: customer ordering app, in-outlet POS terminal, kitchen-display system, and central admin. The hard part was hardware: receipt printers, KOT printers, payment terminals, weight scales — each with its own driver and quirks.
Outlet locator, menu browse with photos, customisations (size, add-ons, spice level), cart, dine-in / takeaway / delivery toggle, scheduled orders, UPI + cards + COD, order tracking, reorder, loyalty wallet, offer engine.
Cashier UI optimised for speed: large tappable buttons, item search, offer codes, bill split, tip handling, table management, customer lookup, KOT print, receipt print. Works offline — orders queue and sync when network returns.
Live order queue, color-coded by elapsed time, station-routing (grill / fry / cold), bump-button per station, expediter view. Replaces paper KOTs entirely in three of the 14 outlets.
Master menu (one source of truth), per-outlet pricing override, offer engine with cohort targeting, sales reports per outlet/category/hour, inventory deduction, payouts, customer database, rider/runner management.
TypeScript NestJS, Postgres for transactional data, Redis for live-order pub/sub to KDS terminals, Razorpay + Cashfree for payments, Twilio for SMS. Hosted on AWS Mumbai.
We picked the stack for fit, performance under realistic load, and operational simplicity. Here is the breakdown:
Flutter for POS too: we ran Flutter on the cashier Android terminal (a rugged Sunmi V2s). One codebase from customer phone to cashier-counter terminal saved real money. Performance was native-class.
Postgres + Redis pub/sub for KDS: a new order writes to Postgres, publishes to a Redis channel; KDS tablets listen and update in 200ms. Simpler than running Kafka and good enough at 14-outlet scale (we'd revisit at 100 outlets).
ESC/POS protocol directly: we skipped vendor-specific SDKs and wrote ESC/POS bytes ourselves. This let us support any 80mm thermal printer the outlets already owned. New outlet setup time dropped from 2 days to 3 hours.
Offline-tolerant POS.
A POS that goes down when the internet does is a refund magnet. In Indian restaurant outlets, the network drops daily — sometimes for hours. We architected POS as a local-first app: every order is written to a local SQLite first, then synced to the cloud.
Sync conflicts are the hard part. If two terminals in one outlet take an order while offline, both think they have order #42. We resolve this with outlet-prefixed UUIDs at write time — no central counter, no conflict at sync.
Result: zero lost orders across 14 outlets in the first 60 days, including a region-wide ISP outage that took down all 14 outlets simultaneously for 90 minutes.
We rolled out outlet-by-outlet, two outlets per week. Each outlet got two days of on-site training plus a hardware kit (printers, terminal, KDS tablet) we pre-configured. By outlet seven, the on-boarding was a documented playbook — outlets 8-14 went live in three weeks.
The customer app launched after the POS was stable in five outlets. We did not want app-side bugs amplified by POS-side bugs.
“We don't fight aggregators any more — we use them as one channel among many. The POS is the bedrock; the customer app is the flywheel. Our owned-channel revenue is 41% of online and rising.”
Founder & CEO
QSR Chain · 14 outlets · India
Hardware-test on the actual outlet printers, not on a clean test-bench printer. Two of the 14 outlets had non-standard 58mm printers we discovered on go-live morning; we rebuilt the layout in a 48-hour scramble. Pre-survey hardware in week one of every roll-out.
Aggregator commissions are the tax on not owning your customer. We've built POS + ordering platforms that pay back in months, not years. Get a costed roadmap from engineers who have shipped this before.
Get a Free Consultation