Self-Service Kiosk App
Overview
The Self-Service Kiosk app is the customer-facing screen your walk-in customers use to browse your menu, customise and order on their own, and pay right at the device — no cashier in the loop. It's the self-serve front door to the same outlet your POS sells from.
It's an Android app, built in Flutter and updated over the air through Shorebird, so new versions arrive quietly without a reinstall. Each kiosk binds to one outlet and one register, and everything it shows — the menu, order modes, payment methods — comes from that outlet's setup. When the kiosk logs in, the server hands it a merchantData blob that drives nearly all of its on-device behaviour; almost nothing is configured on the device itself.
This is the device side
This page covers operating the kiosk tablet. The kiosk account, its outlet/register binding, and the menu, payment, and order settings that feed it are created in the admin console — see Self-Service Kiosk (CommerceOS).
Setting up the device
Pairing the kiosk
Each kiosk logs in with a username and password on the Merchant screen — the credentials are the pairing. There's no QR or pairing code to enter.
- On the Merchant screen, type the kiosk account's Username and Password.
- Tick Remember Me to keep the username filled in for next time.
- Tap Log in.
A successful login stores the auth token and the full outlet/register configuration, applies your brand colour, opens a live connection, and lands on the Home screen. Wrong credentials show an error notice. The bottom of the screen shows the app version, build, and current update — e.g. 1.0.77+74 (patch 3 • Production).
One binding per device
This single login is what ties the kiosk to its outlet and register. Logging out (from the hidden staff settings) clears all of it and returns to the idle screen.
Installer-only: environment & update track
Installer setting — leave it alone
Long-pressing the logo on the Merchant screen opens a hidden configuration sheet. This is for whoever first sets up the kiosk — your staff and customers should never need it.
The hidden sheet picks which backend the kiosk talks to and which update track it follows:
| Control | What it does |
|---|---|
| Domain | rewardly.app is the live production environment; reeward.app is the test environment. The active one is also auto-detected from the device domain at startup. |
| Shorebird Track | CodePush Production (stable) or CodePush Staging. Selecting a track downloads the matching patch — you must relaunch the app to apply it (a notice says so). |
The currently active domain and track are ticked. A second domain switcher also lives inside the in-app staff settings, reachable from Home.
The app also updates itself over the air on launch — it quietly checks Shorebird for a new patch on its track and pulls it in the background, with no "updating" screen. The only place you can see the current patch is the version line on the Merchant screen.
Exiting kiosk mode & staff settings
The top-right gear icon on the Home screen does nothing on a normal tap. Press and hold it for 3 seconds to open the staff settings dialog — the 3-second hold is the intended "secret" gesture so a customer can't open it.
No PIN on the staff settings
There's no numeric PIN gate on this dialog — the hidden 3-second hold is the access control. Anyone who knows the gesture can reach it, so don't demonstrate it in front of customers.
The dialog offers:
| Setting | What it does |
|---|---|
| Domain name settings | The same environment switch as the installer sheet. |
| Theme | System / Light / Dark, saved on the device. |
| Modifier options layout | Show modifier choices in one or two columns. |
| Logout | After a confirm, signs the kiosk out and returns to the idle screen. |
On-device printer setup
If the kiosk prints its own receipts and chits, staff pick the drivers in settings — one for the customer receipt printer and one for the kitchen printer. The choices are Sunmi cloud, Sunmi kiosk (built-in), Epson, and Star Micronics; choosing Epson or Star opens a discovery list (network or Bluetooth) to pick the exact printer.
Finish Sunmi cloud in admin
Choosing Sunmi cloud shows a notice telling staff to finish configuration in the admin panel. The actual receipt and chit content, paper width, and routing all come from the backend's print templates per order.
The idle screen
With no one ordering, the kiosk shows a full-screen branded attract loop on your brand colour. It plays your promo video — a cached merchant video, falling back to your YouTube clip, and finally to a built-in default — muted and looping. A shimmering TAP TO START sits at the bottom.
Tapping anywhere wakes the kiosk: if it's already paired it refreshes its data and goes to the Home / order-mode screen; if it's not yet paired it opens the Merchant screen.
Idle timeout resets the session
While a customer is ordering, a Time out countdown runs in the top bar (5 minutes). On expiry a dialog appears with a 30-second secondary countdown and two buttons — Start (abandon and reset to idle) and Continue (keep the session, restart the 5-minute timer). If the 30 seconds also lapse, the kiosk auto-resets. Any real interaction — adding an item, choosing an order mode, paying — restarts the timer.
Choosing an order mode
After TAP TO START, Home shows up to three big buttons, each appearing only if your outlet allows it:
| Button | When it shows | What it does |
|---|---|---|
| DINE IN (EAT IN for QSR) | Dine-in allowed | Sets the order to dine-in; may first route to table/pager selection. |
| TAKE OUT | Pickup allowed | Sets the order to takeout. |
| PAY BILL | Pay-bill allowed | Scans an existing order to pay it (see Pay Bill). |
A MEMBER LOGIN pill appears below when member login is enabled and no member is signed in yet.
Retail kiosks look different
On a retail outlet the card collapses to a single CHECKOUT button that jumps straight to a scan-driven cart — the customer scans product barcodes and the kiosk looks each one up on the server. The Dine-in / Take-out / Pay-bill split is for F&B outlets only.
Member sign-in at the kiosk
When member login is enabled, the customer can identify themselves before or during the order. The login screen shows a tab selector whose tabs come from your memberLoginType setting:
| Tab | How the customer signs in |
|---|---|
| Show QR | The kiosk displays its member QR for the customer to scan with their phone. |
| Scan QR | The customer holds their member QR to the scanner — "Please display your member QR to the scanner." |
| Phone | Phone number + password. |
| SMS OTP | Phone number; GET sends a 6-digit code (5-minute countdown) to verify. |
| PIN | Phone number + 4-digit PIN. |
| Guest | Phone-only — "Let's go", no password. |
Once a member is signed in, their balance and loyalty load and the MEMBER LOGIN pill disappears everywhere.
If member login isn't used — or the customer taps GUEST — the kiosk may ask for guest details, depending on your outlet's guest-entry toggles: a Name, a Phone Number, or an Email (the email field suggests full addresses from your preferredEmailDomains). When more than one is on, the kiosk asks in the order phone → email → name; captured contact later lets the customer get their receipt by email or SMS.
What loyalty surfaces
A signed-in member sees their loyalty at the kiosk in three places: a VOUCHER button on the cart to redeem one of their vouchers, and — gated by your outlet's redemption toggles — Store Credit and Loyalty Points they can apply toward the bill. Guests see none of this.
Browsing & customising
The menu
The products screen has a left category rail (hidden when there's only one category) and a product grid. Only categories and products marked visible-on-kiosk appear. Each card shows the image, name, description, and price, with + / − quantity controls and an info button for the detail view. Cards can carry badges — +$0.10 BCRS beverage deposit, a Healthier Choice icon, or a Nutri-Grade symbol with a sugar-% pill.
A product is dimmed and shown as unavailable, with the reason, whenever it doesn't fit the order:
| Reason shown | Why |
|---|---|
| "Not available for dine-in / takeout" | The product isn't allowed for the current order mode. |
| "Out of stock" | A quantity-tracked product has run out. |
| "Unavailable" | The product is hidden from ordering. |
| "Unavailable until HH:MM" / "since HH:MM" | Outside the product's start/end time window. |
| "Required options unavailable" | A required modifier or bundle slot has no available option. |
Availability is live — a sold-out item flips to unavailable without a reload.
Customising a product
Tapping a customisable product opens a detail dialog with a quantity stepper, the relevant controls, a live nutrition chip row, a running Total, and an Add new button.
- Variants — one selector per attribute (Size, Colour). Colour attributes show image swatches; others show chips. Incompatible options are disabled with "Unavailable"; out-of-stock-but-compatible ones show "See available options".
- Modifiers — each group shows a hint from its min/max ("Pick one", "Pick up to 3", "Pick at least 2"). Required groups must be filled, and the kiosk validates min/max before adding, focusing the first group that fails. Your staff settings choose a 1- or 2-column layout.
- Bundles / combos — each slot offers a list of options with its own min/max rule, validated per slot before the bundle can be added.
- BYOC discount — if the category defines container colours with a discount, a "Bring your own container discount" panel lets the customer mark their container colour to apply it to that line.
- Remarks — an Additional request field (capped at 50 characters) appears only when your outlet includes
kioskin its product-remarks channels. - Bundle Options — opening a simple product can show a BUNDLE OPTIONS section suggesting combos that contain it ("Burger + Fries"), nudging the customer to upgrade to a meal.
Cart & review
The Cart screen lists each line — image, name, chosen options, quantity, price — with edit controls and a Bill summary beneath. The bill shows Subtotal, each tax line, Service Charge, BCRS Deposit, a Discounts block, any applied Store Credit / Loyalty Points (with the point-to-currency conversion shown), and a final Due Amount. A Clear cart action in the top bar empties everything after a confirm.
Members get a VOUCHER button that opens a "Redeem voucher" picker — "Choose the best offer for this order" — to apply or remove one voucher at a time. If the cart holds discounts that can't stack, a conflict dialog asks the customer to choose between them, and checkout is blocked until it's resolved.
Checkout & payment
Tapping Checkout runs the discount-conflict guard, may open table/pager selection if your config still needs it, and — for members with a store-credit or loyalty balance — offers the redemption sheet before creating the order. Then the kiosk creates the order and moves to the Checkout bill screen, where Payment opens the method picker.
The picker lists only the tenders enabled on this kiosk, by their configured display names. If exactly one is enabled it's used straight away; if none are, the kiosk shows "No payment methods are configured on this kiosk."
| Tender | How it works |
|---|---|
| T05 | Connects to a local T05 card terminal over WebSocket; "Payment waiting…" until the terminal approves. |
| Adyen | Pays on a connected Adyen terminal; the kiosk completes when the order returns PAID. |
| PayNow | Shows a Scan to Pay QR; the customer pays in their banking app, then taps CHECK PAYMENT (or a live push) to confirm. |
| TapToPay | A contactless card tap on the device's own NFC reader, via Adyen. |
A signed-in member can also tap PAY WITH MEMBER BALANCE to apply store credit and loyalty points; if that covers the bill in full the order is marked paid, otherwise the rest is paid by one of the tenders above.
No cash, no pass-to-counter
The kiosk is electronic-payment only — there's no cash option and no explicit "pass to counter" hand-off. Every order is paid at the device. Which tenders appear is entirely admin-driven by your kiosk payment methods.
Pay Bill
The PAY BILL option opens a "Scan to pay your bill" screen — "Hold the QR code or receipt barcode in front of the scanner." It reads an existing order: an already-paid one warns "Order already paid", an unreadable one shows "Invalid order". A valid unpaid order goes through the identity gate (with a bill summary) to the checkout and payment screen.
Order confirmation
After payment, a full-screen success page shows your logo, a check-mark, Payment Success!, and a very large fulfilment number — labelled Queue # (pager / daily order number) or Table for a dine-in order with a table. It can't be back-dismissed; it auto-returns to idle after a 60-second countdown, or immediately via the big New Order button.
The customer collects their receipt per your receiptOptions: a QR to scan, and/or Email / SMS buttons that prompt for an address or number. For signed-in members the kiosk waits while the backend emails the receipt, then confirms with a masked address ("Receipt sent to jo*n@domain").
Behind the scenes, on payment success the kiosk prints the customer receipt and any kitchen chit(s) to the configured printers, and the order routes to the KDS through the backend's order service. The kiosk subscribes to live updates for menu changes and order status (e.g. a PayNow push that auto-completes payment).
Good to know / Limitations
Know these before you go live
- English menu only. There's no customer-facing language selector — product names and UI show English text. Regional differences come from which payment methods (e.g. PayNow for SG) and member-login methods you enable, not a locale toggle.
- No dedicated accessibility mode. "Accessibility" here means large tap targets and a responsive layout suited to a standing kiosk — there's no screen-reader or voice mode and no font-scaling slider.
- No true offline ordering. The kiosk needs the backend for menu, cart, order, and payment. When the connection drops it reports the error rather than queuing the order — get it back online before relying on it.
How admin settings drive the kiosk
Nearly everything the kiosk does is set in the account it logs into:
| What you change in admin | What it controls on the kiosk |
|---|---|
| Products & categories with Visible On = kiosk, plus stock, time windows, variants, modifiers, bundles, BCRS / Nutri-Grade flags, and container-colour discounts | What appears in the menu and how each product customises. |
| Payment methods with channel kiosk + register | Which tenders show in the payment picker. |
The outlet Order tab — dine-in / takeout / pay-bill, operationType, member-login methods, guest-entry fields, remarks channel, redemption toggles, pager and receipt options | The Home buttons, identity flow, loyalty surfaces, and confirmation. |
See Self-Service Kiosk (CommerceOS) for account creation, Products for menu visibility, Payment Methods for kiosk tenders, and Outlet Settings for the Order tab.
Related
- Self-Service Kiosk (CommerceOS) — create the kiosk account and its outlet/register binding this app logs in with.
- Products — mark products and categories visible on the kiosk.
- Payment Methods — enable the tenders the kiosk offers.
- Outlet Settings — the Order tab that drives order modes, identity, and receipts.
- Kitchen Display (KDS) — where kiosk orders land in the kitchen.
- Digital Wallets — PayNow and the wallet tenders the kiosk accepts.