A schedule week is one week of shifts for one employee at one location. The schedule grid you build in /dashboard/schedule is a view of many of these stitched together — one row per employee, seven cells per day.
A shift is a single work period within a day: start time, end time, optional break.
Week boundaries
Each location has a week start preference — Sunday or Monday. The grid renders that day as the leftmost column, and each schedule week spans seven days from that anchor. Two locations in the same org can have different week starts; switch the location picker and the grid reflows.
Dates are date-only
The shift's day is stored as a calendar date (YYYY-MM-DD), not a UTC timestamp. The shift's time is stored as a local time string (HH:MM). They're combined per-employee using the location's timezone when needed (for SMS reminders, calendar feeds, and analytics).
This matters in two practical ways:
- Daylight Saving Time doesn't move shifts. A 9 AM shift on March 13 stays at 9 AM on March 14, even though the absolute UTC offset changed.
- A shift "tomorrow" is local-tomorrow at the location. If your business is in Eastern but you're traveling to LA, the schedule still shows tomorrow's shift on tomorrow's row, not the day after.
Editing shifts
Click an empty cell to add a shift; click an existing shift to edit it. The shift editor opens with start time, end time, and an optional break. Save and the change persists immediately.
For week-to-week duplication, use Smart Copy — one click copies the whole previous week into the current one, with approved time-off automatically excluded.
Hours & breaks
Each shift has a break_mins field — minutes deducted from paid hours per the location's break policy. The hours total in the right column of the grid is paid hours, after the policy is applied.
If your location has a 30-minute unpaid break policy and you schedule a 9 AM – 5 PM shift, the grid shows 7.5 hours, not 8. See Break policies for the configuration options.
Time-off interactions
When you add a shift on a date that's covered by an approved time-off period for that employee, the cell shows a yellow warning. You can still save (managers sometimes do this intentionally — "I forgot Sarah was off, but she's coming in anyway"), but Smart Copy and the AI scheduler skip those days automatically.
Where this lives in the database
For developers / advanced users:
schedule_weeks— one row per(employee_id, start_date)combo. Hassms_alert_onper week and thealert_time(e.g.30 min).schedule_days— seven rows perschedule_week. Hasavailable(whether the employee is working that day),start_time,end_time,break_mins.
Edits go through the schedule API which evaluates rules before saving — see Schedule rules.