It's Sunday night. Next week's roster isn't done.
Every service business knows both halves of this pain: the evening lost to juggling two outlets, students who can only do Tuesday nights, a relief worker you'd rather not over-use — and then, after the puzzle is finally solved, the 7am "boss, I'm sick" text that unsolves it. This demo is a full scheduling product built around those two moments. Describe who's free and how many people you need; one click plans the week — priced in wages, every unfilled slot explained in plain language — and when the sick-text arrives, it covers itself — no reply from you.
Honest-AI note. This runs entirely in your browser — no server, nothing to install, your edits stay on your device. The scheduler is a real constraint optimiser (30-minute slots; availability windows, outlet matching, shift length, split-shift gaps, weekly caps, overnight rest; backups only enter when regulars can't cover). The assistant that reads a free-form sick-text — "family thing came up Wednesday, can't make it" — runs on a live LLM in the full product (verified on OpenRouter); this in-browser demo uses a lightweight stand-in of the same logic so no API key ever ships to your device. In production the channel is a WhatsApp bridge: staff text the roster number and it lands in the manager's inbox, already sorted.
01Generate the week
The café is pre-loaded — messy on purpose. One click returns 45 shifts, priced in wages per outlet, with hour meters per person and the slots it couldn't fill listed with reasons: "not available", "over weekly cap", "different location".
02Handle the 7am text
A student texts in sick — informally, in chat, the way staff actually do. The assistant matches it to her real shift and queues cover options with every blocker named. It reassigns the shift and messages both people itself — you never reply. You stay the boss: flip auto-cover off to approve each one, and every rule can be overridden.
03Break it yourself
Edit availability windows, add a staffing need with day toggles, flip to the timeline view, print the week, or copy it as WhatsApp-ready text. Reset any time — it's your sandbox, stored only in your browser.
The 7am sick-text, handled while you sleep
The optimiser only ever offers a legal replacement — right role, free, under their cap, at the right outlet. If no one can cover, then it asks you. Prefer to approve every cover yourself? One toggle turns auto-cover off.
ARules as physics, not policy
Minimum rest, weekly caps, split-shift gaps and outlet matching are enforced inside the optimiser, not written in a handbook. The roster that comes out is legal by construction — and when the boss overrides, it's explicit and logged in the schedule itself.
BGaps that explain themselves
Excel shows an empty cell; this shows "Mon–Thu 19:00–21:00: 1 more Kitchen — 1× not available" with a Fix button listing who could cover and exactly which rule blocks each person. Explainability is what makes owners trust a generated schedule.
CMeet staff where they already are
Nobody files a formal absence request at 7am — they text. In the full product the whole loop rides on WhatsApp: staff text the roster number, publishing pings each person their shifts, approvals message people back. The formal workflow hides behind the informal message, not in front of it.