Core Operations
Scheduling & Calendar
The appointment calendar, walk-in queue, resource allocation, and conflict prevention.
Overview
The scheduling engine is the operational core of SalonOS. It gives a location a real-time, conflict-free view of who is doing what, where, and with which resource — for any day or week. The front desk lives in this surface all day: booking, moving, cancelling, and managing walk-ins.
The calendar simultaneously enforces staff availability, physical resource allocation (rooms, chairs, equipment), and shift rules. It prevents double-booking at both the staff and resource level and stays in sync across all connected devices in real time.
Calendar Views
Day View
The primary workspace. A scrollable time grid with one column per staff member (or per resource — switchable). Time slots are coloured by appointment state. Non-bookable time (shift gaps, breaks, time-off, closures) shows as a distinct region that cannot receive drops.
Column modes:
- Per-staff: one column per bookable stylist/technician — default for booking
- Per-resource: one column per room, chair, or equipment unit — useful for resource-constrained locations
Week View
A seven-day overview showing capacity at a glance. Useful for planning and spotting gaps. Click any day to drill into the day view.
Appointment States
| State | Meaning |
|---|---|
| Held/Pending | Reserved but not yet confirmed (e.g. during online booking) |
| Confirmed | Booked and confirmed |
| Checked In | Client has arrived at the location |
| In Service | Service actively in progress |
| Completed | Service finished; ready for checkout |
| No-show | Client did not arrive |
| Cancelled | Appointment cancelled (with reason captured) |
Creating an Appointment
From any empty cell on the calendar:
- Select the client (search existing or quick-create with name + phone)
- Add one or more services; each gets a staff assignment and a resource assignment
- System checks availability and computes the visit timeline (including service buffers)
- If a deposit is required by the brand's policy, it is captured or noted
- Confirm — the appointment appears on the calendar and triggers a confirmation message
Multi-Service Visits
One booking can contain multiple services:
- Sequential: services run back-to-back (same or different staff)
- Parallel: services run simultaneously (e.g. manicure during hair colour processing time) — enabled per brand
Each service leg has its own staff assignment, resource, and duration. The system keeps the visit as one logical booking for the client and for checkout, while allocating each leg independently.
Drag-to-Reschedule
Appointments can be dragged to a new time slot or to a different staff column. While dragging, the calendar previews valid (green) and invalid (blocked) drop targets. On drop, the system re-runs all availability checks and either commits or reverts with an explanation.
Walk-In Queue
A live queue board for handling walk-ins without a pre-booked appointment:
- Front desk adds the walk-in: name/phone, requested service, optional preferred stylist
- Walk-in enters the queue in arrival order with an estimated wait time
- When a stylist frees up, the desk assigns the walk-in from the queue
- Assignment converts the queue entry into an in-service appointment on the calendar
Queue and calendar stay in sync in real time: assigning from the queue updates the calendar; completing an appointment frees capacity the queue reflects immediately.
Resource Allocation
Physical resources (rooms, chairs, stations, equipment) are managed as first-class entities:
- Each service can require a specific resource type, a specific named resource, or no resource
- The system prevents two overlapping services from sharing the same resource
- Resources have their own availability windows and maintenance blocks
- When a service needs both a qualified staff member AND a resource, both must be free
Conflict and Double-Booking Prevention
The calendar blocks any action that would:
- Put the same staff member in two overlapping services
- Assign the same resource to two overlapping services
- Book a service outside a staff member's shift or into their time-off (unless an explicit override is permitted and logged)
When a conflict is detected, the system explains the exact clash and where possible offers the nearest valid alternatives.
Realtime Sync
All appointment, queue, and allocation changes propagate to every connected viewer of that location in near real time via Supabase Realtime. Two front-desk staff can run the calendar simultaneously without colliding. Concurrent edits converge to one consistent state — a user editing a record that changes under them is notified before their edit can commit.
Non-Bookable Blocks
Managers can create blocks on the calendar for:
- Cleaning and sanitisation time between appointments
- Staff breaks
- Training sessions
- Equipment maintenance
- Ad-hoc closures
Blocks consume staff and/or resource availability and are respected by all conflict checks.
Business Rules
| Rule | Behaviour |
|---|---|
| Staff double-booking | Blocked by default; configurable override is audited |
| Resource double-booking | Always blocked; no override |
| Out-of-shift booking | Blocked by default; configurable override is audited and visually flagged |
| Staff lacks service skill | Staff not offered for that service; forced assignment requires override |
| Multi-service chain with one leg missing capacity | Entire visit cannot be confirmed until all legs have staff and resource |
| Concurrent edit collision | Last valid commit wins; losing editor is notified and shown current state |
| Booking same client in two overlapping visits | Warning shown; requires confirmation |
| Service duration changed in catalog after booking | Existing appointments keep booked duration; new bookings use updated default |
| Resource taken out of service mid-day | Future appointments on that resource flagged for reallocation |
| Time zone | All times in the location's configured time zone |
Configuration Options
| Setting | Scope | Default |
|---|---|---|
| Slot granularity (5/10/15 min) | Location | 15 min |
| Operating hours and holidays | Location | Required at setup |
| Service buffer/cleanup time | Brand/service | Per service |
| Allow staff double-booking override | Brand/Location | Off |
| Allow out-of-shift override | Brand/Location | Off |
| Parallel services | Brand | Off |
| Stylist self-service edit rights | Brand | Off |
| No-show policy | Brand | None |
Key Data Entities
- Appointment — the visit record (client, location, status, notes, deposit state)
- AppointmentService — each service leg (staff, resource, duration, service reference)
- QueueEntry — walk-in record and lifecycle
- CalendarBlock — non-bookable time block
- Shift — staff working hours for a day
- Resource — physical room, chair, station, or equipment unit