Event types & availability
Event types
A kind of bookable meeting — a name, a slug (used in /book/[slug]), a duration, and optional buffers before/after so back-to-back meetings don't collide. Deactivating one stops it from accepting new bookings without deleting its history.
Weekly hours
Recurring rules per day of the week, in your own timezone. The underlying data model supports more than one range per day — a lunch-break gap, say — even though the dashboard UI currently edits one range per day; anyone needing a gap can still set it through the API directly.
Date overrides
A one-off exception for a specific date — closed all day, or a different set of hours. An override replaces, not merges with, that date's weekly rules.
Buffers are global, not per event type
A booking's buffer blocks time on your whole calendar, not just against bookings of the same event type — there is one owner and one calendar, so a 15-minute call and a 1-hour consult booked at overlapping times are just as much a double-booking as two of the same event type would be.
Timezones and DST
Slot computation converts your local wall-clock hours to UTC instants using date-fns-tz, unit-tested including a real DST-transition case — the class of bug where hand-rolled date arithmetic quietly breaks twice a year.