Overview
QR code ordering allows customers to order directly from their table without waiting for staff. Each table has a unique QR code that, when scanned, opens a mobile-optimized menu where customers can browse, order, and track their food in real-time.Customer Journey
Step 1: Scan QR Code
Customers scan the QR code at their table using their phone’s camera.QR Code Format
Each QR code encodes a URL in the format:Example:
https://restaurant.com/downtown-lima/T12No app installation required! The ordering interface works directly in the mobile browser.
Step 2: Customer Registration
Before ordering, customers provide basic information: Quick Start (No Loyalty)- Name (required)
- Phone number (optional)
- Name (required)
- Phone number (for account identification)
- Email (optional)
- Birth date (optional, for birthday rewards)
Step 3: Session Approval
After registration, a table session is created:
Session States:
pending- Awaiting staff approvalactive- Customer can browse and ordercompleted- Table has been closed
Step 4: Browse Menu
The menu page displays a mobile-optimized product catalog: Interface Features:- Category Tabs: Horizontal scrolling tabs (Appetizers, Main Course, Desserts, Drinks)
- Product Grid: 2-column grid with images
- Product Cards: Show image, name, description, price
- Availability: Unavailable items are grayed out
- Real-time Cart: Shows item count and total at bottom
- Full-size product image
- Complete description
- Price display
- Quantity selector
- Optional notes field (e.g., “No onions”)
- Add to cart button
Step 5: Manage Cart
The cart page shows all selected items: Cart Interface:- Line items with name, quantity, unit price
- Quantity adjustment buttons (+/-)
- Remove item option
- Subtotal calculation
- Optional order notes
- “Place Order” button
Step 6: Place Order
When customer taps “Place Order”:Order Submission
Cart items are sent to the API with:
- Menu item IDs and quantities
- Optional notes per item
- Table session ID (automatic)
Order Created
System creates order with status
pending and broadcasts to:- POS dashboard (staff notification)
- Kitchen Display System (KDS)
- Customer’s order status page
Step 7: Order Tracking
Customers can track their order in real-time: Order Status Page:
Real-time Updates:
Order status updates are pushed via WebSocket:
- Status changes reflect immediately
- Item-level status (e.g., “Appetizer ready, main course preparing”)
- No page refresh needed
The WebSocket connection uses the pattern
session:{sessionId} to push updates only to the relevant customer.Additional Features
Call Waiter
Customers can request assistance:- Tap “Call Waiter” button on menu page
- Request is sent to staff dashboard
- Button shows “Waiter Called” confirmation
- Staff sees notification with table number
Request Bill
Customers can request the check:- Tap “Request Bill” button on menu page
- Request is sent to staff dashboard
- Button shows “Bill Requested” confirmation
- Staff brings the bill to the table
Session Reconnection
If a customer closes their browser and reopens the QR code:- System checks for active session on that table
- Shows “Active Session” screen with option to reconnect
- Customer can rejoin existing session or start new one
- Previous session data is restored (cart may be cleared)
Table Sessions
Session Lifecycle
Staff Session Management
Staff can manage table sessions from the Tables page:- View all active sessions
- Approve pending sessions
- Close completed sessions
- View session history
Best Practices
QR Code Placement
Place QR codes in visible, accessible locations on each table. Consider laminating or using table stands.
Staff Training
Train staff to approve sessions quickly and monitor table status on the dashboard.
Menu Photos
Use high-quality images for all menu items. Photos significantly increase order conversion.
Loyalty Promotion
Encourage customers to register for loyalty at the entry screen to build your customer database.
Technical Details
URLs:- Entry:
/{branchSlug}/{tableCode} - Waiting:
/{branchSlug}/{tableCode}/waiting - Menu:
/{branchSlug}/{tableCode}/menu - Product Detail:
/{branchSlug}/{tableCode}/menu/{itemId} - Cart:
/{branchSlug}/{tableCode}/cart - Order Status:
/{branchSlug}/{tableCode}/status - Profile:
/{branchSlug}/{tableCode}/profile
- Customer JWT token issued on registration
- Token stored in session storage
- Token includes: customer ID, table ID, session ID
- Token sent in
Authorization: Bearer {token}header