Skip to content

Resources vs. appointment types — the mental model

This is the foundational article for the entire Scheduling section. Read it once and the rest of the section is straightforward; skip it and you’ll find yourself stuck.

Resources are planned. Appointment types are searched.

A resource holds availability (a recurring schedule of when “something” is bookable). An appointment type describes a kind of meeting (its duration, search behavior, and the resources it can run on). When a customer wants to book, they pick the appointment type — and the system searches across the resources mapped to that type to find a free slot of the appropriate length.

That’s it. The rest is mechanics.

A resource is anything with a finite, schedule-able capacity. In practice that’s one of:

  • A person — coach, manager, sales rep.
  • A room — Mat 1, Mat 2, the consultation office.
  • A course offering — “Minis 3-6” as a group class with N parallel seats.
  • Equipment — a single piece of gear that can only be used by one customer at a time.

For each resource you define:

  • A name (e.g. “Coach A”, “Office room”, “Minis 3-6”)
  • A color
  • The Calendar(s) it belongs to (one resource can span multiple calendars; rare but supported)
  • A maximum parallel-booking count (e.g. a group class allows 20 simultaneous bookings; a 1-on-1 consultation allows 1)
  • A recurring weekly schedule (the resource’s “open hours”)

A resource without a schedule is invisible to the search — it has no availability to offer.

An appointment type is the thing a customer asks for. Examples:

  • “Beratungsgespräch” (consultation, 15 minutes, one-on-one with any coach)
  • “Online Beratung” (Zoom consultation, 30 minutes, plus a 10-minute buffer)
  • “Probetraining — Minis 3-6” (trial class, runs on the Minis resource slot)

For each appointment type:

  • A name
  • A booking duration (how long the actual appointment is)
  • A search length (often the same as the booking duration, but can be larger to create a buffer; see Sliding-window search)
  • The resources it can be booked on (an appointment type can target multiple resources)
  • Whether it’s bookable by prospects (see the Für Interessenten buchbar gotcha)

A resource can serve many appointment types. An appointment type can run on many resources. Two examples that drive this home:

One resource, two appointment types: “Coach A” (resource) hosts both “Beratungsgespräch” (15 min, prospects) and “Online Beratung” (30 min, prospects). The same coach’s schedule is shared across both.

One appointment type, two resources: “Beratungsgespräch” (appointment type) can be booked with either “Coach A” or “Coach B”. The system searches both resources’ schedules and offers slots from either.

The common case for trial classes is one resource per course, one appointment type per course — they share the name (e.g. resource “Minis 3-6” and appointment type “Minis 3-6”). This pair acts as the canonical “this is a Minis trial class” abstraction.

Because real schedules are messier than “one resource = one thing”:

  • A single coach hosts multiple distinct appointment kinds.
  • A single class type has more than one timeslot per week.
  • A trial-class slot might also accommodate a private lesson on the same time using the same room.

Collapsing resources and appointment types into one would force you to denormalize the schedule. Keeping them separate means each gets a clean responsibility.

InformationLives on
When is the studio open for “Minis 3-6”Resource (recurring schedule)
How long is a Minis trial classAppointment type (booking duration)
Who can teach MinisResource → appointment-type mapping
Where Minis runs (which calendar)Resource → calendar mapping
Whether Minis is open to prospectsAppointment type (Für Interessenten buchbar flag)
Max parallel bookings of MinisResource (max parallel)

When a customer wants a Minis trial:

  1. They pick the appointment type “Minis 3-6” (in a form or the console).
  2. The system enumerates the resources mapped to that appointment type — say, the single “Minis 3-6” resource.
  3. It walks that resource’s schedule, looking for free windows of length ≥ the appointment type’s search length.
  4. It returns the bookable slots.
  5. The customer picks one; the system creates a booking that occupies the slot.

If the appointment type maps to multiple resources, step 3 unions the results.

  • The 1:1 resource+appointment-type-per-course convention for trial classes.
  • How to model courses that vary in length day to day.
  • The “Für Interessenten buchbar” checkbox that controls public-form visibility.
  • The recurring schedule editor and its quirks.

Each is in its own article in this section. Start with the recurring schedule next.