Barbell & Brew POS
One installable app that runs the whole coffee bar — till to back office.
- Role
- Product Design & Full-Stack Engineering
- Year
- 2026
- Stack
- 8 technologies
Thandi Nkosi
Barista • Morning Shift
Deadlift Double Shot
Post-Workout Latte
Signature Cold Brew
Recovery Acai Bowl
Nitro Whey (2kg)
Iron Shaker (750ml)
Barbell & Brew POS runs a gym-adjacent coffee bar end to end. Baristas work a touch-first register with category filters, staff pricing, customer tabs, store credit, and loyalty perks; managers get the full back office — products, stock, dashboards, reports, timesheets, and daily checklists — inside the same installable PWA.
It's built deliberately for South Africa: en-ZA pricing in rand, VAT at a configurable 15%, and — because the shop's Capitec card machine has no public integration API — a manual-confirm card flow that only records the sale once the physical terminal approves. A React 19 front end talks to an Express + Prisma + PostgreSQL API through a typed service layer, with JWT auth and role-based access enforced server-side.
Built with
- React 19
- TypeScript
- Tailwind v4
- PWA · Web Push
- TanStack Query
- Express
- Prisma · PostgreSQL
- JWT · RBAC
18 screens
Till, tabs, stock, staff & reporting in one PWA
3 roles
Barista, admin & super-admin — enforced by the API
15% VAT
ZAR-native: en-ZA pricing, SA VAT, Capitec card flow
1 deploy
Express serves the API and the built PWA together
What it does
Touch-first register
Category chips, live search, staff pricing, store credit, tips, and loyalty perks — a sale closes in a handful of taps.
Open tabs
Regulars run a tab: link a customer, add rounds through the day, and settle it later with the same card-confirm flow.
Card payments without an API
The shop's Capitec machine has no integration API, so checkout opens a confirm step — the sale is only recorded once the terminal approves.
Stock control
Stock takes with manager review, waste logging, movement history, and low-stock alerts pushed straight onto the dashboard.
Staff operations
Time clock and timesheets, daily task checklists, per-staff sales targets, and web-push shift reminders.
Dashboard & reports
Revenue, gross profit, and sales velocity with period-over-period comparison — plus CSV and Excel export.
Admin Control, live
Revenue, gross profit, and transaction volume with period-over-period comparison, a 7-day sales-velocity chart, and low-stock alerts surfaced the moment a product dips below its threshold.
Dashboard / Insights
Admin Control
Sales (Today)
+12% vs yesterday
Gross Profit (Today)
+9% vs yesterday
Transactions
+8% vs yesterday
Sales Velocity
Last 7 days
Double Roasted Beans (1kg Bag)
4.2 / 20 threshold
Creatine Monohydrate (300g)
12 / 50 threshold
Regulars run a tab
Open a tab against a customer, add rounds through the day, and settle it whenever they're done. Tabs age visibly — high-value and stale tabs get flagged so nothing walks out unpaid.
Jordan Miller
Updated 8 mins ago
1h 5m
Opened 09:12
Bongani Khumalo
Updated 25 mins ago
2h 40m
Opened 07:37
Sarah Chen
Updated 1h 45m ago
3h 10m
Opened 07:07
Open tabs
3
Total open value
R 462,00
Avg open time
2h 18m
Stock that watches itself
Every tracked SKU carries cost, margin, and a live level bar against its low-stock threshold — backed by stock takes with manager review, waste logging, and a full movement history.
Back Office
Stock Management
Total SKU
14
Inv. Value (Cost)
R 18 432
Low Stock
2
Avg Margin
58%
Deadlift Double Shot
COFFEE
164
Double Roasted Beans (1kg)
COFFEE
4.2
Creatine Monohydrate (300g)
FUEL
12
Iron Shaker (750ml)
MERCH
22
Clock in from the counter, not the couch
Staff clock in and out on their own phones, gated by the shop's geofence or Wi-Fi network. A live shift timer, edited-entry audit trail, and timesheets roll hours up for payroll.
Front Office
Time Clock
Your location is checked when you clock in or out — allow location access when your phone asks.
4h 32m
Clocked in at 07:58
Clock OutRecent shifts
Fri, 3 Jul
07:55 – 15:32
Thu, 2 Jul
08:02 – 16:11
Wed, 1 Jul
07:48 – 15:45
Reports the accountant can open
Any date range rolls up revenue, gross profit, tips, and per-employee performance — then exports to PDF or Excel. Every transaction keeps its BB-numbered audit trail from the till.
Back Office
Sales Reports
Revenue
R 84 310
Gross Profit
R 38 970
Tips
R 2 145
Avg Order
R 70,02
Revenue by Category
Opening and closing, on rails
Managers build recurring checklists with due times; staff tick them off on the floor. Every completion is stamped with who did it and when, and web-push reminders chase whatever's still open.
Front Office
Daily Checklist
Tick each task as you complete it today.
Opening Checklist
by 08:00
Unlock & disarm alarm
Thandi Nkosi · 07:31
Start espresso machine warm-up
Thandi Nkosi · 07:34
Count opening float
Thandi Nkosi · 07:42
Stock grab-and-go fridge
Thandi Nkosi · 07:55
Wipe down counters & tables
Put out pavement sign
Targets baristas can chase
Every staff member sees their own sales, orders, and tips for the day, tracked against a personal daily or monthly target — with a category split showing where their sales actually come from.
My Performance
My Sales
Thandi Nkosi · Morning shift
My Sales Today
R 3 245,80
My Orders Today
41
My Tips Today
R 186,50
R 16 800,00 of R 20 000,00 target · R 3 200,00 to go
My Sales by Category
This Month · R 16 800,00 in sales · 360 orders
Card payments without an API
The shop's Capitec card machine has no public integration API — so the register opens a manual confirm step: run the amount on the physical terminal, then record the outcome. The sale only lands once the terminal approves.
Thandi Nkosi
Barista • Morning Shift
Deadlift Double Shot
Post-Workout Latte
Signature Cold Brew
Recovery Acai Bowl
Nitro Whey (2kg)
Iron Shaker (750ml)
R 170,20
Run this amount on the Capitec card machine now. Once the terminal approves (or declines) the transaction, confirm the outcome below.
Okera designs and builds full-stack products like this one — from first sketch to deployed system.