The problem it solves
A café in North Sinai runs on a notebook and a cash drawer. Orders live in the waiter’s head between the table and the counter, the kitchen works from shouted tickets, and at close nobody can say with confidence whether the drawer matches the day. Off-the-shelf restaurant systems assume English, a stable connection, and a setup consultant — none of which a small café has.
Crema is the counter-to-kitchen system for that café: walk-up sales and open table tabs, a kitchen display, cash settlement, printed receipts, and a daily close that actually reconciles — Arabic-first, right-to-left, built for the way the floor really works.
What it does
- Counter mode — ring a walk-up order, take cash, print the receipt. The fast path is the default path.
- Dine-in tabs — open a tab on a table, add rounds as the visit grows, settle at the end; the table frees itself the moment the tab closes.
- Kitchen display — orders land on a screen in the kitchen, not in a shout. Made, served, done.
- Money that reconciles — discounts, on-account customers, and A/R collection are first-class moves; the daily close adds up or tells you why not.
- Arabic-first — the whole surface is right-to-left native, not a translation pass over an English layout.
One order, end to end — verified live on production
- 01RingA walk-up at the counter, or a tab opened on a table — one tap, one order.
- 02KitchenThe ticket lands on the kitchen screen. Made, served — nobody shouts.
- 03SettleCash counted, change exact — discounts and on-account are first-class.
- 04ReceiptBilingual, right-to-left, stamped PAID — straight to thermal print.
- 05Table freesSettling closes the tab; the floor board reads the table free again.
- 06Day reconcilesThe daily close: settled totals equal payments, zero open sessions.
How it’s built
Crema is a modular monolith: thirteen modules — POS, orders, payments, tables, kitchen display, receipts, catalog, inventory, customers, discounts, finances, settings, and a demo seeder — behind frozen contracts, so each piece can be replaced without unpicking the others. Next.js 16 with React 19 on Supabase; one command provisions a new café tenant.
The discipline that made one-day-to-live possible: the money path first. Before any feature breadth, the spine — log in, ring an order, take cash, settle, receipt, table frees, totals reconcile — was built end-to-end and verified in a real browser against a seeded café, on the dev server and on a production build. Four end-to-end runs, counter and dine-in both, to green. Feature modules joined only after the spine held.
Thirteen modules, one spine
The number
From an empty repository to a deployed system taking cash on its production URL — one day. Not a prototype: the live deployment passed the full acceptance test on both money paths, with the failures found by the first E2E run root-caused and fixed the same day. A second build day added the settle seams (discounts, on-account, collection) and five breadth modules.
The build log — hours from the first commit
Measured between commit timestamps in the repository log. Four hours to a verified money path, the kitchen in the loop the same day, and the settle seams — discount, on-account, A/R collection — wired two days later.
Built for a real café as a trade-for-proof engagement — the same family as Harmonia: a real business runs it, and the build is the receipt.
