Case study
Roster Pro
Rota planning with an automated solver for contract rules, skill matching and staffing-gap alerts.
The problem
Building a weekly staff rota by hand means juggling contracted hours, skills, availability and minimum staffing levels at once, and it's easy to publish a rota with gaps or broken rules.
What I built
- Constraint solver that builds rotas against contract rules and staffing requirements
- Skill matching and staffing-gap alerts
- Draft-first studio: build, review and adjust, then publish
- AI assistance to import staff lists, suggest requirements, edit the rota in plain language and explain the result
My role
Sole developer: I built the solver integration, the scheduling data model, the React studio and the AI features, on the same platform and database as CM-Plus.
Tech stack
- Python
- Django
- OR-Tools CP-SAT
- React
- TypeScript
- Claude API
Technical challenges & decisions
Modelling a rota as constraints
Rotas are generated by an OR-Tools CP-SAT model assembled from separate constraint and objective modules, with a pure-Python heuristic engine as a faster alternative for simpler cases.
Two products, one engine
The care platform's rota and the standalone Roster Pro share authentication, the database and the scheduling engine, but Roster Pro writes to its own draft tables and is fenced to its own studio, so neither product can change the other's data.
Matching the AI model to the task
AI features are tiered by task: a small, fast Claude model for bounded extraction such as parsing staff lists, and a larger one for conversational edits and explanations.