The calendar's available slots are the union of its working-hours rules minus any conflicts (existing bookings, blocked dates, holidays). Getting this right matters because it directly drives what end users see when they try to book.
Recurring availability
The base layer is default working hours per weekday. For each day of the week, pick:
- Open / closed.
- Opening time if open.
- Closing time.
Three real-world weekly availability patterns:
- 9-5 office hours: Mon-Fri 9-5, Sat-Sun closed.
- Retail-style late nights: Mon/Wed/Fri 9-5, Tue/Thu 9-7, Sat 10-3, Sun closed.
- Weekend services: Sat-Sun 9-5, Mon-Fri closed.
Date-specific overrides
On top of the recurring availability, configure date-specific exceptions:
- Holidays — closed on specific calendar dates.
- Special opening — e.g. Sunday opening for a sale.
- Reduced hours — half-day closure on specific dates.
- Per-resource exceptions — "Dr. Smith is on leave from 1-7 Oct".
Each exception is a row in the calendar's blackout-dates table. Add as many as you need; they're processed alongside the recurring rules when slots are computed.
Slot computation
When the platform renders the booking grid for a specific day, it:
- Looks up the day's working hours (recurring config + any overrides).
- Generates slot start times by walking from opening time, incrementing by slot duration + buffer.
- For each potential slot, checks if it's already booked (counting capacity).
- Excludes slots that fall within the lead-time window from now.
- Excludes slots beyond the booking window.
The remaining slots are what the user sees as available.
Three real-world slot configurations
Example 1: 30-minute doctor's appointments
Slot duration: 30 mins. Buffer: 0. Working hours: 9-5. Result: 16 slots per day (9:00, 9:30, 10:00, ..., 4:30). Each slot is 30 minutes long, capacity 1.
Example 2: 60-minute massage with cleanup time
Slot duration: 60 mins. Buffer: 15 mins. Working hours: 10-7. Result: about 8 slots per day (10:00, 11:15, 12:30, 13:45, 15:00, 16:15, 17:30 — the last full slot ends at 18:30, fitting the 19:00 close). The buffer prevents bookings stacking back-to-back without recovery time.
Example 3: 90-minute group fitness class
Slot duration: 90 mins. Working hours: 7-8:30 morning class, 18-19:30 evening class (set via specific exceptions for the class days). Capacity: 12. Result: two slots per day, each able to take up to 12 bookings.
Multi-calendar conflicts
For environments with multiple related calendars (e.g. several staff members in the same role), you can configure conflict avoidance — a slot is only shown as available if it's free on all relevant calendars. This is useful for resource pools where any qualified team member can take the booking.
Time zones
By default, slots are shown in the calendar's configured time zone (typically the platform-wide setting). For customer-facing calendars where bookers are in many time zones, the platform can render slot times in the booker's local time zone via JavaScript.