Rota Tool

Fast inputs, optimized rota, plain-text output (day by day).
Constraints: max 5 consecutive days • min 11h rest • max 1 shift/day • targets • fairness
Week
£/h defaults Legend: AUTO 🔒 locked 📌 pinned
Optional per-day forecast overrides live in the Daily requirements section.
Next steps
Solver explained (plain English)
The solver turns your plan into a list of shift instances, then assigns staff to cover every instance. Strict mode (rules cannot be broken): - Every required shift/slot must be filled by exactly 1 person - Eligibility + availability + allowlists must permit the assignment - Max 1 shift/day, 11h rest, max 5 consecutive days - Contracted staff must land in range (hours ± tolerance) Soft goals (it optimizes these after it finds a feasible plan): - Hit target hours as closely as possible - Keep the rota fair (avoid one person being massively under/over) Templates vs Slots: - Daily requirements = fixed shift-types you always need - Slots (MID/CLOSE rows) = flexible staffing blocks (often what scaling changes)
Staff
Weekly availability is a pattern (e.g. never Sundays). You can add per-date overrides below.
NameCan doTarget hrs£/h MonTueWedThuFriSatSun Eligibility
Date overrides
Unavailable all day (random days off/absence on top of weekly pattern).
StaffDateUnavailable
Shift templates
Drag templates to reorder. Use per-day time overrides to avoid weekday/weekend template explosion.
KeyLabelRoleGroupDefault startDefault endOverrides
Daily requirements
Business:
Counts per template + flexible Mid/Close slots (set start/end per slot). Output is time-sorted within the day.
Baseline is used for proportional scaling of mid slots per day.
Baseline summary
Scaling
A guided flow: Forecast → Baseline → Shifts added → Controls. Preview never changes your plan. Nothing changes until you click Apply.
1) Forecast
Tip: per-day overrides in the grid below affect scaling factors.
2) Baseline
3) Shifts added (Preview)
Shows what would be added/removed vs the baseline if you apply.
4) Controls
Choose which shift types get rebuilt from the baseline.
Scale priority (adds/removes slots to hit scaled labour hours):
Help: Locked (🔒) and pinned (📌) slots are protected. Protected > AUTO — scaling will refuse to scale down below the number of protected slots. “Remove auto-added” will not remove locked/pinned rows.
Duplicate week
Copies your project into a new week_start. Useful for week-to-week reuse.
Eligibility
Use this to restrict which templates a person can be assigned to (and optionally which days). If you set Allowlist mode, anything unchecked becomes ineligible.
EnabledTemplateRoleStartEndDays
Slot eligibility
Controls who can be assigned to slot shifts (open/mid/close) per role, with per-day toggles.
EnabledRoleKindDays
Presets library
Presets save/load: baseline, shift templates, daily requirements, slots, and forecast profile. (Staff + date overrides are not touched.)
Template overrides
Leave a day blank to use the default start/end.
DayStartEnd
Locks
Lock a specific required shift instance (or slot row) to a staff member. Use Any-of for a short allowlist. Locks override eligibility/availability but still respect global constraints (rest / max-1/day / consecutive days / contracts).
#TypeStaffAny-of (comma separated)
Roles
Edit the role list for this project (name, default £/h, optional color). Renames/deletes will migrate existing staff/templates/slots.
RoleDefault £/hColor
Feasibility (pre-solve)
Shows, per day + role, required shifts vs eligible staff. Red = shortage (required > eligible). Amber = tight (required == eligible).
Week Day
Details (blockers/advisories)
Project: (unsaved)