Who's on right now
Recent catalogue activity
Everyone currently connected. Kicking closes their session immediately; banning also blocks their IP from the whole site.
Past days
Wait times and busiest hours, from customers added to the list - it may sit unused during quiet stretches. An unchecked entry that's deleted counts as unserved, but still counts toward wait times.
Busiest times (today)
By day (today)
Every change to the pricing catalogue is snapshotted before it lands, and kept for 30 days. A run of edits by one person inside five minutes folds into a single entry, so a tidy-up session reads as one change rather than twenty - and restoring it puts the catalogue back to before that session started. Restoring is itself snapshotted, so it can always be undone again.
A snapshot of the whole catalogue taken at midnight each night, kept for 30 days. A day where nothing changed writes nothing - so every entry here is a day that actually differed from the one before it.
Export
JSON is the exact catalogue and imports back unchanged. CSV is for reading in a spreadsheet - it flattens each device into one row per storage option per promo, so it round-trips the numbers but not the internal ids.
Import
Imports replace the whole catalogue rather than merging into it. You'll see exactly what the file contains, and what it would replace, before anything is written.
Publishes what's happening on the floor to an MQTT broker, so it can drive things outside this app - a light that changes colour as the queue grows, an alert when someone's been waiting too long, a dashboard out the back. Publish only: anything that can reach your broker can read these numbers, but nothing can change the board.
Broker
Leave the password blank to keep the one already saved.
Home Assistant
With discovery on, every sensor below appears in Home Assistant automatically, grouped under one "Shopfloor" device - no YAML to write. Switching a group off removes its entities rather than leaving them behind as unavailable.
What gets published
Live payload
Exactly what would go out on the state topic right now.
–
Rebuild helper
Restart happens inside the app itself. Rebuild needs docker-reload-helper.js running on sodastream (see docker-reload-helper.md) - fill in its URL and token below.
Block an IP address from the entire site (board, login, everything — except this admin panel, which stays reachable so you can undo a ban).
Grant a name manager access - a read-only, cut-down view of Customer Stats and today's User Stats Timeline, reachable straight from a Stats button that appears in their own header once granted. No separate password; matched purely by the name they sign in with, case-insensitively. You can also override anyone's stored presence-pill colour here, same as the colour picker they'd use on themselves - not just a manager's.