How it actually works

The reasoning behind the roster — the architecture, the honesty about what’s proven versus still learning, and where this started.

Scroll to watch it resolve

IThe problem

Your notes and your rules are two different things.

A note like “give Sam Friday off, we're quiet this week” is the sort of thing you write without thinking. Another manager would know what you meant. They might not agree on exactly what it ruled out.

Your rules are the opposite. Nobody works more than their contracted hours. Everyone gets their days off. Nobody works a role they aren't trained for. There is nothing to interpret, and there are usually hundreds of them pulling against each other in one week.

Almost every failure in this category of software comes from one mistake — treating the second kind of thing as though it were the first.

IIHow it works

So we use two different tools, and keep them apart.

Horarium uses a language model for the first job and a mathematical solver for the second, and never lets either do the other's work. The model reads intent and emits constraints. The solver takes those constraints and proves an assignment satisfies all of them, or that none can.

Below is a real week at a three-person venue, with the weekly-hours rule being checked against it in the margin as you read. Nothing about that check is illustrative — the totals are summed from these shifts.

The sample week the marginal checks are run against
SambarThu 8h Fri 9h Sat 9h
AdafloorFri 7h Sat 8h
Marcofloor · barThu 6h Sat 7h
IIIWhat that means

It can tell you when a week simply can’t be done.

The same category of technique as exam timetabling and crew scheduling — problems where a wrong answer costs real money and the search space is far too large to walk.

But the property that matters most is not speed. Sometimes there genuinely is no valid roster: not enough people, or someone's constraints simply cannot all be met that week. Asked to produce one anyway, a language model will produce something, because producing something plausible is what language models do — even when nothing correct exists.

The same week again with one shift moved: Ada, qualified for floor only, put behind the bar on Saturday. The margin runs the identical check, and this time it refuses — naming the assignment that caused it. Being able to say no, precisely, is the whole property.

A solver does not produce an answer that breaks a constraint you gave it. It mathematically cannot.

IVWhat it can’t do yet

And here is where it doesn’t work yet.

A guarantee is worth exactly what the rules behind it are worth. The setup wizard proposes a starting set for your industry, and where those come from published operating patterns rather than venues we have watched, the page says so rather than letting the guarantee borrow credibility it has not earned.

Choosing an industry at signup

HospitalityDraft — we're still learning this industry

Some things are not built, and the wizard does not pretend otherwise. A hotel front desk has no opening rush; a workshop rosters by job, not by shift. Where a pattern is missing, it is listed as missing.

Hotels

Shift-handoff overlap windows

Hotels

Occupancy-driven headcount

Schools

Subject / certification matching

Each needs a genuine new piece of modelling, not a parameter tweak — so rather than ship something that half-works, they have not shipped. A hospitality venue and a retail floor work end to end today, and most of a hotel does. That is the extent of the claim, and the extent of it is the point.

Where this started

One manager, one bar, one weekly problem.

It started at Raw Bar in Sydney, building a workable roster for a small team without losing an evening to it every week. Every rule this system enforces is here because a real week at a real venue needed it enforced — not because a specification listed it.

Try it on your own roster.