Customer Menu
The customer menu is the public-facing web page at handy.cafe/{your-slug}. Customers access it by scanning the QR code on their table. This page describes the customer flow end to end so you can explain it to staff and plan your rollout.
URL Structure
Every table has a unique URL of the form handy.cafe/{public-address}/{table-code}. The QR code encodes this URL plus a token that proves the sticker is authentic. When the customer scans the QR:
- Their phone opens the URL in the default browser.
- The page resolves the address and table code against the cloud API.
- If the table is out of service, the page shows an unavailable notice.
- If the table is available (not seated), the customer cannot order until staff seats them.
- If the table is in use, the page asks for the 6-digit table code.
Access Code Verification
The access code ensures that only the customer currently seated at the table can place orders. It prevents someone who saw the QR in a photo or from outside your cafe from placing fraudulent orders.
After the customer enters the code:
- The API validates the code against the hashed value stored on the table.
- If valid, a session is created and a token is returned.
- The token is stored in a cookie (
hc_menu_session). A Bearer token fallback is also kept in the device's local storage. This is necessary on iPhone Safari, which may block third-party cookies in some configurations. - The customer is taken to the menu.
A wrong code shows "Invalid code. Please try again." An expired code asks the customer to get a new one from staff. After repeated wrong attempts the table is temporarily locked.
The session is valid for 24 hours from issue. If the customer closes the browser and returns on the same device, the session still works without re-verifying. Settling the check or closing the table ends it.
Languages
The menu supports 24 languages: Arabic, German, Greek, English, Spanish, Farsi, French, Hindi, Indonesian, Italian, Japanese, Korean, Malay, Polish, Portuguese, Romanian, Russian, Thai, Tagalog, Turkish, Ukrainian, Urdu, Vietnamese and Chinese.
On first visit, the page picks the best match for the browser language. The customer can change the language at any time with the language picker.
Product names, descriptions and ingredients are not auto-translated. They appear in the language you entered in the menu editor. Interface labels such as "Add to cart", "Send order" and payment messages are fully localized.
Theme
The menu offers Light, Dark and System themes. With System, the menu follows the customer's device setting.
Branded Header
The header at the top of the menu displays:
| Element | Source |
|---|---|
| Header image | Uploaded under Cloud > Cafeteria (optional) |
| Logo | Uploaded under Cloud > Cafeteria |
| Display name | From your business profile |
| Address and Phone number | From your business profile |
Customize these fields for the best customer impression. Customers recognize the brand when the menu looks like your venue's physical signage.
Menu Browsing
The menu is grouped by root category and sub-category. Within a category, products are shown with a thumbnail, name, short description and price.
Tapping a product opens the product sheet. The sheet shows:
- The full photo.
- The description.
- The ingredients under "What's inside".
- A preparation time chip (only when Show prep time on customer menu is on).
- Nutrition values (kcal, protein, carbs, fat) and allergens under "May contain", when you entered them. AI-estimated values carry a note that they are approximate.
- A quantity stepper.
- An Add to cart button.
Cart
The cart can be opened from any screen. Its contents persist while the customer moves between the menu and the cart.
The cart lets the customer:
- Adjust quantity per line.
- Remove a line.
- Add special requests in an optional note.
The subtotal, tax and total are shown in real time.
Placing the Order
The customer chooses how to pay and presses Send order.
Pay at Counter
Pay at counter is always available. The order is submitted immediately. The customer pays when staff settles the check.
Pay by Card
Pay by card appears only when online card payments are active for your cafe. Online payments run through Stripe. See Payment Providers. On submit:
- The order is created in a pending state.
- The Stripe embedded checkout opens on the page. The customer enters card details.
- On successful authorization, the order moves to paid.
- The customer sees the success page.
Failed or abandoned payments leave the order pending. Staff can cancel it from the Orders tab.
Success Page
After a successful submission, the customer lands on a receipt page that shows:
- Order number and time.
- Every line with quantity and line total.
- Subtotal, tax and total.
- Payment method and payment status.
- A Place another order button that returns to the menu with the session intact.
- A Back to menu link.
Order Tracking
The My orders page lists the orders placed from this table session. The status updates automatically as staff advances the order. If your staff moves an item from Preparing to Ready, the customer sees the line update within seconds.
This is useful for self-service pickup at a counter. The customer can relax at the table until the menu shows the order is ready.
Call the Cashier
The table page has a Call the cashier button at the bottom of the screen. When the customer presses it:
- The cashier's screen shows a "Cashier called" alert with the table name. The alert stays until staff dismisses it. See Orders.
- The customer sees "The cashier has been notified".
- The button is disabled for one minute. A second press in that minute shows "You just called. Please wait a moment."
The call needs a HandyCafe Server connected to the cloud. If none is connected, the customer sees "The cafe is not reachable right now". Calls are not stored anywhere. The alert on the cashier's screen is the only delivery.
What Customers Cannot Do
- Customers cannot browse the menu without the access code. The verification step is always required.
- Customers cannot place orders for tables that are available (not seated) or out of service.
- Customers cannot edit or cancel an order after it has been submitted. Cancellation is a staff action from the Orders tab.
Tips for a Clean Customer Experience
- Print QR stickers with the cafe name and a clear instruction such as "Scan to order. Ask staff for the code." Customers sometimes miss the verification step otherwise.
- Keep category and product names short. Long names wrap on mobile and push images below the fold.
- Upload at least one photo per product. Image-heavy menus convert better than text-only menus.
- Enable Show prep time on customer menu only after the dynamic estimate has order history to learn from. Until then the static value may be too generous or too tight.
- Tell staff to watch for Cashier called alerts. A call nobody sees is a guest left waiting.
- Test the full flow yourself from a phone before opening to customers. Scan a real QR, enter the code, place a test order, press Call the cashier and verify that both reach your screen.