A walkthrough of the ScanOrderPay guest flow on iOS. The customer scans the table QR, browses the menu in their language, customizes, splits the bill, pays with Apple Pay — and watches the grill in real time.
Maria scans the QR taped to table 07. No app install, no signup — the tenant and table are bound to the URL. Language auto-detects EL or EN.
The menu loads from GET /api/menu/[tenantId]. Greek and English side by side, popular tags, photos where the kitchen uploaded them — placeholders where they didn't.
Required and optional modifier groups from menu_item_modifiers. Prices update live; the kitchen sees the exact variant — no "ask for pork, hope for the best."
One cart, one line per modifier, VAT 24% and optional service broken out. Split toggle divides evenly by party size — each guest pays their own share.
A Stripe payment intent is created server-side. Apple Pay, Google Pay, card, or pay-at-counter — the order fires to the kitchen only after webhook: payment_intent.succeeded.
A socket opens to the kitchen display. Stages flip in real time — received → preparing → ready → served — with the cook's name and ETA. No more "is it coming?"