SHIFT ROSTER BUILDER · RUNS IN YOUR BROWSER · NOTHING UPLOADED

Build this week's schedule without the spreadsheet puzzle

List the shifts you need covered and your people with their availability, weekly hour limits and wages. The tool assigns people to shifts so that every shift is covered if it can be, nobody works outside their availability, gets less rest than you allow, or goes into overtime when someone cheaper is free. Shifts it cannot fill come back with the reason, and it shows who the week depends on. Download the roster as a CSV.

Build a schedule Try an example

Your staff list never leaves this browser tab. Planning aid, not legal, tax, or financial advice. It does not know your local scheduling-notice, break or minor-labor laws. See how to make an employee schedule for the method, and do I need to hire another employee? for testing a hire before you post the job. Checking payroll against sales? See labor cost percentage by day. Worried about close-then-open shifts? See what a rest gap costs, or how to reduce overtime in a schedule. Scheduling a 14 or 15 year old? See what the youth hour limits do to a roster, a free alternative to paid scheduling apps for the rota. Need a blank grid to print? See the free weekly employee schedule template. Closes and weekends landing on the same people? See how to rotate them fairly. Someone just called out? See patch it or rebuild the week. Weekend requests piling up? See how many you can grant, changing a posted schedule, what a late change costs inside a 14-day notice window. Running a salon? See covering chairs with a small team. Running a childcare centre? See covering opening, core hours and pickup. Running a coffee shop? See covering the rush, midday and weekend. Capping long days or runs of days? See what daily hour and days-in-a-row limits cost. Shifts staying open? See whose availability is worth asking to widen.

Your people

Availability is days and hours separated by semicolons: Mon-Fri 9-17; Sat 10am-2pm; Sun off. Days you do not list count as unavailable; leave it blank or write any for always free. Max hours default to 40.

Shifts to cover

Days can be a range (Mon-Fri) or a list (Mon/Wed/Fri). Times can be 9, 9:30 or 9am. An end at or before the start runs overnight into the next day. People needed makes that many separate shifts. To lock a shift to someone, add fixed: Ana as a last cell (use fixed: Ana + Ben to pin two copies); the tool plans everyone else around it.

Each week starts from the one before: rest gaps and who closed lately carry over, and dated off: days land in their own week. Uses the settings above and the Monday in "Week starting".
The link holds the whole setup, wages included, in the part after # that no server receives. Send it only to people who may see pay.

Sets each person's prev: (when their last shift ended) so rest rules hold across Monday.

Your people, shifts and settings are remembered on this device only (browser local storage), so next week you can open the page and click the button.

Enter your people and shifts, then click the button.

Collect your team's availability

Stop chasing availability in group chats. Make a link, send it to your team, and each person fills a week grid and sends you one line back. Paste the lines below and they replace each person's availability in your staff list; wages, roles and the hours cap you set stay (a person can only lower their own max hours). The link carries only the business name, week and, if you add it, one person's name; nothing is stored or uploaded.

How it is calculated

Hard rules (never broken): a person is only given a shift that falls inside one of their availability windows for the whole shift; shifts for one person never overlap and leave at least your rest gap between them; weekly hours stay at or under their maximum; days in a row stay at or under your limit. Objective: first cover as many shift-hours as possible, then minimise real payroll (wage × (1 + extras), overtime hours above your threshold at the multiplier), plus a small penalty for each hour a person is under their minimum and a quadratic penalty for hours drifting from a fair share (the balance slider). Search: a greedy build that fills the most constrained shifts first, then seeded simulated annealing with reassign and swap moves over several restarts; a fixed seed makes it repeatable. On small problems the tests compare it with an exhaustive search of every roster and it finds the same optimum; on large ones it is a strong heuristic, not a proof.

Not modelled: predictive-scheduling and fair-workweek rules as built-in law (the page flags a short-notice week and a changes report prices a premium you enter), breaks as a hard rule (unpaid meal breaks are deducted, and suggested meal and paid rest break times are shown from the numbers you enter), minor-labor limits beyond a per-person daily: cap, union rules, seniority, time off requests across weeks (a running tough: 3 cell, filled in by “carry over last week”, remembers who closed or worked weekends lately so the next week spreads them fairly when the spread setting is above 0; one week's time off works: add off: Wed; Fri 5pm-close to a person; a soft wish works too: prefer: Sat gives that person those hours when it costs nothing; avoid: Sat; Fri 5pm-close keeps those hours free unless the roster would otherwise leave a shift open or cost more). The rest rule does carry over from last week if you add prev: Sun 10pm to a person (when their last shift ended). Roles work: role: keyholder x1 on a shift needing 3 people asks for one keyholder among them. Unverified: checked against exhaustive search and invented data in unit tests, not against a real operator's payroll or a scheduling law.

Common questions

How do I make an employee schedule that covers every shift?

List each shift you need covered with how many people it takes, list each person with their availability, weekly hour limits and wage, and assign people to shifts one hard rule at a time: available for the whole shift, not double-booked, enough rest since their last shift, under their weekly limit. This tool does that search for you and shows any shift it could not fill with the reason.

How does the roster builder decide who works which shift?

It never breaks a hard rule (availability, weekly hour cap, rest between shifts, consecutive days, no double-booking). Among the rosters that follow those rules it covers as many shifts as possible first, then picks the lowest payroll, counting overtime above your threshold, nudged by the hour balance slider and by each person's minimum hours. The search is a seeded simulated-annealing optimiser, so the same inputs always give the same roster.

Is the roster guaranteed to be the cheapest possible?

No. Choosing who works which shift is a hard combinatorial problem, so the tool searches rather than proves optimality. On small problems the test suite checks the result against an exhaustive search of every possible roster and it matches. On a full week it finds a strong roster quickly, and the result is deterministic so you can compare changes fairly.

What does the hour balance slider do?

At zero the tool chases the lowest payroll, which can pile hours on the cheapest people and leave others under their minimum. Raising it adds a penalty for each person's hours drifting from their fair share of the total, in proportion to their weekly limit. Payroll shown is always the real cost, not the penalised score.

What does who-is-critical mean?

For each person on the roster the tool re-builds the week without them and reports how many hours of shifts would then go uncovered. A person whose absence leaves hours uncovered is a single point of failure: one sick call and a shift is open. Use it to see where you need a backup or wider availability.

What rules and laws does it check?

It enforces the availability, weekly hour limit, rest gap and consecutive-day limit that you type in, and prices weekly overtime above the threshold you set, plus optional daily overtime and double time (California-style presets included). It does not know your local predictive-scheduling or fair-workweek notice rules, break and meal-period rules, minor-labor limits, union terms or tip rules, which vary by place. Check the roster against the rules that apply to you.

Is my staff list uploaded anywhere?

No. Names, wages and availability are read and solved in this browser tab. Nothing is sent to a server, there are no accounts or cookies, and the tool does not store your roster. It works offline once the page has loaded.