Rabbit GrillKhao Yai · โรงย่างเนื้อ

Ordering at the table

A guest scans the QR on their table, joins with the code their server gives them, and orders in Thai or English. The kitchen sees it immediately. Staff run the floor, the bills and the menu from the same system.

12 tables 95 menu records 2 languages 5 staff roles 266 automated tests

The working system, and photographs of it

Every screen below was captured from the working application, but this page is only pictures of it. To use the real thing — scan a table card with your own phone, send an order, watch it appear on the kitchen board — GitHub will start a copy in the cloud and give you an address any phone can open, on any network. It takes about three minutes and costs nothing.

Those three are the working system, running in your browser with the restaurant’s real menu — tap through them, send an order, work a ticket. Nothing is installed and nothing is saved anywhere.

Staff sign-in for the demo: demo-owner with password rabbit-owner-demo. The guest side needs no account at all — just the table card and the 4-digit code staff give at seating.
No. 01

At the table

On the guest's phone

Thai first, English on one tap. Prime rib is never added like a normal dish: the guest asks staff to weigh it, and only their confirmation of the quoted weight and price creates the order.

JoiningThe QR names the table, and that is the whole step: no code to type. A restaurant that wants one can switch it on.
The menuDotted leader lines run from each dish to its price, the way the printed menu reads.
A dishChoices, quantity, a note, and a line saying a note is confirmed by staff rather than guaranteed.
Your orderStill a draft. The bar says, in Thai, that it has not been sent to the kitchen yet.
Before sendingTable, dishes, notes and total, with "received" and "accepted by staff" kept apart.
TrackingEach step carries the time it actually happened. A skipped step says so instead of inventing one.
The billOne bill for the table. Dishes not yet accepted are listed apart from the amount due.
Asking for helpCall staff, ask for the bill, ask about allergies. Repeated taps never queue twice.
No. 02

Behind the pass

Kitchen, floor and cashier

Built for a Friday night: big numbers, one clear action per ticket, and anything that needs attention stated in words as well as colour.

The orders boardNew, accepted, preparing, almost done, ready. An allergy note is quoted on a full-width band in the guest's own words, and every button carries an exact count.
The floorWhich tables are free, which are eating, which are paying, and what needs attention.
One tableThe joining code, every round, the bill, and exactly what still blocks checkout.
RequestsGuests calling for staff, and the cuts waiting to be weighed and quoted.
What needs doing nowRounds to accept, dishes ready to run, requests open, bills asked for.
Sold out tonightOne tap takes a dish off every phone. It stays off until somebody puts it back.
What the owner must confirmEvery record came from the restaurant's printed menus. None is approved yet, and the queue says so plainly.
Editing a dishThai and English, price with its history, the photo, and the printed source it came from.
PaymentsWhat was taken today, by whom, and anything that does not reconcile.
No. 03

What the owner sees

Counted honestly

Every figure says what it counts. Devices are called devices, not people. A dish that was sold out all week is marked as such instead of being called unpopular, and a day with no data looks different from a day with none sold.

Orders by daySeven bars, Monday to Sunday. Today is marked partial, days still to come are not drawn as zero, and the comparison refuses to invent growth from nothing.
What sellsMost and least ordered, with how many days each dish was actually available beside it.
How guests browseActive time only counts a screen someone is actually using, and the page states what it cannot know.

What these screens are