Conference Rooms & Resources
Book physical rooms, desks, and equipment as part of a meeting — required or optional, calendar-aware, conflict-checked.
Some meetings need a room. Some need a specific piece of equipment (a projector, an interview rig, a podcast booth). Workestra models these as resources — bookable physical assets the workspace owns, attached to booking links as required or optional.
When a slot is computed, the resource's calendar is consulted just like a host's. When the booking confirms, the resource's calendar gets a hold for the duration. Two simultaneous bookings can't double-book the same resource.
Screenshot needed — resource picker on the form's Advanced tab with required + optional resources
What counts as a resource
| Resource type | Examples |
|---|---|
| Room | Conference room, board room, interview room |
| Desk | Hot desk, dedicated workstation |
| Equipment | Projector, podcast rig, interview camera, demo laptop |
| Vehicle | Field service van (also fits FSM workflows) |
Each resource has a name, a type, an optional capacity (for rooms — "max 6 people"), and a calendar — by default Workestra's internal calendar (just scheduling_calendar_events filtered by resource_id), with optional Google or Microsoft sync if your room is also a calendar-resource in Google Workspace or M365.
Manage resources at /calendar/admin/resources.
Adding a resource
Path: /calendar/admin/resources → New resource. Admin role required.
| Field | What it does |
|---|---|
| Name | "Boardroom A", "Hot desk #3", "Interview camera kit" |
| Type | Room / Desk / Equipment / Vehicle |
| Capacity | Optional — for rooms, the seat count |
| Description | Optional notes (location floor, equipment included) |
| External calendar | Optional. Connect a Google or Microsoft calendar so external bookings on that calendar block the resource too |
| Working hours | Optional. When the resource is bookable. Defaults to 24/7. |
Resources are workspace-scoped. They're not tied to a specific booking link until you attach them.
Attaching to a booking link
On the booking link form's Advanced tab, two pickers appear when Conference rooms / resources is enabled:
| Picker | What it means |
|---|---|
| Required resources | A slot is only available if all required resources are free at that time. The booking writes a hold to each. |
| Optional resources | The attendee picks from a dropdown on the booking page. The slot is available if at least one optional resource is free. |
A common pattern: an interview link with one required interview camera kit and a list of optional rooms ("Room A, Room B, Room C — pick one"). The interviewer's calendar, the camera kit's calendar, and the chosen room's calendar all get holds.
How availability is computed
The slot engine runs through hosts as before, then layers resources:
- For each candidate slot, every required resource must be free
- For each candidate slot, at least one of every optional resource group must be free
- The remaining slots are presented
A "free" resource means no row in scheduling_resource_holds overlapping the slot, and no event on the connected external calendar overlapping it.
What gets written when the booking confirms
| Object | Effect |
|---|---|
scheduling_calendar_events | The booking row, as normal |
scheduling_resource_holds | One row per attached resource (required + chosen optional), linking back to the booking |
| External calendars (if connected) | An event on the resource's calendar with the booking title + attendees |
If a resource booking conflicts (e.g. a calendar event was added directly to the resource's Google calendar between slot computation and confirmation — a TOCTOU race), the booking is rejected and the user is told to pick another slot. The host's hold isn't double-booked.
Cancellation and reschedule
When a booking is cancelled or rescheduled, the corresponding scheduling_resource_holds rows are released or updated. External calendar events on the resource's calendar are deleted or moved.
What's NOT supported
- Capacity-overflow logic — you can't book a resource at "120% of capacity" or share a room between two simultaneous meetings. One booking, one hold.
- Resource-side approval — there's no "request room, approve, then confirm" workflow. If you need approval gating, use the host-approval flow on the booking link itself.
- Per-room pricing — paid bookings are per-link, not per-resource. If you charge for a room, build it into the link's price.
- Multi-resource calendars on one row. Each resource has its own calendar.
Read next
- Booking Links — attach resources on the Advanced tab
- Schedules — for the host hours that resources layer onto
- Availability Bridges — FSM dispatches also feed resource availability for vehicles
- Calendar Dashboard — see resource bookings in the calendar view
Team Pages
A `/team/<slug>` landing page that lists every member's booking links — for departmental scheduling without sharing one URL.
AI Notetaker & Recaps
An AI bot joins your Zoom, Meet, or Teams call, transcribes the conversation, and produces a summary, action items, and a recap you can edit, share, or push into CRM.