What it is
Shift scheduling and month-end payroll for small businesses that run on shifts, built for a real client (a boutique fitness studio in Singapore) and running in their production. Coaches submit availability, the system builds the roster, the owner reviews and publishes it, and at month end the pay is computed from what was actually published.
Having a client rather than a hypothesis changed the product. Half the features I assumed were essential were never asked for, and the one thing that mattered most was something no generic scheduler does.
The opinions in the engine
The scheduling engine holds opinions a generic scheduler doesn’t, learned from watching a real studio run rather than from a fairness metric in a textbook. Those opinions are business rules, so they live where the owner can read them and argue with them, not buried in a scoring function.
Details I’d point at
Publishing produces the roster as an image or PDF, ready for the group chat, because that’s where a studio actually reads its roster.
Sign-in is WebAuthn passkeys with magic links as the fallback. Bank and PayNow identifiers are encrypted at rest with AES-256-GCM. Tenant isolation is strict and audit logging is on throughout. This is payroll, and payroll disputes are settled by records.
The notification layer covers email, WhatsApp, Telegram and push, and the entire product demos end to end with no external accounts configured.
Payroll follows the same discipline as the roster: pay rules are configuration the owner controls, not code someone has to redeploy, and a run drafts itself from the periods that were actually published, so the pay and the schedule can never drift apart.
Where it stands
Roughly 70,000 lines, about 1,300 automated tests plus Playwright end-to-end coverage, shipped to production in around two weeks of evenings. In live use.