Skip to content

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.

  1. On the Merchant screen, type the kiosk account's Username and Password.
  2. Tick Remember Me to keep the username filled in for next time.
  3. 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:

ControlWhat it does
Domainrewardly.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 TrackCodePush 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:

SettingWhat it does
Domain name settingsThe same environment switch as the installer sheet.
ThemeSystem / Light / Dark, saved on the device.
Modifier options layoutShow modifier choices in one or two columns.
LogoutAfter 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:

ButtonWhen it showsWhat it does
DINE IN (EAT IN for QSR)Dine-in allowedSets the order to dine-in; may first route to table/pager selection.
TAKE OUTPickup allowedSets the order to takeout.
PAY BILLPay-bill allowedScans 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:

TabHow the customer signs in
Show QRThe kiosk displays its member QR for the customer to scan with their phone.
Scan QRThe customer holds their member QR to the scanner — "Please display your member QR to the scanner."
PhonePhone number + password.
SMS OTPPhone number; GET sends a 6-digit code (5-minute countdown) to verify.
PINPhone number + 4-digit PIN.
GuestPhone-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 shownWhy
"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 kiosk in 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."

TenderHow it works
T05Connects to a local T05 card terminal over WebSocket; "Payment waiting…" until the terminal approves.
AdyenPays on a connected Adyen terminal; the kiosk completes when the order returns PAID.
PayNowShows a Scan to Pay QR; the customer pays in their banking app, then taps CHECK PAYMENT (or a live push) to confirm.
TapToPayA 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 adminWhat 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 discountsWhat appears in the menu and how each product customises.
Payment methods with channel kiosk + registerWhich 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 optionsThe 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.