Modifier-driven menus, kitchen display, shift cash reconciliation, hourly heatmaps. Vanilla JS demo running entirely in your browser — no backend, all writes land in localStorage.
Touch-optimized product grid with categories, search, modifiers (size · milk · syrup · extras), cart with qty steppers, and cash / card / split payment flows. PIN lock between cashiers.
Counter-mounted screen polls for new orders, marks lines ready one by one, with elapsed-time amber / red warnings and audio chime on new tickets.
Dashboard, live orders, products (CRUD + bulk), categories, modifiers, discounts, tables floor plan, staff RBAC, shifts with Z-reports, reports, inventory, receipt template, settings, audit log.
5% VAT applied after discounts, payment splits, change calculation, shift cash variance, inventory deduction via product → ingredient recipes, CSV export of orders and audit log.
Three roles — cashier, supervisor, manager — with PIN auth. Supervisor overrides for discounts >20%. Manager-only shift close + Z-report.
No frameworks, no bundler, no backend. ~5,000 LOC of plain ES5+ behind a fetch interceptor that serves /pos/api/* from localStorage. Reset to seed any time from Settings.