Business — calendar
Appointment calendar
🔧 Operator-managed. The staff appointment calendar — creating, rescheduling, and cancelling appointments — is run by your Operator from their admin console. To book, move, or cancel an appointment on your behalf, contact your Operator. (Your customers can self-reschedule and self-cancel via the customer portal.)
The appointment calendar shows all appointments across all providers at a location in day, week, and agenda views. Operator-side actions include:
- Create — pick service, provider, customer (existing or new), and date/time. For offline/bank-transfer deposits, staff with the right permission can mark the transfer as received once it clears (see Payment settings).
- Reschedule — drag to a new slot or use the Reschedule action; the conflict check re-runs, the customer gets a reschedule email, and the ICS feed increments its SEQUENCE counter (RFC 5545).
- Cancel — honour or override the deposit refund policy; the customer gets a cancellation notice; cancelled appointments stay visible (greyed out) in history.
Status flow
pending → confirmed → completed
↓ ↓
cancelled no_show
- pending — awaiting deposit payment (when a deposit is required) or verification.
- confirmed — slot is locked and the customer has a confirmation.
- completed — appointment has finished; eligible for NPS/review request.
- no_show — customer did not attend; the deposit is forfeited (if applicable).
- cancelled — cancelled by staff or customer within/outside the cancellation window.
Recurring appointments
The recurrence engine (RFC 5545 iCalendar) is built and runs in the background — it generates appointment series up to 12 months in advance, capped at 200 occurrences, and respects exception dates (EXDATE). If a generated occurrence conflicts with an existing booking or schedule block, it is flagged as needs attention rather than silently dropped.
MVP note: there is no UI to create a recurring series in this release; the engine populates recurring appointments for the demo account and the feature will be surfaced later. Recurring schedule blocks (breaks, time-off) are maintained by your Operator ((Working hours).
ICS calendar feeds
/app → Calendar Settings (your self-service task)
Each provider has a private ICS calendar URL, available on the Calendar Settings page under Export / Subscribe. For each provider you can Generate / Regenerate the subscribe URL and Revoke it.
The feed includes:
- Upcoming confirmed appointments (next 90 days by default).
- Past appointments (last 30 days, so cancellations propagate).
- Recurring occurrences.
Subscribe to the URL in Google Calendar, Apple Calendar, Outlook, or any RFC-5545-compatible client. The feed updates automatically — no re-import needed.
The ICS URL contains a secret token. Treat it like a password. If it leaks, use Revoke (or Regenerate) on Calendar Settings to invalidate the old URL.
Google Calendar push
On the same Calendar Settings page, the Google Calendar section connects a provider's Google account when your operator has added an OAuth client.
- Connect Google Calendar sends that provider to Google. Calbok writes appointments to the account's primary calendar.
- The connection does not read busy time. Personal commitments still go in as schedule blocks, or two bookings can land on the same hour.
- Disconnect removes the stored grant. Events already on Google stay there.