Point of Sale.
Built for service speed. Two taps deep, every screen. The cart updates the moment you tap an item — kitchen routing happens on send, not on close, so the line never waits on the till.
- Category browse + Quick screenSidebar of categories from the assigned menu; a 4×4 most-ordered grid per device.
- Order typesDine in / takeaway / collection. Toggle per device profile.
- Modifiers, variants & coursesMin/max-ruled choices. Half/Full, S/M/L. Starter/main/dessert routed by course on KDS.
- Send to kitchenItems appear instantly on the relevant station. Master-only routing with atomic claim — no duplicate prints.
- Fire courseManager fires a course; "FIRE COURSE" docket prints to station.
- 86 itemsMark unavailable. Greys out across every terminal, kiosk, QR menu and delivery channel within ~2 seconds.
- Discounts & voids% or fixed. Manager PIN required for voids.
- Allergen-aware cartIf the customer profile is attached, items containing their allergens hide automatically.
Payments & Stripe Connect.
Direct charges on one Stripe account per location. Card-present via Stripe Terminal SDK on Sunmi handhelds. Online + QR via Stripe Elements. Card-on-file is held with setup_future_usage=off_session for tabs — overage on a £80 bill against a £25 pre-auth charges silently with no extra prompt.
- Cash tenderAuto change calc, drawer opens, logs cash_movements row.
- Card via Stripe TerminalTap-to-pay on Sunmi. GMV tracked live per location.
- Stripe Connect direct chargesOne connected account per location; application_fee resolves per-channel from platform_settings.
- Pre-auth + off_session overageQR tabs hold a £25+ auth, capture at close, charge any shortfall off_session — no second 3DS challenge.
- Service chargeDefault 12.5%, configurable. Min-covers threshold.
- Tip promptsConfigurable presets, custom amount, no-tip allowed.
- RefundsFull or partial. Refund to original tender by default.
- Mixed tendersCard + cash + gift card on the same check. Reconciles to the closed-checks ledger correctly.
Kitchen Display.
A KDS that respects the line. Course timing. Station routing. Allergen gates. Print fast-path via Supabase Realtime Broadcast — tap-to-paper dropped from ~3 seconds to ~500ms in v5.5.84.
- 2× Pappardelle
- 1× Sea bream SHELL
- 1× Octopus
- 1× Sirloin · MR
- 1× Risotto funghi
- 2× Truffle fries
- 2× Burrata
- 1× Focaccia
- 1× Pappardelle
- 1× Sea bream NUT
- Live ticketsGrouped by station: kitchen / bar / grill. New tickets via Realtime Broadcast — sub-second.
- TimersElapsed per ticket. Amber at 8m, red pulse at 15m.
- Bump / complete / recallTap to mark complete; pull a bumped ticket back without re-firing.
- All-day countsLive count of every active item across the floor.
- Allergen gate at expoAllergen-flagged orders block until acknowledged.
- Course routingCart-line snapshots carry cat / station / kitchenName — no master-cache dependency.
- Online + QR ticketsEvery channel lands on the same KDS with source colour-coded.
- KDS-only modeSunmi or iPad locked to display-only.
Branded online ordering.
Your own DoorDash-grade ordering surface, branded to your venue. Logo, hero, accent colour — uploaded once in back office, live in ~5 seconds. Stripe Elements checkout, ASAP or scheduled fulfilment, shareable order-tracker URL. Customer cart lines carry cat/kitchen station/tax — kitchen routing works the same as in-house.
Dougboy — Brick Lane
Collection · ready in 22 min
- Per-merchant brandingLogo, hero image, accent colour — uploaded in BO Online Ordering page.
- Modifiers + variants + allergensSame logic as POS. Allergen icons on every card.
- ASAP or scheduledDay + time picker honours opening hours.
- VAT-compliant totalsUK gross prices with "incl. VAT 20%" line on every customer-facing total.
- OrderTracker URLShareable
?track=OL-XXX&p=1234. Polls every 5s. - Auto kitchen routingCart-line snapshots carry cat / kitchenName — KDS routes online tickets identically to in-house.
QR ordering, done properly.
Per-table QR codes with friendly labels (?t=T4). Pay-now or open-tab. Silent tab resume on rescan — same browser, same QR, the running total is right there. Different person at the table can settle the bill in one tap. Sub-numbering (T2.1 / T2.2) when two parties share a table.
- Pay-now or open-tabPer-location
qr_payment_mode: pay_now / open_tab / both. - Table-mode togglefixed (lock to QR), confirm (one prompt) or free (customer types it).
- Pre-auth + off_session overage£25+ hold at tab open. Bills above the hold charge silently on the saved card — no second prompt.
- Silent tab resumeRefresh, come back from the bathroom, rescan — the open tab is right there. localStorage stash keyed by slug + table.
- Settle from startDifferent phone? Scan the QR, pay any open bill at this table in one tap.
- Sub-numberingT2.1 / T2.2 when multiple parties share one table. Works for pay-now too (v5.5.162).
- Auto-surcharge for left-open tabsSnapshotted at tab-open so a config change doesn't retroactively change policy.
- BO QR generatorPer-table JPEG, live URL preview + Copy URL. Amber warning on unlabelled tables.
Delivery channels.
Deliveroo, Uber Eats, Just Eat and DoorDash through a single Deliverect connection. One menu, every channel. 86 once, 86'd everywhere. Channel revenue rolls into the same closed_checks ledger; reports slice by source.
- Single menu sourceEdit in back office, syncs to every channel.
- Per-channel pricingOverride prices per platform if you need to.
- Channel routingOrders fire to KDS by station, same as in-house.
- Pause channelOne tap to pause a platform when you're slammed.
- ThrottleCap inbound delivery orders by minute.
- ReconcileChannel revenue rolls into closed-checks. Filter reports by source.
Mobile POS.
A till in the apron pocket. Sunmi handhelds run the full ServOS surface — order at the table, take card payment in-hand, fire to KDS without a single trip back to the bar. Same data, same modifiers, same allergen gates as the static till.
- Pay-at-tableTap-to-pay built into the handheld. No portable terminal trip.
- Tableside orderingCourse-by-course, seat-by-seat. Same modifier surface as the till.
- Tab transferMove a tab from MPOS to the bar's static till in one tap.
- Multi-serverHand off mid-service. Tabs follow the table, not the device.
- Battery-awareHeads-up if a server's device drops below 15%.
- Offline-tolerantQueues orders if Wi-Fi drops. Reconciles on reconnect.
Three AI tools, not a chatbot.
AI Menu Importer (CSV / photo → priced menu), AI Shift Manager (plain-English BO queries with modifier-awareness), AI Order Taker (phone-line voice → cart, with parent-name composition so "Pint" becomes "Heineken — Pint"). All bundled, no add-on charge.
Heads-up: Octopus is at 4 portions remaining at current pace — likely 86 by 21:30.
- Plain-English queries"How are mains tonight vs last Friday?" → answer in seconds.
- Weak-seller flagsItems underperforming relative to cost-of-goods.
- Cover dropsCatch unexpected dips vs same-day-last-week.
- Stock projections"Burrata 86 by 21:30 at current pace." Pull from prep.
- Voice ordering with modifiersAlmond milk picks the option, not a note. Parent name composes into variants.
- Menu importerCSV or photo of an existing menu → priced items, modifiers, categories. Claude vision.
Back office.
Cloud-first. Same admin for one venue or twenty. Email + password (Supabase Auth). Sessions persist across browsers. v5.5.158 made every BO page share a single full-width responsive shell — fluid clamp() padding, max-width 1600px, no per-section overrides to fight.
- Menu managerMenus, categories, items, modifiers, variants, photos.
- Floor plan builderDrag-and-drop tables, sections, capacity, icons.
- Device pairingGenerate code → enter on Sunmi → device live in <60s.
- Online + QR configBranding, slug, opening hours, QR generator, table-mode, pre-auth amount.
- Reports & analyticsItem Sales Trend matrix, Daily Trend dashboard, source filter (POS/Kiosk/Online/QR).
- Responsive full-widthOne
.bo-page-shellacross every section. Mobile to ultrawide. - Per-location configTax, currency, timezone, service charge, tip rules.
- Staff & accessRoles, PINs, manager invites, role-based permissions.
Floor & tables.
Floor plan view of every table. Sessions persist across device handoffs, splits, transfers — customer + allergens carry through. active_sessions keeps the floor in sync across stations.
- Floor plan viewStatus colours: available, open, occupied, reserved.
- Auto-fit zoomScales to screen. Manual zoom + per-section view.
- Seat a tableTap available → covers + server. Optional guest attach.
- ReservationsName + phone + party + datetime. Auto-creates customer.
- Split billSplit into child checks. Reassign items between checks.
- Table transferMove open check to another table. Session carries.
- Walk-insOrder without seating. Optional customer attach.
- QR-awareTables with open QR tabs are flagged on the floor plan.
Bar tabs that don't get lost.
Open with a name, a card pre-auth or a saved profile. Add rounds across stations. Move a tab from the bar to a table when guests sit down — same tab, no re-keying. QR tabs and bar tabs are deliberately separate ledgers (QR uses order_queue.customer stash, never touches bar_tabs).
- Card pre-authTap once to open a tab. Held auth, settled at close.
- Named tabsOpen under a guest name when no card is offered.
- Tab transferBar tab → table tab → MPOS tab in one tap. Same ledger.
- Cross-station roundsBartender opens, server adds wine, kitchen fires food — single tab.
- Auto-close idleConfigurable idle timer; tabs auto-prompt to close.
- Pre-auth releaseReleases the difference back instantly on close.
Split however
the table wants.
No more "let me work this out on my phone." ServOS handles every common split — and the awkward ones too. Pay-what-you-can on QR lets each guest pay their own part while the balance updates live.
- Even splitWhole bill split N ways. Tip allocated proportionally.
- By seatEach cover pays for what they ordered. Seat 1, seat 2, seat 3.
- By itemDrag items into separate buckets. Useful for rounds.
- Custom amount"I'll pay £40, my friend covers the rest" — typed in.
- Pay-what-you-can on QREach guest opens the QR bill, pays their part, balance updates live.
- Mixed payment typesCard + cash + gift card on the same check. Reconciles correctly.
- Split tips fairlyPooled, individual, or split by hours worked.
- Re-split on the flyWrong split? Undo without voiding the check.
Everyone, in sync,
in real time.
Every screen — POS, KDS, MPOS, kiosk, back-office — updates the moment something changes. Supabase Realtime under the hood. No polling. No "pull to refresh." No two staff arguing over whose till is right.
- New order alertsAudible + visual on KDS the instant a ticket fires.
- 86 broadcast86 an item; every till, kiosk, QR menu and delivery channel updates within ~2 seconds.
- Tab changesIf two stations edit the same tab, both see the change live.
- Manager pingsVoid over £20, comp over £15, drawer variance — pings the manager's phone.
- Delivery statusDriver assigned, picked up, delivered — pushed to host stand and kitchen.
- Cover-ready"Order ready" pushes to the runner's MPOS, table number highlighted.
The system,
your way.
Hide what you don't use. Show only what your team needs. ServOS lets you build profiles at every level — venue-wide, role-by-role, or for a single device. The bar's POS doesn't need the kitchen view. The kiosk doesn't need to see voids.
- Per-venue profilesHide modules group-wide (e.g. delivery off for a fine-dining site).
- Per-role profilesServer, manager, owner. Show only what each role needs.
- Per-device profilesKitchen iPad shows KDS only. Bar till hides table sections.
- Feature flags, you in controlToggle individual features off without losing data — turn back on any time.
- Profile templatesPre-built for cafe, bar, fine dining, QSR. Pick one, edit, save.
- Lock the layoutManager-locked profiles staff can't change mid-shift.
Customers / CRM.
Lightweight CRM built into the POS. Phone-first. Saved allergen profile auto-filters the menu when a guest is reseated — same logic on POS, online and QR.
- Search by phone or namePhone exact, name fuzzy. Org-scoped.
- Profile fieldsName, phone, email, marketing opt-in, notes, allergens.
- Allergen profilePer-guest list of allergens; saved across visits.
- Auto menu filterWhen a guest is attached, items with their allergens hide.
- Reservation linkPhone on reservation creates / links a customer.
- Visit historyPast checks, average spend, last visit, server.
Cash drawer.
Per-shift sessions with denominations, declared vs expected, variance. Drawer-idle lock. Cross-device 15s sync. Location-wide end-of-day with per-drawer breakdown and manager-only close.
- Cash inFloat at start of shift, by denomination.
- Pay in / pay outReasoned, manager-PIN gated, fully audited.
- Cash dropMove cash to safe mid-shift. Logs movement.
- No saleOpen the drawer for change. Logged + reasoned.
- Cash upEnd-of-shift declared count vs expected, variance.
- Sign-in lockDrawer idle > n minutes → require staff PIN to reopen.
Orders Hub.
Single pane of glass for every active order, regardless of source. Tables · Bar · QR open tabs (pooled by payment_intent_id, emerald accent) · Walk-in / takeaway / delivery. Force-close a pooled QR tab sums every round, applies surcharge, captures Stripe and writes one consolidated closed_check.
- Single queueAll channels in one view, filter by type.
- Dedicated QR sectionPay-now + open-tab pooled by payment_intent_id with HELD/PAID badges.
- Force-close pooled tabSums all rounds, applies surcharge, captures + overage, writes ONE closed_check.
- Scheduled fireConfigurable lead time before pickup, default 30m.
- Edit without re-firingModal pre-fills all fields including the slot.
- Customer attachPhone-first; auto-creates customer if needed.
- Manual reprintReprint the customer ticket from the queue.
Receipts & print.
Branded. Durable. Quiet. Direct-bytes dispatch to thermal printers via the Node print agent. Failed printer never blocks the till — print_jobs is a durable queue. Realtime Broadcast cut tap-to-paper to ~500ms.
Dougboy
- Logo + brandLogo, header, footer text per location.
- Paper width58mm or 80mm rolls, configured per device.
- Auto-print on closeToggleable per device profile (on for till, off for KDS).
- Durable queueprint_jobs table; offline printer doesn't block sales.
- Manual reprintFrom check history, any time.
- Sunmi direct-bytesNo more silent failures on Saturdays.
Self-service kiosk.
Customer-facing screen mode. Card payment via Stripe Terminal. Ticket fires straight to KDS. Same menu, same modifiers. Out-of-stock items show greyed-out (v5.5.144) with a clear OUT OF STOCK badge instead of vanishing mid-tap.
Order at the counter
Tap to start · 28 covers tonight
- Dine in / takeawayCustomer picks at start of session.
- Modifier modalsSame logic as POS. Allergen filtering supported.
- Card paymentStripe Terminal reader auto-activates at pay step.
- Order numberShown on screen + printed receipt.
- 86 awarenessOut-of-stock greyed; OUT OF STOCK badge doesn't overlap the name (v5.5.144).
- Idle resetAuto returns to start screen on inactivity.
Loyalty & gift cards.
Points-based loyalty. Digital and physical gift cards issued and redeemed at the till. Tied to the same customer record as everything else — earn on POS, online and QR; redeem at any surface.
- Points per visitConfigurable rate per pound spent.
- RedemptionAt checkout, against the current check.
- Tier rulesAuto-tier customers on cumulative spend.
- Digital gift cardsIssued via email; QR redemption.
- Physical gift cardsPre-printed barcodes activated at the till.
- Expiry rulesPer-region compliance (UK / US).