Schedules and resources
Weekly hours, time off, and bookable chairs, rooms, and equipment.
Staff schedules
/dashboard/platform/schedules needs canManageSchedules (all stylists) or canManageOwnSchedule (own only).
A StylistSchedule has a type: recurring (weekly, with dayOfWeek), one_time, or time_off (both with localDate). It has startTime, endTime, optional breakStart and breakEnd, isAvailable, reason, and a revision.
Set weekly hours
Use the weekly editor. upsertStylistSchedule with type: "recurring", a day, start, end, and an optional break. The break must fall inside working hours.
Add time off
Enter a date, times, and reason. It saves as type: "time_off" with isAvailable: false. The "Block day" menu is a shortcut.
Withdraw
setStylistScheduleAvailability turns a row on or off. It needs the expectedRevision; a stale one fails with "Schedule was changed by another operator".
Resources
/dashboard/platform/resources needs canManageResources or canManageAppointments.
A SalonResource has name, type (station, room, shampoo_bowl, equipment, color_bar, other), capacity, location, notes, and isActive. Services list the resources they need, and availability counts each booking against capacity.
Create and edit with saveSalonRecord (kind: "resource"). Turn one off with setSalonResourceAvailability; it fails while the resource has active appointments or segment assignments. Capacity and location cannot change while it has active reservations.