Bookings
Processing Gaps (Multitasking)
Last updated 19 May 2026
Processing Gaps (Multitasking)
Set processing time on services so the stylist can take another client while colour develops, perm sets, or mask works. Calendar shows the processing band; Smart Fill matches waitlist candidates to fill it. Internal multitasking only — customers don't see overlapping slots.
Where to find it — Setting: Services → edit → Scheduling & Pricing Rules → Processing time (min). On the calendar: dashed band below active service blocks; Fill {N}m pill on uncovered processing windows.
TL;DR
- Configured per service: how many minutes the stylist is free during the appointment.
- Calendar renders a dashed band for processing time; can be covered by another booking.
- Smart Fill pill matches the gap against your waitlist with one tap.
- Customer-facing storefront treats the full window as busy (no overlapping slots offered to customers).
- PRO.
What processing time is
A hair colour appointment is typically structured: active application (45 min) → colour developing (30 min) → active wash and finish (15 min). During the 30-minute develop phase, the stylist is free — they can take another client through the wash, do a cut for someone else, or start a new colour.
OpenChair models this as processingTime (in minutes) on a service. When a customer books that service, the calendar reserves:
activeMinutes— active stylist work (start of booking)processingMinutes— hands-off processing windowbufferMinutes— optional buffer at the end
activeMinutes + processingMinutes + bufferMinutes = the total time the chair/resource is occupied. The stylist is free during processing and buffer.
Configuring processing time
- Open Services → [edit a service].
- Scroll to Scheduling & Pricing Rules (collapsible).
- Set Processing time (min) — minutes the stylist is free during the appointment.
- Save.
Helper text on the field: "The stylist is free during processing time, for example while colour develops or a perm sets. You can book another client into this window."
Snapshotted on booking
When a customer books, activeMinutes, processingMinutes, and bufferMinutes are snapshotted on the booking row. Changing the service's processing time later doesn't affect existing bookings — historical records stay immutable.
This means:
- A 30-min processing time today becomes 45 min next month → today's bookings stay at 30 min; tomorrow's at 45 min.
- Reports and audit trails reflect the processing window that was active when each booking was created.
How it shows on the calendar
Each booking block renders three sections vertically:
- Active service area — full-colour block, customer's name visible
- Processing band —
bg-muted/40with a dashed top border; height proportional to processing minutes - Buffer (if any) — additional muted spacer
The processing band is visually distinct so you can see at a glance which slots are coverable.
When a second booking lands inside the processing window
If you book another client into the same staff's processing window, the calendar shows:
- The new booking renders inside the original booking's processing band area
- The original's processing label swaps for a hatched-fill marker with a Users icon and "With {firstName}" — indicating the processing is covered
- The original's aria-label appends "processing covered by {firstName}" for accessibility
Two bookings, one stylist, overlapping time — explicit visual confirmation that the multitasking is intentional.
The "Fill processing" pill
When a processing band is:
- In the future (not started yet)
- Not already covered by another booking
- ≥ minimum match minutes (typically 30 min)
The processing band's label swaps for a tappable Fill {N}m pill — or Fill {N}m · {count} matches when waitlist candidates exist for the gap.
Tap to open Smart Fill prefilled with:
staffId— the staff member whose processing window this isstartTime— the start of the processing windowendTime— the end of the processing windowdurationMinutes— the gap's duration
Smart Fill matches the gap against waitlist candidates (cadence, service fit, weekday, time band, provider affinity, lead time) and proposes the top match.
Match counts come from useProcessingGapMatchCounts which batches eligible waitlist matches across visible bookings. The pill's border strengthens when matches exist — visual cue that there's a candidate waiting.
Internal vs storefront behaviour
| Surface | Sees the stylist as |
|---|---|
| Operator calendar | Free during processing — can book overlapping |
| Internal slot picker (creating a booking) | Free during processing |
| Public storefront booking flow | Busy for the full active + processing window |
| AI booking enquiry auto-responder | Busy for the full window |
| Embedded booking widget | Busy for the full window |
Customers can't reason about "stylist free during processing" — they'd be confused by a 10:30 AM available slot if they thought you were busy until 11 AM. The internal/external split keeps customer-facing slot offers conservative while letting operators multitask intentionally.
How processing affects resources
If a service uses a resource (a colour station, a wash chair, a special room), the resource is occupied for active + processing + buffer — the full window. The stylist might be free; the resource isn't.
This means you can multitask the stylist but not the resource — book another client into the processing window only if they don't need the same room.
Tier
PRO. FREE venues can set processing time on services (the field is visible) but the multitasking calendar behaviour and the Fill pill require PRO.
Mobile parity
Mobile calendar renders the processing band and the Fill pill identically. Tap behaviour opens the same Smart Fill flow.
Related: Tighten This Day
"Tighten This Day" is a calendar-wide waitlist nudge that surfaces all fillable minutes across a day (gaps between bookings + processing gaps). See Smart Waitlist for the operator-facing surface.
Common mistakes
| Problem | What to check |
|---|---|
| Don't see the processing band on a booking | The service has 0 processing time. Edit the service and set a non-zero value. |
| Calendar shows a customer-facing time slot inside my processing window | Shouldn't — the storefront treats the full window as busy. If a customer booked a slot inside your processing window, something's wrong; contact support. |
| Fill pill says no matches | No waitlist candidates fit the gap. Check Smart Waitlist for entries matching the service, staff, or time band. |
| Want to disable multitasking for some staff | Not configurable per-staff today. The processing window is determined by the service config; if you don't want a stylist to multitask, leave services they perform at 0 processing time. |
| Booked into the processing window but the original booking is now "covered" with no actions | The cover marker is informational. The original booking is still bookable to manage; the cover marker just visually confirms the multitasking. |
| Processing time changed but old bookings still use the old value | By design — snapshotted on booking. Historical bookings keep their original window. |
FAQ
What's processing time?
The minutes between active service work where the stylist is free — colour developing, perm setting, mask working. Set on a service, OpenChair lets you book another client into that window on the same stylist. Customers don't see the multitasking; the storefront treats the full window as busy to avoid confusion.
Where do I set processing time?
Services → edit a service → Scheduling & Pricing Rules → Processing time (min). Stored on the service and snapshotted on each booking so historical bookings stay immutable when you change the value later.
How do I fill a processing gap?
On the calendar, processing time renders as a dashed band below the active service. When the band is future and ≥ minimum match minutes, it shows 'Fill {N}m' or 'Fill {N}m · {count} matches'. Tap to open Smart Fill prefilled with the staff, time, and duration — match against the waitlist with one tap.
Why doesn't the storefront show overlapping slots?
Customers can't reason about 'stylist free during processing' — they'd be confused by a mid-colour available time. The public storefront treats the full active + processing window as busy. Internal calendar surfaces (operator + staff booking flow) honour the gap so you can multitask.
Does processing time interact with resources?
Yes — if the service uses a resource (chair, room, machine), the resource is occupied for the full window even when the stylist is free. You can multitask the stylist but not the resource.
Can two bookings share the same processing window?
The original booking + one cover. Triple-stacking isn't supported (the cover marker doesn't compose with another cover). For most salons one cover during processing is plenty.