Scheduling / Availability

Scheduling

Availability

Working hours, date overrides, calendar conflicts and buffers.

Availability decides which times a lead can book. For every host, Cauliflower starts from their weekly working hours, applies any date overrides, removes the times their calendars and existing meetings make busy, and then applies the meeting type's own rules: notice, booking window, buffers and limits.

You manage your own availability under Availability in the sidebar. The page has two parts: Calendars, where you connect Google Calendar, and Working hours with Date overrides below it.

Working hours

Working hours are a weekly schedule in your time zone.

  • Time zone: the zone your hours are written in. It defaults to your profile time zone and is DST-safe: "9:00–17:00" stays 9 to 5 local time all year.
  • Days: switch each weekday on or off. A day that's off shows "Unavailable".
  • Intervals: a day can have several intervals, for example 9:00–12:00 and 13:00–17:30 to keep lunch free. Use Add hours to add one. Times are picked in 15-minute steps, and "12:00 AM (end of day)" lets an interval run to midnight. Overlapping intervals on the same day are rejected when you save.
  • Copy to Monday–Friday: copies a day's intervals to every weekday.

Click Save availability when you're done. Everyone who joins a workspace starts with Monday to Friday, 9:00–17:00 in their time zone, so new teammates are bookable right away.

Admins can open a teammate's availability with the member switcher at the top of the page and edit their working hours and overrides. Calendar connections can only be changed by their owner.

Date overrides

Overrides replace your weekly hours on specific dates: vacations, conferences or a one-off late shift.

Open the dialog

Click Add override under Date overrides.

Pick the dates

Select one or more dates in the calendar. Past dates can't be selected.

Choose the hours

Leave Unavailable all day on to block the dates completely, or turn it off and set custom intervals for those dates.

Save

Click Add override, then Save availability.

An override applies to the whole calendar date in your schedule's time zone and wins over the weekly hours for that date. Adding an override for a date that already has one replaces it. Past overrides are removed automatically the next time you save.

Calendar conflicts

Two kinds of events make a host busy:

  1. Google Calendar events on every connected calendar with Check conflicts turned on. Cauliflower reads free/busy only, so it sees when you're busy but not what the events are. Events marked as "Free" in Google don't block time.
  2. Cauliflower meetings: every confirmed meeting where the person is the host or a co-host, from any meeting type.

When you connect a Google account, its primary calendar is checked for conflicts and, unless you already have one, becomes the destination for new events. Turn on Check conflicts for any other calendars that should block time, such as a shared team calendar or a personal calendar. See Google Calendar for setup and the destination calendar.

Without Google Calendar configured on the server, availability uses working hours and Cauliflower meetings only.

Free/busy results are cached for up to 45 seconds while invitees browse times. When someone books, Cauliflower fetches fresh free/busy data for the chosen time and checks again, so a meeting added in Google a moment ago is still respected.

Buffers

Buffers are set per meeting type (Buffer before and Buffer after, up to 240 minutes each). They are applied around the slot being offered: a 30-minute slot at 10:00 with a 15-minute buffer on each side is only offered if 9:45–10:45 is free on the host's calendar.

Because buffers check against everything that makes the host busy, they keep a gap between this meeting and any other event, whether the other event is a Google meeting or another Cauliflower booking.

How slots are computed

For each host, Cauliflower walks through the requested date range day by day in the host's time zone.

Set the window

The earliest start is now plus the meeting type's Minimum notice. The latest start is now plus its Availability range in days.

Get the day's hours

Use the date override for that date if there is one, otherwise the weekly hours for that weekday.

Check limits

If the host already has Max per host per day confirmed meetings of this type that day, or Max per host per week that ISO week, skip the day.

Generate start times

Inside each interval, offer a start every Start time increments minutes (the duration by default), as long as the whole meeting fits before the interval ends.

Remove conflicts

Drop any start whose meeting, padded with the buffers, overlaps a busy time.

Start times line up with the beginning of each working interval. With hours of 9:00–17:00 and a 45-minute meeting, the starts are 9:00, 9:45, 10:30 and so on. Set Start time increments to 15 or 30 minutes if you want rounder times.

Combining hosts

Per-host slots are then combined according to the meeting type's hosting mode:

HostingCombinationResult
One hostThat host's slotsOnly their free times.
Round robin, flexibleUnionA time is offered when at least one active team member is free. At booking, the fairest rep among those free at that time gets the meeting.
Round robin, strictThe next rep onlyOnly the free times of the rep who is next in line.
CollectiveIntersectionA time is offered only when every active team member is free. The meeting goes to all of them.

Paused team members and deactivated workspace members are left out before slots are computed. In Handoff, the same calculation runs for the pool a path selects, and teammates marked as required must be free too.

Time zones

Hosts' hours are evaluated in each host's own time zone, so a team spread across New York and Berlin can share one round robin link. Invitees see times in their browser's time zone and can switch it on the booking page. The meeting records the invitee's time zone, which is used in their emails and reminders; hosts' notifications use their profile time zone.

Booking time checks

The slots shown to an invitee are a snapshot. When they confirm, Cauliflower:

  1. Re-reads free/busy from Google for the hosts involved, bypassing the cache.
  2. Re-runs the slot rules for that exact start time and picks a host who is still free.
  3. Takes a per-host lock in Postgres and checks for overlapping Cauliflower meetings (including buffers) before writing the meeting.

If the time was taken in the meantime, the invitee sees "That time is no longer available. Please pick another time." and the calendar refreshes. Double bookings can't slip through, even when two people click the same slot at once.

Bookings made by your team

Handoff bookings, and bookings made directly against a meeting type through the REST API or MCP, use the same availability with two relaxations: the minimum notice is capped at 5 minutes and the booking window is at least 120 days. Working hours, calendar conflicts, buffers and daily and weekly limits still apply.