Front Of House Planning

Rota Tool

Build the week fast, pressure-test coverage before you solve, and spot the days that need intervention.
Before You Generate
Use the feasibility panel to catch thin days before the solver hits a wall.
Tight amber cells mean the rota is technically possible, but one absence could break it.
Fix red shortages first: role coverage, allowlists, or availability.
Week Setup
Week start
Weeks
Forecast weekly sales
Pay rates
Legend AUTO — solver assigned 🔒 Locked to this person 📌 Pinned time, flex staff Per-day forecast overrides live in Daily Requirements below.
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.
Roles here are the person's assignment tags: if a shift is tagged Bar, only staff with the Bar role tag can be placed on it. Staff can hold multiple role tags.
View
NameCan doTarget hrs£/h Availability 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.
Role controls who is allowed to work the shift. Template Group is only a visual bucket for organising similar shifts in the editor and requirements grid.
KeyLabelRoleTemplate GroupDefault 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.
No baseline
Baseline summary
Auto-adjust staffing
Which shifts to adjust
Tick the shift types scaling is allowed to add or remove. Order sets the priority.
What will change
Nothing changes until you click Apply.
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). These are solver roles and staff assignment tags. Renames/deletes will migrate existing staff/templates/slots.
RoleDefault £/hColor
Edit Shift
Label
Role
Start
End
Add Shift
Label (optional)
Role
Start
End
Move Shift
Staff
Day
Feasibility (pre-solve)
Shows, per day + role, how many shifts you need, how many people are eligible, and whether you have spare cover, exact cover, or a shortage.
Shortage Cells
0
Tight Cells
0
Day Notes
0
Signal
Clean
Per-day notes Readable summary of the worst pressure points by week and day.
Week Day
Details (blockers/advisories)
Project: (unsaved)