Skip to content

Variable-length courses workaround

A common configuration: a single class type (e.g. “BJJ”, “Kickboxing”) runs at different durations on different days. Maybe 60 minutes on weekdays, 90 minutes on Saturdays. The current scheduling model doesn’t support variable duration on a single appointment type — but there’s a clean workaround.

An appointment type has a single booking duration. The search engine uses it as the fixed window width. There’s no “look up the slot’s actual length and use that” mode today.

If you set the booking duration to 60 minutes and the resource has a 90-minute slot, the search returns multiple 60-minute slots inside the 90-minute window — not what you want. Set it to 90 minutes, and the 60-minute slots disappear from the search entirely.

The workaround: duplicate as <name> (Dauer) pairs

Section titled “The workaround: duplicate as <name> (Dauer) pairs”

For each duration, create a separate resource + appointment-type pair with the duration in the name:

Resources:
BJJ (60 Min)
BJJ (90 Min)
Appointment types:
BJJ (60 Min) — duration 60 min, maps to "BJJ (60 Min)" resource
BJJ (90 Min) — duration 90 min, maps to "BJJ (90 Min)" resource

Now schedule the resource slots accordingly:

  • “BJJ (60 Min)” slots on weekdays.
  • “BJJ (90 Min)” slots on Saturdays.

Both appointment types are public; the form offers them both as separate options.

The temptation is to:

  • Have one resource (“BJJ”) with mixed-length slots.
  • Have two appointment types (“BJJ 60”, “BJJ 90”) both mapped to that one resource.

This breaks the search. In any single slot, the system would find availability for both appointment types (e.g. a 90-minute slot satisfies both a 60-minute and a 90-minute search). The form would show two distinct booking options for the same physical timeframe, and one of them is structurally wrong (booking a 60-minute appointment in a 90-minute slot creates a 30-minute orphan window).

The duplication approach avoids that entirely — a slot of resource “BJJ (60 Min)” is unambiguously a 60-minute slot, and a slot of resource “BJJ (90 Min)” is unambiguously a 90-minute slot.

  • Twice the scheduling work at setup. You define two resources and two appointment types per duration variant.
  • Slightly noisier form UI. “BJJ (60 Min)” and “BJJ (90 Min)” are two list items. Most customers don’t mind, but it’s not invisible.
  • Naming discipline. Always use the same <name> (<duration> Min) format so it’s visually grouped in the planner.

If the customer has more than two duration variants per course, the cost compounds. At three variants per course across five courses, that’s 15 resource/appointment-type pairs. At that point it’s worth waiting for the dynamic-duration feature.

A future setting on appointment types will be “Derive booking duration from schedule” — when checked, the appointment type pulls its duration from the resource slot it lands in. One appointment type, mixed-length slots, no duplication.

Not built yet. Until then, the duplication workaround is the only consistent answer.