Loyalty Platform — Administrator Manual
The full reference for running a restaurant's loyalty program: every admin-panel screen, every setting, and how the cashier and guest experiences connect back to it.
01 Introduction
What this document covers, and who it's for.
This is the complete reference manual for the loyalty platform — every screen in the admin panel, what each setting does, and how it affects what your cashiers and guests see. If you're setting the program up for the first time, configuring campaigns, or just need to look up what a field does, this is the document to search.
There are three roles in the system, each with its own login and its own URL. As the owner or manager, you'll mostly live in the admin panel, but it helps to know how the other two work too.
| Role | How they sign in | URL pattern |
|---|---|---|
| Owner / admin | Email + password | https://loyalty.solvit.work/login |
| Cashier / staff | A 4–8 digit PIN, set by the admin in Settings — no email or password | https://loyalty.solvit.work/staff/{restaurant-slug} |
| Guest | No login at all — a personal link/QR code, or self-registration | /card/{guestId} or /join/{restaurant-slug} |
Section 13 covers chains — how the platform connects more than one of your locations together, if you run more than one. Sections 14–17 summarize staff management and the cashier and guest experiences for context. The cashier flow is also documented on its own, as a short till-side cheat sheet, for staff who don't need the full manual.
02 Plans & licensing
DEMO, BASIC, PRO, ENTERPRISE — what each unlocks.
Your restaurant's account runs on one of four plans. Plans are assigned by the platform, not self-serve — you can't upgrade yourself from inside the app; you request a change and get contacted.
| Plan | Guests | Programs | Push & automation | Notes |
|---|---|---|---|---|
| DEMO | No cap | All 4 types | Included | Full feature trial, time-limited |
| BASIC | Capped count | Only 1 program, and it must be a Discount % type | No push notifications | Also limited to a single tier |
| PRO | Higher / no cap | All 4 types, multiple at once | Push notifications, segments & campaigns | |
| ENTERPRISE | Everything in Pro | All 4 types | Push, segments & campaigns | Plus multi-location management for restaurant groups |
On BASIC, screens for extra programs, tiers, segments, campaigns, and push notifications show upsell prompts instead of the full feature. This manual is written and screenshotted against an Enterprise-tier demo account, so every screen described here is unlocked — your own account may show fewer options depending on its plan.
To request a plan change or renewal, go to Settings. The Plan and license box at the top shows your current plan and expiration (or No expiration date, as on the Enterprise demo account) with a Request renewal button — clicking it starts the conversation with the platform team, it doesn't change anything instantly.
03 Logging into the admin panel
Email + password, one login per restaurant.
- Open the login URL
Go to
https://loyalty.solvit.work/loginin a desktop or mobile browser. - Enter your email and password
These are the owner/admin credentials set up when your restaurant's account was created.
- You land on the Dashboard
From there, the top navigation bar — Dashboard, Guests, Segments, Campaigns, Programs, Tiers, Card design, Notifications, Settings — takes you anywhere else in the panel, plus a Staff sign-in link and a Log out link on the right.
The language switcher (RU / EN / CG) sits in the top-right corner of every admin page and changes the panel's own labels. It does not translate program, tier, or segment names you typed yourself — see A note on multilingual guests.
04 Dashboard
Your at-a-glance view of program health.
The Dashboard is the landing page after login. At the top, a line under the page title lists every currently active program by name, so you always know what's live at a glance.
| Metric | What it means |
|---|---|
| Total guests | Every guest who has ever registered, self-registered or added by staff. |
| Cashback issued, € | Total cashback ever credited to guests across all cashback programs, lifetime. |
| Cashback redeemed, € | Total cashback guests have actually spent against a bill, lifetime. |
| Outstanding, € | Issued minus redeemed — the cashback liability currently sitting on guest balances, unspent. |
| Total transactions | Every purchase and redemption ever recorded, combined. |
Below the metric cards, the Last 14 days chart is a daily bar chart with three series — Spent (€), Earned (€), and Redeemed (€) — so you can see purchase volume and program activity move together day by day.
The Guest sources bar shows the split between guests Added by staff (cashier manually created a card) and Self-registered (guest filled in the join form themselves). Next to it, the Guest segments box shows a colored bar plus a list of how many guests sit in each RFM segment (Champion/Loyal/Drifting/At risk/New — see Segments); clicking any segment in that list opens Guests pre-filtered to it.
Below that, the Guest tiers box works the same way but for tiers — including any tier with zero guests in it, shown as "0" rather than being hidden, so you can see a tier exists even if nobody has reached it yet. Clicking a tier opens the same pre-filtered Guests view.
The Top spenders table lists the eight guests with the highest lifetime spend — name, visit count, and total spent, with each name linking to that guest's detail page. Next to it, Birthdays has a 7/30/90-day toggle and lists which guests have a birthday coming up in that window, with the date and days remaining — handy for a manual glance even with the automatic Birthday campaign already enabled.
Program performance lists every program with its Status, how many times it has Triggered, and how much it has Issued — in stamps (×) for a stamp card, or in € for cashback and discount programs — the fastest way to see which program is actually doing work and which one is sitting idle.
Program, segment, and tier names throughout the dashboard are whatever the restaurant owner typed when creating them — this demo account happens to have named everything in English ("Cashback 5%", "Stamp card: every 10th coffee free"), but the platform never translates free text like this on its own. See the note on multilingual guests.
05 Guests
Your full guest list, filters, and each guest's detail page.
The Guests page lists every guest with a Filters panel above the table: Segment (defaults to "All guests"), Gender, Tier, Not visited for, days, Avg. check from/to, €, Total spent from, €, and Visits from, with Apply and Reset buttons. The table itself is sortable by any column: Name, Card, Phone, Balance, Tier, Segment, Total spent, Visits, Avg. check, Last visit.
Two buttons sit above the table: Self-registration QR opens the printable QR code that sends guests to your join form (the same form as the Guest self-registration link in Settings), and + New guest lets staff or admin create a card manually for a guest standing in front of them.
Clicking any guest's name opens their detail page: a balance card for every cashback program they hold, a tier badge next to their name with an Edit link to override it manually and a Tier history link next to that (see Tiers), a Statistics box (Total spent, Total earned, Total redeemed, Visits, First visit, Last visit), their personal Guest card (QR) with an Open guest page → link, and a full transaction history table (Date, Type, Description, Amount) — identical in substance to what the guest sees on their own card.
If a stamp reward is ready, a green banner reading e.g. 🎁 Ready: Stamp card: every 10th coffee free appears with a Grant link — same as on the till.
Two boxes let you act on the guest without a physical till at all:
- Simulate purchase (POS)
Enter a Purchase amount, € and tap Process purchase. All matching active programs apply at once, exactly as they would at the cashier's till — useful for correcting a missed purchase or testing a new program's conditions.
- Redeem
Shows the guest's combined Bonus: €X.XX. Enter an Amount and tap Redeem to deduct it — the same combined-balance behavior as the till (see Loyalty programs).
These simulator boxes exist on the admin guest detail page too, not just at the till — handy for back-office corrections or demoing the program without touching a shift device.
The Personal notification box sends a push to this one guest only: fill in Title and Message text, then tap Send to this guest. It only reaches them if they've opted in and installed the card page — see Push notifications.
06 Segments
Automatic RFM buckets, plus your own custom groups.
Every guest is placed automatically into one recency/frequency ("RFM") segment, recalculated live with no manual work. The Segments page lists the five built-in segments first, each tagged built-in, followed by any custom ones you've created.
| Segment | Rule |
|---|---|
| New | No purchase yet |
| Champion | Visited in the last 14 days and has 5+ lifetime visits |
| Loyal | Visited in the last 45 days |
| Drifting | 45–90 days since last visit |
| At risk | 90+ days since last visit |
Each row shows its Segment type and current guest count. Built-in segments are always Dynamic — filter-based, updates automatically. Tap + New segment to build your own, in one of two ways:
- Dynamic (filter-based)
Define a rule — e.g. gender, a spend threshold — and the segment membership recalculates automatically as guests' stats change. Editable later via Edit filter.
- Static (manually picked)
A hand-picked, fixed guest list — e.g. a "VIP list" — that only changes when you add or remove someone yourself via Manage guests.
Even the built-in segments' display names are editable free text, just like program and tier names — this demo account happens to have them in English ("Champions", "Loyal", "Drifting", "At risk", "New"), but the platform doesn't translate them for you if you rename them into another language. See the closing note.
Every guest-list filter described in Guests — gender, average check, total spend, visit count — doubles as a way to scope a custom segment.
07 Campaigns
Two automatic scenarios that run daily, unattended, once configured.
The Campaigns page holds two built-in automations, each with its own Enabled checkbox. Once turned on and saved, they run on their own, once a day, with no further admin action needed.
🎂 Birthday — grants a bonus ahead of a guest's birthday, then lets it expire if unused:
| Field | Demo value | Meaning |
|---|---|---|
| Grant bonus this many days before | 3 | How many days before the birthday the bonus is granted |
| Bonus amount, € | 5 | How much is credited |
| Expires after, days past birthday | 14 | If unused by then, the unused bonus is automatically removed |
| Program to grant from | Cashback 5% | Which cashback program's balance receives the bonus |
🔄 Reactivation — the instant a guest's segment crosses from Loyal into Drifting (that is, they pass 45 days without a visit), they automatically receive a push with a "come back" offer, no admin action required. Configure a Push notification title and Notification text, and optionally a Welcome-back bonus, € (optional) credited to a chosen Program to grant from (optional).
Both panels end with a Run history table (Guest, Event, Date) so you can confirm the automation is actually firing — e.g. "Milica Vuković — Bonus granted — 2026-07-12" or "Jovana Radulović — Offer sent — 2026-08-16".
Run history is the fastest way to sanity-check a new campaign: save your settings, then come back the next day and confirm the expected guests show up in the table before trusting it long-term.
08 Loyalty programs
Four program types, each a "condition → action" rule.
The Loyalty programs page describes itself well: "Each program is a 'condition → action' rule. You can keep several active at once — e.g. 5% cashback + a separate stamp program + a weekend discount." Tap + New program to add one; existing rows offer Edit, Disable, and Delete.
| Type | What it does | Typical conditions |
|---|---|---|
| Cashback % | Guest earns a percentage of the purchase as spendable balance | Optional max cashback per purchase; optional minimum purchase amount |
| Cashback fixed | Guest earns a flat € amount per qualifying purchase, regardless of bill size | Same shared conditions below |
| Discount % | An automatic percentage off the bill, applied immediately — a smaller charge, not a balance | Can be restricted to specific guest tiers |
| Stamp card | One stamp per qualifying purchase; after N stamps the reward is ready for one-tap redemption | Same shared conditions below |
Any program type can also be limited by: minimum/maximum purchase amount, specific days of week, specific hours, first-purchase-only, guest's-birthday-only, or restricted to specific tiers.
A guest can hold balance in several cashback programs at once. The till (and the admin Redeem box) debit across them automatically, oldest balance first, and always show the guest one combined total to redeem — the cashier is never asked to pick which program to draw from.
09 Tiers
Automatic levels based on lifetime spend.
A guest's tier is determined automatically from their lifetime purchase total at your restaurant — you just set the € threshold each tier unlocks at. As the page itself puts it: "Any names work: Silver/Gold/Platinum, Bronze/Ruby, or your own."
| Tier (demo) | Threshold |
|---|---|
| Silver | from €0 |
| Gold | from €80 |
| Platinum | from €200 |
Tiers show as a colored badge next to the guest's name everywhere — the admin guest list, the guest detail page, and the guest's own card. Their real power, though, is gating: a Discount % program can be restricted to a specific tier, e.g. this demo's "10% off for Platinum", which only applies once a guest has crossed the €200 lifetime-spend line into the top tier.
A tier can also be set manually, overriding the automatic threshold — via the Edit link next to a guest's tier badge on their detail page (see Guests). This is meant for VIP exceptions: a guest who hasn't technically spent their way to Platinum yet but deserves the status by relationship or agreement. A manual override is logged as its own entry in that guest's Tier history (date, direction of the change, and the admin email that made it) — a natural tier-up from ordinary spending is not logged there, since nobody made a decision, it's just the normal consequence of purchases.
If two tiers share the same entry threshold (e.g. both "from €0"), any guest without a manual override always shows the base tier, never a newer tier that happens to tie on threshold — the platform distinguishes "tier assigned by hand" from "tier computed from spend" even when the thresholds are tied.
On the BASIC plan, only one tier is available — tier-gated discounts aren't practically usable until you're on Pro or Enterprise.
10 Card design
One set of branding, three places it shows up.
The Loyalty card design page lets you set: Title on the card, Subtitle (e.g. program name), a Logo (an emoji, or an uploaded image via Upload image), a Card background image (uploaded, or a gradient built from Primary color / Secondary color / Text color if no image is set), with a live Preview (demo data) panel on the right showing exactly how it will render.
This one set of branding choices reaches three places at once:
- The guest's card page
Exactly what the preview shows — background, logo, title, subtitle, and text color.
- The join/login page header
The same branding frames the self-registration form and staff/admin sign-in screens.
- The home-screen icon
As the page itself notes: "This logo also becomes the app icon when a guest or staff member adds the page to their Home Screen." See Installing on the guest's phone.
11 Push notifications
Broadcast to everyone who's opted in.
The Push notifications page shows your current Subscribed guests count, with the reminder that "Guests enable notifications themselves on the card page ('Get bonus notifications' button)" — nothing is ever pushed to a guest who hasn't opted in. Below that, a composer (Title, Message text) sends a one-off broadcast to every subscribed guest via Send to all.
The Campaign history table below it — described on the page as being "to evaluate marketing campaign effectiveness" — logs every broadcast with Date, Title, Delivered, Failed, and Reach, %, whether it was sent manually here or triggered by an automatic campaign (see Campaigns).
Push only works once a guest has installed the card page to their home screen (see Installing on the guest's phone) — a real technical limitation, not a bug. A guest who has merely opted in but never installed the page will not receive anything, and that's expected.
12 Settings
Restaurant identity, staff access, and the two links you'll share most.
Beyond the Plan and license box covered in Plans & licensing, the Settings page holds:
| Field / section | What it's for |
|---|---|
| Restaurant name | Shown across the admin panel and guest-facing pages |
| Staff PINs | Each cashier now has their own personal PIN, not one shared code — PINs are issued, reset, and revoked on the dedicated Staff page, not here |
| Staff fraud protection | An alert threshold, € and a manager-approval threshold, €, each set separately for charges and redemptions — see Staff for what each does |
| Lock till on screen off | A checkbox that signs a cashier out the moment their phone's screen locks or turns off — useful when a shift device changes hands or might be left unattended |
| Automatic bonus expiration | An Enable bonus expiration checkbox — "If a guest hasn't visited for longer than this period, part or all of their accumulated bonus is deducted" |
A single Save button applies these settings together. Two more boxes at the bottom give you the links you'll actually hand out:
- Staff link
This is the URL from the role table in the introduction (
/staff/{restaurant-slug}) — open it once on the shift device; each cashier then signs in with their own personal PIN. - Guest self-registration link
"A QR code for this link is on the 'Guests' page." Same link as the Self-registration QR button described in Guests — print the QR on a table tent, receipt, or physical card.
13 Chains: independent locations vs. a unified brand
Two different ways to run more than one location under the platform, with worked examples.
A chain links two or more of your restaurant's locations together so guests, and optionally programs, are recognized across all of them instead of staying siloed per location. Chains are an ENTERPRISE-plan feature and are set up by the platform team when you request it (see Plans & licensing) — you can't create one yourself from the admin panel. Once your locations are linked, a My chain link appears in the top navigation of every location in it, and a location switcher dropdown appears next to your restaurant's name.
Every chain is set up as exactly one of two modes, decided once when the platform team creates it: Independent locations or Unified brand. The mode is not a matter of degree — it's a completely different answer to the question "does this guest's card work the same way everywhere?" The rest of this section walks through both, with two real demo chains screenshotted side by side.
Nothing about chains is optional infrastructure bolted onto a single restaurant — a location inside a chain still has its own PIN-based cashier module, its own license and plan status, and (for Independent locations) its own programs, tiers, and card design, exactly as described everywhere else in this manual. A chain only changes how guest identity and, for Unified brands, configuration are shared between locations.
Independent locations
Use this mode for a group of restaurants that happen to share ownership or back-office management but are otherwise separate businesses — a hotel's beach café and its rooftop bar, for example, with different menus, different pricing, and no reason a coffee cashback bonus earned at one should be spendable at the other.
By default, an Independent location is no different from a standalone restaurant — its guests, programs, and card design are entirely its own, and a guest who signs up at one location is completely unknown at the other. The one thing a chain adds on top is the shared QR code toggle on the My chain page:
| Shared QR code | What a guest experiences |
|---|---|
| Off (the default) | A guest's card only works at the location where they signed up. Scanning it or searching for their phone/name at a sibling location finds nothing — as far as that location's staff and admin can tell, the guest doesn't exist. |
| On | The same card/QR code is recognized at every location in the chain — a guest never needs a second card. But their balance, tier, and stamp progress stay local to each location: earning cashback at one location does not add to, or even show up in, their balance at another. |
This is the one detail worth memorizing about Independent chains: turning shared QR on shares the guest's identity (their card is recognized everywhere), never their balance. Balance, tier, and stamp progress are pooled only in Unified mode — see below. If a guest asks "why doesn't my bonus from the beach café show up at the rooftop bar," this is why: it's how Independent mode is designed to work, not a bug.
Here's that distinction in the actual demo data. Marko Petrović signs up and makes a €42 purchase at Adriatic — Beach Café, which runs its own 8% cashback program:
Switch to the sibling location, Adriatic — Rooftop Bar (via Switch to on the My chain page, or the location dropdown next to the restaurant name), and search the same card number:
Marko's name, card number, and phone are the same at both locations — that's the shared identity at work, and it's why the Rooftop Bar's guest row shows (Adriatic — Beach Café) under his name, a small home-location tag that only appears for a guest recognized from elsewhere in the chain. But his balance, tier, segment, total spent, and visit count are each computed independently per location, starting from zero at the Rooftop Bar despite his purchase history at the Beach Café.
Two more tools exist specifically for Independent chains, both on the My chain page:
- Copy settings
A one-time, one-directional copy of the current location's tiers, programs, and card design to one or more sibling locations you pick — matched and updated by name where a name already exists on the target, created fresh where it doesn't. This is a convenience for setting up several similar locations quickly, not an ongoing sync: edit a program afterward and it does not propagate again automatically. A result panel reports exactly what was created, updated, or skipped (skipped happens when a name matches more than one thing on the target ambiguously).
- Switch to
Every location in the chain, current guest counts, and license/expiration status are listed in one table — click Switch to next to any sibling to move your admin session there instantly, without logging out and back in with different credentials. Independent-chain locations don't share a login the way Unified ones do (see below), but if you're the same owner/admin across several, this saves you from juggling separate accounts.
Unified brand
Use this mode when every location is genuinely the same loyalty program wearing different addresses — a coffee chain where a stamp card started downtown should keep counting up at the airport branch, because to the guest (and to the brand) it's one loyalty relationship, not several.
A Unified chain has exactly one login, shared across every location — created once for the chain's first ("owner") location, with every other location added later reachable only by switching into it, the same Switch to mechanism as Independent chains. There's no separate shared QR code toggle to think about: identity, balance, tier, and stamp progress are always fully shared across every location in a Unified chain — that's the entire point of the mode, so it isn't optional.
Compare this to the Independent example above: at the Rooftop Bar, Marko's numbers all reset to zero. At the Airport, Ana's numbers are exactly what they were at Downtown — €4.50 total spent, tier SILVER, one visit already counted. That's pooling, and it's what "unified" means in practice.
| Independent, shared QR off | Independent, shared QR on | Unified | |
|---|---|---|---|
| Guest recognized at a sibling location | No | Yes | Yes |
| Balance / tier / stamps pooled across locations | — | No, local per location | Yes, always |
| Programs, tiers, card design | Independent per location | Independent per location | One shared configuration |
| Admin login | Separate per location | Separate per location | One shared login, switch between locations |
Two ways a Unified brand's configuration is managed
Every Unified chain shares one configuration, but the platform has two different mechanisms for keeping it shared, and which one your chain uses changes what the My chain page and the Programs page look like. Both mechanisms produce identical results for the guest and cashier — this difference is purely about how the admin panel keeps locations in sync behind the scenes, and it's worth recognizing on screen because the wording is genuinely different.
The classic mechanism (every Unified chain starts here): each location physically holds its own copy of every tier, program, and card design setting. Editing one from any location writes through to every sibling's copy automatically and immediately — from the admin's point of view it behaves like one shared configuration, but under the hood it's N synchronized copies, not one thing.
The newer HQ-owned mechanism: for chains the platform team has migrated (a one-time, reversible cutover), there is no fan-out at all — programs, tiers, and card design live as a single physical row at the chain's owner location, and every other location simply reads that one row. The My chain page's note changes to reflect this, and mentions one extra capability that only exists in this mode:
You don't need to do anything differently day to day because of which mechanism your chain uses — you still edit programs, tiers, and card design from the same regular Programs, Tiers, and Card design pages either way, from any location, and changes still apply chain-wide immediately. The only thing that changes is whether the Programs page shows a Locations column (see next).
Per-location program targeting (HQ-owned chains only)
An HQ-owned chain can additionally restrict any individual program to specific locations, instead of it always being live everywhere. This is genuinely new capability, not available on the classic synced-copies mechanism — there, a program is either active chain-wide or disabled chain-wide, nothing in between. On the Programs page of an HQ-owned chain, an extra Locations column appears with one toggle chip per location:
Click a location's chip to toggle that program on or off there — green means active at that location, grey means not. A brand-new program created on an HQ-owned chain starts with no locations targeted at all (an explicit, deliberate choice on the platform's part — a program never silently goes live somewhere by default); switch every chip on to make it behave like the classic "everywhere at once" model, or leave it partial for something like an airport-only travel bonus that shouldn't apply to guests who never leave downtown.
A new location added to an already HQ-owned chain is an exception to "starts with nothing targeted" above — it automatically inherits every program that's currently active chain-wide, exactly like joining a classic Unified chain would. Targeting is something you narrow deliberately afterward, not something a new location has to be manually opted into from zero.
Choosing between the two chain types
This is a decision the platform team makes with you when a chain is set up, not something you configure yourself later — but it helps to know which questions decide it:
- Should a bonus earned at one location be spendable at another? If yes, that's Unified. If each location should keep its own books, that's Independent.
- Do all locations run genuinely the same menu of programs, tiers, and branding — or does each one need its own pricing, its own tier thresholds, its own look? Same everywhere points to Unified; meaningfully different points to Independent.
- Do you still want a guest's card to be recognized (even if their balance isn't shared) across locations that otherwise run independently — e.g. so a hotel's front desk can look up a guest who's also a regular at its restaurant? That's Independent with shared QR code turned on — the middle ground between the two extremes.
14 Staff: PINs, roles & devices
Every cashier's personal PIN, roles, approved devices, and fraud alerts, in one place.
The Staff page is where you manage everyone who touches the till — from issuing a cashier's first PIN to reviewing a flagged transaction. It's built from three panels.
Cashiers
A table of everyone with till access: name, role, and status. Each cashier has their own personal PIN, separate from everyone else's. Per row:
- Role — a Cashier / Manager dropdown. A Manager can approve another cashier's transaction that crosses the manager-approval threshold (see below and Settings) by entering their own PIN.
- Reset PIN — issues a fresh PIN if the old one is forgotten, or if you suspect it's been seen by someone it shouldn't have.
- Deactivate — removes till access without deleting anything; past transactions still correctly show who processed them.
A + New cashier button adds someone new: name, role, and an auto-generated PIN you hand to them once, in person.
Devices
The first device a cashier signs in from is approved automatically. Any later new device — a replacement phone, or someone attempting a known PIN from an unfamiliar device — shows up here pending approval, and sign-in on it is blocked until an admin or manager taps Approve. Already-approved devices can be pulled at any time with Revoke, e.g. after a lost phone or a departing employee.
Requiring new-device approval adds a real barrier against someone who learns a cashier's PIN quietly signing in from their own phone — knowing the correct PIN alone isn't enough on an unapproved device.
Suspicious activity
Operations that crossed the alert threshold, € from Settings (set separately for charges and redemptions) — an unusually large single purchase, or an oddly sized redemption. Each row shows who processed it, the amount, the guest, and the date, with three actions: Approve (confirmed legitimate), Decline (flag it as an error or concern), and Mark reviewed (clear it from the list without a verdict either way). This is a retrospective check — the operation on the till already went through; for approval required before an operation completes, see the next callout.
If a manager-approval threshold, € is set in Settings, an operation above it won't complete on its own — the cashier is prompted to call over a manager, who enters their own PIN right there on the charge/redeem screen to approve it. The resulting transaction history keeps both names: who ran it and who approved it.
15 The cashier module
What staff see at the till — covered in full depth in the separate cashier quick guide.
Cashiers use a stripped-down, PIN-only, mobile-friendly module — no email, no menus beyond what a till needs. Each cashier signs in with their own personal PIN, issued and managed on the Staff page, not a single shared code. It has three screens.
- Sign in with your personal PIN
The Staff sign-in screen — a PIN field and a Sign in button. The first device a cashier signs in from is approved automatically; signing in from a new device afterward may need an admin or manager's approval (see Staff).
- Scan guest card
A camera-based QR scanner reads the guest's card. If the camera can't start — the screenshot below shows the message "Couldn't start the camera (in use by another app, or unavailable)." with a Try again link — the cashier can always fall back to the manual field underneath: Card number, e.g. LC-123456789, followed by Find by number. The manual field is present under the camera at all times, not only when the camera fails.
- Charge screen
Once a guest is found, a numpad and a two-button toggle appear: Charge (purchase) and Redeem (€X.XX) (the latter's label shows their current balance). In Charge (purchase) mode, the cashier keys in the bill total and taps Record purchase — every matching active program applies automatically, with nothing to pick manually. In Redeem mode, the amount field is pre-filled with the guest's full balance and can be lowered before confirming. A ← Scan another link above the guest card returns straight to the scan screen for the next guest, no page reload needed.
If the amount exceeds the manager-approval threshold, € set in Settings, a regular cashier's PIN isn't enough — the screen asks for a manager to approve by entering their own PIN right there. Smaller operations still go through with just the cashier's own PIN, as usual.
If a stamp-card reward is ready, that green banner replaces the need for any amount entry — the cashier just taps Grant. For the condensed, till-side version of this section with more troubleshooting scenarios, see the dedicated cashier quick guide.
16 The guest card
Everything a guest sees about their own loyalty status.
A guest's personal card page is the one screen they'll return to over and over. Top to bottom, it shows:
- Restaurant name and logo, in the branding set on the Card design page
- The guest's name and tier badge (e.g. "Milica Vuković" with a "PLATINUM" badge)
- Their total combined balance, and a one-line summary of active programs underneath
- Their card number (e.g. "Card № LC-820156493")
- An Add app to Home Screen button (see Installing on the guest's phone)
- A reward-ready banner when applicable — e.g. "🎉 Your reward is ready: Stamp card: every 10th coffee free — tell the staff!"
- A stamp-card progress chip when applicable, e.g. "Stamp card: every 10th coffee free: 12 ×/10"
- A personal QR code, for the cashier to scan or for the guest to save/share
- A Get bonus notifications opt-in toggle, and any push messages already received under a Notifications heading
- A full Transaction history — every earn and redeem, with a plain-language description (e.g. "+€0.78 cashback (5%) — 'Cashback 5%'") and the amount. Once the history spans enough time, older entries collapse into per-month groups — the newest month is expanded by default, and a header like "May 2026 (12 transactions)" expands the rest on tap, so a long history doesn't turn into an endless scroll.
This is the same underlying data as the admin guest detail page (Guests) — a guest can always see exactly what you can see about their own balance and history, nothing hidden.
17 Installing on the guest's phone
No native app — a home-screen install, with one platform-specific catch.
There's no app-store app. The guest's card page is installed straight from the browser as a PWA (progressive web app) via the Add app to Home Screen button, which behaves differently depending on the guest's platform.
| Platform | What happens |
|---|---|
| iOS Safari (iPhone) | No browser API can trigger install directly, so the button opens an instruction dialog: "1. Tap the Share icon ⬆️ at the bottom of Safari · 2. Choose 'Add to Home Screen' · 3. Tap 'Add' — the icon will appear on your Home Screen." |
| Android Chrome | The browser's native one-tap install prompt fires directly — tapping the button triggers the OS's own "Add to Home Screen" / "Install app" confirmation, no manual steps. |
| Any other browser | A generic fallback: open the browser's own menu (usually ⋮ top-right) and look for "Install app" / "Add to Home Screen". |
The iOS instructions only work from Safari itself — not from an in-app browser (Instagram, Telegram, Messenger, etc.). The install dialog says as much: "Only works in the Safari browser (not inside apps like Instagram/Telegram)." If a guest opened your link from a chat app, they must first tap that app's own "open in Safari" / "open in browser" option before the Share-icon steps will work at all.
Once installed, the home-screen icon uses the restaurant's own logo and color scheme from Card design — and, critically, this is also the point at which push notifications start actually working for that guest (see Push notifications).
18 A note on multilingual guests
Free-text names don't get auto-translated — plan for it.
Program names, tier names, segment names, and card design text (title/subtitle) are all free text you type once when creating them. They are not automatically translated per guest language — the platform's own EN/RU/CG switcher only translates its own interface labels, never text you entered yourself. This demo restaurant happens to have named everything in English ("Cashback 5%", "Platinum", "Champions"), which is why every screenshot in this manual reads cleanly in English — but if your own restaurant's owner types those same fields in Russian or Montenegrin, that's exactly how every guest will see them too, regardless of which language they've switched their own interface to.
If your guests read different languages, a program named entirely in one language will show that way to everyone, regardless of which language they've switched their own view to. This is real, current product behavior, not a bug — plan your naming around it:
- Favor universal terms where you can — numbers, %, and emoji read the same in every language (e.g. "☕ ×10" instead of a sentence).
- Where a word is unavoidable, pick one short and recognizable across your guests' languages rather than a full phrase.
- Remember this applies to tier badges too, since they're shown next to every guest's name everywhere — the admin guest list, the guest detail page, and the guest's own card.