Employee Shift Scheduling App Starter · Industry version
Station-based rosters for front and back of house, swaps that respect roles, and labor percentage against forecast — in code you own.
A restaurant schedule is really two schedules wearing one apron: front of house staffed to covers and back of house staffed to the menu, both squeezed against a labor percentage the margin lives or dies on. This starter generates scheduling that speaks that language — stations, service periods, and a labor number that reacts while the week is still editable.
01 · The problem
Generic tools schedule people to hours; restaurants schedule roles to service periods. Friday dinner needs a sauté cook, two servers on the floor sections, a bartender, and an expo — and a scheduler that can't tell a line cook from a host will happily produce a fully-staffed shift that can't run a single ticket. The station, not the timeslot, is the unit of coverage.
The economics are tighter than any other hourly business. Labor percentage is watched in single digits of margin, sales swing by day and daypart, and the difference between a profitable week and a bad one is often one over-scheduled Tuesday. A scheduler with no connection to forecast covers is a calendar, and calendars don't protect margins.
And the workforce is the industry's most fluid: split shifts, doubles, students with class schedules, staff who close at midnight and legally or humanly shouldn't open at six. Swaps happen nightly, in the walk-in, verbally. If the system can't absorb that churn with rules and records, the printed schedule is fiction by Wednesday.
02 · Data model
Everything in the base Employee Shift Scheduling starter —
employeeslocationsshiftsshift_swapstime_entriesavailability— plus the entities this industry actually runs on:
| table | what it holds |
|---|---|
stations | The positions that actually run service — sauté, expo, section two, bar — each tied to FOH or BOH and the roles that can hold it. |
service_periods | Dayparts like lunch and dinner with expected covers per day, the demand signal the schedule is built against. |
sales_forecasts | Projected sales by day and period, the denominator that turns scheduled wages into a live labor percentage. |
03 · Screens
Build each service period by station: who's on sauté, who has section three, who's behind the bar. The grid warns when a station is empty or held by someone untrained on it, and doubles and split shifts render honestly instead of as overlapping errors.
A server can pick up a server shift; nobody untrained picks up expo on a Friday. Swap checks run station eligibility, clopening rest gaps, and weekly-hour caps before the manager gets the request — so approvals take seconds and mistakes don't reach service.
Scheduled wages divide into forecast sales by day and daypart as you build. Tuesday dinner running at 38 percent shows up while it's a draft — and after service, actual hours against actual sales close the loop for the weekly manager meeting.
04 · In practice
Import or enter expected covers per service period; the builder shows labor percentage per daypart as stations fill. The manager trims a mid-shift on the slow Tuesday, adds a fourth server for Friday's booked-out dinner, and publishes — with the margin math already done.
A bartender posts Saturday; two eligible colleagues claim it; the first one clears the rest-gap check and it routes to the manager as a one-tap approval. The schedule updates everywhere at once — nothing taped to the office door, nothing agreed in the walk-in and forgotten.
Clock-outs feed actual hours against schedule: who cut early on the dead Monday, who ran long breaking down the bar. Weekly, actual labor percentage lines up against forecast by daypart, and the pattern — always over on Sundays — becomes a staffing decision instead of a shrug.
Yes — stations are first-class: sauté, expo, sections, bar. Each shift slots a person into a station, eligibility is tracked per employee, and coverage warnings fire on empty or mis-staffed stations. It matches how a chef and a floor manager actually think about a service.
Sales forecasts per day and service period sit alongside scheduled wages, so the builder shows labor percentage as you assign — and flags dayparts over your target. After service, actual clocked hours against actual sales give the true number for the weekly review.
Minimum-rest rules run at both assignment and swap time, so a midnight close followed by a 6 a.m. open gets flagged or blocked per your policy. Because the rule is code you own, it can match your local ordinance exactly — including any required premium if the employee consents.
Yes — an employee can hold lunch and dinner shifts on the same day, rendered as a split or a double, with total daily hours tracked against overtime thresholds. The builder treats it as normal restaurant life rather than a scheduling-conflict error.
Dual7 App Starters
Station-based rosters for front and back of house, swaps that respect roles, and labor percentage against forecast — in code you own. Describe your version to start — the output is a project you own.