Staff Scheduling
How staff schedules are managed in Danvas
Overview
Schedules in Danvas are read-only. 7shifts is the source of truth for who is working, where, and when. Danvas mirrors published 7shifts shifts into a local read model so staff can see their week and the team can plan around coverage. For the technical ownership boundary between schedule sync and Daily Line-Up publication, see ADR-0071.
The legacy drag-and-drop Schedule Builder has been removed for MVP. The /admin/schedule-builder URL still resolves to a redirect to /schedule so any saved links keep working.
Where schedules come from
7shifts publishes shifts in 7 daypart buckets: Lunch, Dinner, Late Night, Double, AM, PM, and Full. When a shift lands in Danvas it is mapped to one of four internal shiftType values: Lunch, Dinner, Late Night, or Double. Anything with hours_worked > 7 and a start hour before 15:00 is upgraded to Double. The original AM/PM/Full labels are kept for display in Slack summaries.
A Vercel cron runs every six hours (0 */6 * * *). Each run pulls today and the next 13 days from 7shifts for every location and upserts the rows by their external shift_id. Whenever at least one shift exists, the parent management_schedules row auto-flips to published — there is no manual publish step.
You can't edit shifts in Danvas. To change a shift, edit it in 7shifts — your change will appear in Danvas on the next cron run, up to ~6 hours later.
Locations can be excluded from the cron sync by adding their slug to SCHEDULE_SYNC_EXCLUDED_SLUGS (no default; only configured slugs are excluded).
Viewing Your Schedule
Open Schedule (/schedule) in the sidebar. The viewer shows the current week by default.
- My Shifts — Just your assignments for the week, with the start/end time and location.
- Team Schedule — The full roster for the location you have active, with role labels and color-coded shift blocks. Day cells are stacked vertically per employee, and a banner reminds you that the data is read-only.
- Week navigation — Tap the previous/next week arrows in the header. The week starts on Saturday and ends on Friday (matching 7shifts). The URL is shareable;
?week=YYYY-MM-DDjumps to a specific week. - No schedule available yet — If you see this empty state, 7shifts hasn't published shifts for the current week yet. Go to 7shifts and confirm the schedule is published.
The active location is shown in the page title (Schedule — Downtown); switch locations with the location selector at the top of the sidebar to see a different site's roster.
Schedule changes
Danvas does not currently support shift-swap requests or direct schedule editing. Make schedule changes in 7shifts and wait for the next synchronization; do not promise a pending Danvas request, Slack approval, or manager override workflow.
Shift Tasks
Shift tasks are associated with the service-day plan, not created by schedule synchronization. When managers publish the relevant Daily Line-Up dayparts, matching task definitions are materialized into task instances and assigned to the published lineup roster. The task lands in the staff Workspace and may block the end-of-shift report when configured. See Daily Line-Up, Workspace & Tasks, and the canonical Lineup Cards contract.
Shifts Per Day
| Day | Notes |
|---|---|
| Mon–Thu | Lunch, Dinner — typical two-shift day |
| Fri | Lunch, Dinner, sometimes Late Night |
| Sat | Lunch, Dinner, Late Night — busiest day |
| Sun | Brunch/Lunch only at most locations |
The 7shifts daypart is the source of truth — Danvas reflects whatever is published there.