What people are actually asking

Two questions, and they need different answers. A prospective member asks “what happens on Tuesdays” — they want the shape of the week. An existing member asks “is the 6am on tomorrow” — they want one specific fact.

A list of the next thirty sessions answers neither. The prospective member has to reconstruct the pattern in their head; the member has to scroll past today to find tomorrow.

So: a weekly grid as the main view, and a clearly visible notice for the next cancellation or closure. Everything else is secondary.

Model it as rules

Eight classes across the week is eight entries with repeat rules — not eight times fifty-two. Adjust a time and it is one edit. Your database stays a normal size. And the timetable can be published a year ahead without generating anything.

Where a class differs by day — a different instructor on Fridays — split it into its own entry. The schedule should read the way your staff talk about it.

The 6am class problem

A 6am class is 6am on the wall clock, on every single morning including the two when the clocks change. If the calendar stores an absolute instant rather than a wall-clock time, that class becomes 5am or 7am twice a year.

People arrive to a locked door, or the instructor does. It is a genuinely bad member experience caused entirely by a storage decision, and it is worth testing before the first clock change rather than after.

Term breaks and bank holidays

Put a year's closures in at once, as cancellations against the relevant classes. Christmas, bank holidays, the week the studio floor is being redone. Then the timetable is correct for twelve months and nobody has to remember anything.

Try it in the expander: add your closure dates to the cancelled box and the rest of the schedule carries on untouched. That is the operation you want to be easy, because it is the one you will do most.

Booking is a separate system

If members book classes, that is a booking platform's job — capacity, waitlists, payments, no-show policies. Do not try to make a calendar plugin do it. Show the timetable, link to the booking system, and let each do what it is good at.

Better still: most booking platforms publish an .ics feed of the schedule. Point the website at it and the timetable follows the booking system automatically, so a cancelled class is cancelled in one place.