Mobile App Development for Restaurant Table Ordering
Guest sits, scans QR code or takes tablet, browses menu, adds dishes to cart, sends order to kitchen — without calling waiter. Result: staff savings and higher average check (people add items easier without waiting). But behind this simplicity hides real-time sync between multiple devices and kitchen display.
Real-Time Order Architecture
Order from app must appear on kitchen display (KDS — Kitchen Display System) instantly. This is WebSocket connection: app sends order → Laravel Broadcasting publishes to kitchen channel → KDS receives event and shows new item.
If table split across multiple devices (large group, each has tablet or phone) — orders from one table aggregate into single kitchen ticket. Table session ID is aggregation key.
Critical moment: what if connection drops. Guest added dishes, hit "Order" — no response (tablet Wi-Fi dropped). App should show "Order sending" with retry attempts via exponential backoff, not silently lose order or show "Error, retry".
Cart Sync Between Table Devices
If multiple people at table order from different devices, table cart is shared server state, not local list in app. On item add by any participant — all table devices get update via WebSocket.
This changes architecture: instead of HydratedBloc (local cart state) — server cart with WebSocket subscription. Each change — optimistic client update + server confirmation.
Table Identification
QR code on each table is URL with table_id parameter or encrypted session token. On scan — opens either web version in browser (no installation) or deep link to installed app.
For tablet mode (tablet fixed at table) — app runs in kiosk mode (Android Task Locking / iOS Guided Access), always open on right table, no guest auth needed.
POS Integration
Ready order must reach POS system — iiko, r_keeper, Poster. Most have REST API or webhook. Implement Laravel adapter: order from mobile app → transform to POS format → POST to POS API. Return flow — "dish ready" from KDS → push to guest device.
Stack: Flutter 3.x (or PWA for QR-mode without installation), Laravel 10 + WebSocket, PostgreSQL, Redis, FCM, POS system REST API integration.
Timeline
App with table ordering, real-time sync, and KDS — 12 to 18 weeks. With POS integration and multi-device cart — closer to 18 weeks.
Pricing is calculated individually after requirements analysis.







