- 2×Malai kofta
- 1×Butter naanextra butter
One order, all the way through.
RMS runs the floor, the pass and the back office off a single order record — point of sale, kitchen display, guest QR ordering, inventory, loyalty and reporting. Four apps, one system, and a line that keeps moving when the internet stops.
- 19:04:12QRTable 7 opened from the QR poster
- 19:04:58POS2 × Malai kofta₹640.00
- 19:05:01POS1 × Butter naan · extra butter₹90.00
- 19:05:03KDSDocket #1042 fired → Tandoor
- 19:05:03STOCKPaneer, cream and atta consumed−220 g
- 19:19:42KDSReady, called to the pass14:39
- 19:26:10PAYSplit · card and wallet₹766.50
- 19:26:11CRMAarav S. · visit 12+64 pts
- 19:26:11BOOKSales, tax and COGS posted
One order record. Seven systems wrote to it; nobody typed it twice.
- apps in the box
- 4
- order record
- 1
- ways to pay
- 5
- re-entry between them
- 0
Guests order from the table. Nobody re-types it.
The QR poster on table 7 opens the live menu — priced, taxed and available as of this minute. What a guest taps becomes the same order a waiter would have raised on the POS, on the same record, with the same rules.
Nothing to install
The guest opens a web page and orders from it. Staff keep the POS for everything else — a phone in an apron or a till tablet, same app, same shift.
One bill, five ways to settle it
Card, cash, UPI, a guest's wallet balance and a gift card can share a single bill between them. The order closes itself when the balance reaches zero.
cardcashUPIwalletgift cardFeedback lands on the order ★★★★★
Stars and a note attach to the visit, so a bad Friday is traceable to the ticket, the table and the section that cooked it.
Dockets on a rail, aging where the line can see them.
Kitchens run dark, but paper reads. Sending an order fires one ticket per section, and every ticket carries its own age in ink — so the section that is behind is the one that looks it, from across a hot line, without anyone reading a word.
- 1×Dal makhanihalf portion
- 3×Jeera rice
- 1×Paneer tikka
no chilli — allergy
- 4×Seekh kebab
- 2×Chicken tikkawell done
One docket per section
A menu item knows which station cooks it, so sending an order prints to the tandoor, the curry line and the grill at once — each slip carrying only its own lines.
Age is the whole status language
Ink colour and the bar at the foot carry how long a ticket has been up. Nothing else on the screen is coloured, so the board never cries wolf.
Live, not refreshed
Tickets arrive over a socket and every screen agrees within the second. Bump one to ready, recall it if the table waves — and print it as thermal-printer bytes when the slip has to exist on paper.
The part that decides whether the month worked.
Menu, staff, stock, suppliers, guests and the numbers, scoped to the outlet you are standing in. Every report is built from the rows the POS and the kitchen already wrote, so there is nothing to reconcile at the end of the night.
- Net sales
- ₹4,86,210
- Covers
- 612
- Avg on the pass
- 8:41
- Low on stock
- 4
Sales · kitchen times · inventory usage · staff · taxes collected per rate · gross sales against the cost of what was actually cooked.
- 14:02Recipe consumption · Malai kofta−220 g
- 14:02Recipe consumption · Butter naan−85 g
- 15:20Purchase received · Amul dairy+12 000 g
- 19:48Waste · spoiled in transit−400 g
Recipes consume stock as orders are sent, and voids put it back. Every gram on hand is explained by a line here — nothing in this system is a plug figure.
The dashboard hides exactly what the API would refuse, from the same permission map. A manager cannot mint managers; a chef can correct stock but never touch payroll.
- Kohinoor Kitchen612 covers
- Kohinoor Express388 covers
- Kharadi cloud kitchen241 covers
Menus, tables, stations, stock and reports are scoped per outlet. Managers switch between them without logging out; owners see the group.
The internet is not part of the service.
A till on a dead connection keeps selling. Everything it does is written to the device first and pushed in order when the link returns — and because every operation carries its own id, a retry after a lost acknowledgement comes back a duplicate instead of a second charge.
An outbox, not a cache
Operations are written to the device before anything is sent, so a flat battery in the middle of a rush loses nothing.
Judged one operation at a time
A rejection does not halt the batch. Each operation comes back applied, duplicate or rejected with a reason the till can act on.
Opens ready
Menu, tables and the outlet's open orders come down in one snapshot, so a till that has been off since Tuesday is current before the first cover.
- op_8f2c1Line added · 2 × Malai kofta
- op_8f2c2Payment · card ₹520.00
- op_8f2c2 · retryPayment · card ₹520.00
Everything acknowledged.
The whole carte.
Not a roadmap. Every line below is an endpoint that exists today, with tests behind it and a screen in one of the four apps that uses it.
Menu & pricing
- Categories, items, variantsone aggregate save
- Modifier groups and combosmin / max rules
- Availability windowsmenu as of a time
- Tax groupsbasis points
- Station routing per itemsets the docket
- Barcode lookupscan to sell
Point of sale
- Dine-in, takeaway, delivery3 order types
- Tables, covers and transfersper outlet
- Split payments5 methods
- Order and line discountsreason required
- Priced at order timelines snapshot
- Receiptstext + ESC/POS
The pass
- One docket per stationfired on send
- Queued, preparing, readyplus recall
- Age shown in ink and barlate at 10:00
- Live board feedWebSocket
- Station and outlet filtersper screen
- Prep time per stationreported nightly
Inventory
- Ingredients in base unitsg · ml · piece
- Recipes per servingconsumed on send
- Voids restore stockboth directions
- Suppliers and purchase ordersorder → receive
- Corrections and wasteledgered
- Every unit explainedmovement ledger
Guests & loyalty
- Guest directorysearchable
- Membership tiersresolved per guest
- Wallet with top-upspay from balance
- Gift cardsbalance by code
- Points on completed visitsconfigurable
- Feedback against the order1–5 stars
Money & integrations
- Razorpay and Stripemock in dev
- Settlement webhooksHMAC, idempotent
- Machine API keysshown once
- Delivery aggregator intakeby external ref
- Guest QR orderingno app to install
- Orders and tax exportsCSV
Reporting
- Sales, daily and by itemany range
- Kitchen queue and prep timesper station
- Inventory usage and spendlow stock first
- Staff performanceper user
- Taxable base and collectedper rate
- Gross sales against COGSfrom recipes
Platform
- Organizations and outletsmulti-tenant
- Roles the API enforcessame map in the UI
- Offline-first syncidempotent by opId
- Device fleet and last seenper outlet
- Typed client from the specdrift fails CI
- Full API referenceOpenAPI at /docs
See it run on your own menu.
Send us a menu and a week of real orders. We seed them into a live outlet and walk the whole loop with you — QR poster to closing figures — in about half an hour.
- API
- Fastify 5 · Postgres · Redis
- Dashboard
- Next.js 16 · React 19
- POS & board
- Expo · React Native
- Guest
- a web page, nothing to install
- Ships as
- Docker Compose, on your own box