Documentation Changelog
Getting Started

Brand Settings

Every field on the Brand Settings screen — the first screen a new brand's Super Admin sets up — and what each one does.

Brand Settings is one screen, one record per brand — every outlet follows what's set here. It's normally the first thing a new brand's Super Admin fills in, since Country drives timezone and currency, which pricing, reports and receipts all depend on.

What it is

Brand Settings — saved together with a single Save bar. Nothing writes until you confirm; Discard puts every field back. In the sidebar: System → Brand Settings.

Brand Settings screen showing every field: Country, Date Format, Start of Week, Payment, Table Management, Kitchen, Display Boards, Order Notifications, Waiter Order Notifications, Add to Cart Sound, and Loyalty & Store Credit.
Brand Settings, in full — every field from Regional through Loyalty Program.
Unsaved changes bar at the bottom of the Brand Settings screen, with Discard and Save changes buttons, after toggling Allow Partial Payments.
Real workflow — change a field, and an unsaved-changes bar appears until you Save or Discard.
flowchart TD
    A[Open Brand Settings] --> B[Edit a field]
    B --> C[Unsaved-changes bar appears]
    C -->|Discard| A
    C -->|Save changes| D{Passes validation?}
    D -->|Yes| E[✅ Brand settings saved]
    D -->|No| F[❌ Error toast, value reverts]

Save validates every changed field at once — if one is invalid, nothing saves, not even the valid changes.

Error toast reading 'Value must be a valid number and at least 5 seconds', with the Refresh Interval field reverted to 15.
A rejected save — Refresh Interval set below the 5-second minimum. The field snaps back and nothing is written.
Success toast reading 'Brand settings saved', with the unsaved-changes bar gone.
A successful save.

Regional

  • Country — picks the country; fills in timezone, currency, and currency symbol in the same save (still editable after).
  • Date Format — 4 layouts (31/12/2026, 12/31/2026, 2026-12-31, 31-Dec-2026) with a live preview.
  • Start of Week — Monday, Sunday, or Saturday.
Date Format dropdown showing 31/12/2026 (DD/MM/YYYY) and Start of Week dropdown showing Monday.
Regional — Date Format and Start of Week.

Operations

Payment — Allow Partial Payments: on lets staff collect less than the full bill at the till and settle the remainder later; off requires the full amount every time a payment is taken on Billing / POS. Store credit is always exempt from this guard, since it's the customer's own prepaid money rather than a shortfall.

Payment card showing Allow Partial Payments toggle off, with description: when enabled staff can collect partial amounts, when disabled full payment is required.
Payment — Allow Partial Payments.

This toggle doesn't currently do anything. Payments are checked against outlet_settings.allow_partial_payment, a per-outlet field with no screen left to edit it — not against this Brand Settings value. Flipping this switch changes what the screen shows, not what the till enforces. It's the same class of bug as the Kitchen Transfer issue below, just not yet fixed the same way.

Table Management — Auto-Free Table on Order Completion: on frees a table automatically the moment its order completes, so it's immediately selectable again from Select Table on Billing / POS. Off leaves the table marked occupied until a staff member frees it by hand on the Tables screen.

Table Management card showing Auto-Free Table on Order Completion toggle on, with description: when enabled tables are automatically freed after an order is completed, when disabled staff must free the table manually.
Table Management — Auto-Free Table on Order Completion.

Kitchen — Allow Kitchen Transfer: on lets a manager reassign an order item to a different kitchen station from the Kitchen Display after it's already been sent (bumped). Off keeps every item pinned to whichever station it was originally routed to.

Kitchen card showing Allow Kitchen Transfer toggle on, with description: when enabled managers can transfer order items between kitchen stations, when disabled items stay in their assigned kitchen.
Kitchen — Allow Kitchen Transfer.

This one used to have the same bug as Payment above — the toggle wrote to Brand Settings while the API enforced a frozen, no-longer-editable outlet-level copy, so a Super Admin turning it back on did nothing (GitLab #185). It's since been fixed to read this Brand Settings value.

Display Boards — Refresh Interval (Seconds): how often every live, auto-refreshing screen re-polls for new data — Kitchen Display, Table Display, Available Tables, Display Board, Customer Order Board, My Orders, My Deliveries, and the main Orders page all read this same value. 5–300 seconds, default 15; lower means fresher data at the cost of more requests.

Display Boards card showing Refresh Interval (Seconds) field set to 15, with description: how frequently the table/kitchen displays fetch the latest live data, default 15 seconds.
Display Boards — Refresh Interval.

Order Notifications — the "new order arrived" alert: a master switch, Notification Style (Modal or Toast), and Notification Tune (with preview). It fires on the same set of live screens as the refresh interval above — Orders, Kitchen Display, Customer Order Board, Display Board, My Orders, and My Deliveries — so turning it off is brand-wide, not just for one screen.

Order Notifications card showing Show new-order notification toggle on, Notification Style set to Modal, and Notification Tune set to Bell.
Order Notifications — the master switch, style, and tune.

Waiter Order Notifications — repeats the same idea, but scoped to a waiter's own My Orders screen specifically: a switch and tune for "assigned to me," and a separate switch and tune for "ready to serve," so the two are distinguishable by ear.

Waiter Order Notifications card showing Notify on order assigned, Assigned Tune set to Bell, Notify when order is ready, Ready Tune set to Ping, and Notification Style set to Modal.
Waiter Order Notifications — assigned and ready alerts, each with its own tune.

Add to Cart Sound — a switch plus a tune, played on the billing screen every time an item is added to the cart. Default "Blip."

Add to Cart Sound card showing Play sound on add-to-cart toggle on and Add-to-Cart Sound set to Blip (default).
Add to Cart Sound.

Loyalty Program

Loyalty & Store Credit — master switch Enable loyalty program; off hides every loyalty control everywhere. On, five fields tune it: Earn amount (spend per point), Conversion amount (points → currency ratio), Minimum points to convert, POS code attempts (1–10), and POS OTP verification — Type code (staff never see it, secure) vs. Show on screen (faster, weaker).

Loyalty & Store Credit card showing Enable loyalty program on, Earn amount 10.00, Conversion amount 100 points = 10.00, Minimum points to convert 100, POS code attempts 3, and POS OTP verification set to Type code (secure).
Loyalty & Store Credit — every field.

See Settings reference for full validation rules.

Common questions

Can I change this after saving?

Yes, any time — not a one-time wizard.

Who can open this screen?

Super Admin, or a custom role with Manage brand settings (settings.brand.manage). The permission gates the whole screen, not just saving — anyone else typing the URL directly is redirected to the Dashboard before the page renders, with no error message.

Outlet Owner account landing on the Dashboard after navigating directly to the Brand Settings URL, with no Brand Settings link in the sidebar and no error message shown.
An Outlet Owner (no Manage brand settings) opening the URL directly — silently redirected to their Dashboard.
I saved, but nothing changed.

You likely navigated away before clicking Save — check for the unsaved-changes bar first.

Troubleshooting

Problem Likely reason What to do
Redirected to Dashboard on click Missing Manage brand settings Ask your Super Admin to grant it
Change didn't take effect Left the page before clicking Save Watch for the unsaved-changes bar, then Save
"Value must be a valid number and at least 5 seconds" Refresh Interval below 5, or above 300 Re-enter within 5–300