Skip to content

Powered by Grav CMS + Helios Theme

Classes and waiting lists

Set a timetable for classes, then let customers choose a date and the number of places they need. Use the same setup for a one-off workshop, recurring sessions or a course.

Before you begin

  • kahunacart.bookings.manage to set a class up, to run the queue by hand and to call a date off.
  • kahunacart.bookings.view to read Bookings → Sessions and a register.
  • kahunacart.orders.refund to issue refunds from the order after cancelling a class.

Create a class

Create a product with its type set to Booking. Add its price, picture, description and category in the product editor.

Open the product under Bookings → Services. Set How it is booked to It runs on a timetable to display the When it runs panel.

Field What it does
The first one The first time it runs, typed as a day and a clock time in your shop's own zone
How it repeats A repeat rule. Leave it empty for a one-off
Registration shuts (hours before) How close to the start somebody can still sign up
One purchase buys One date, or The whole course
A full date takes names Whether a class that fills up opens a waiting list
Dates that are different Dates that are off, or that run at another time

Set Places on each date in the duration panel below. This field replaces the appointment capacity label for classes.

Set the required trainer and room. Each class requirement selects one specific resource, rather than a pool the customer chooses from. The form explains this above the resource selections.

You cannot change a class to an appointment while it has upcoming bookings. The form shows how many bookings must be resolved first.

Set a repeat rule

Enter an iCalendar recurrence rule to repeat the class.

Rule What it means
FREQ=WEEKLY;BYDAY=TU;COUNT=8 Every Tuesday, eight times
FREQ=WEEKLY;BYDAY=SA Every Saturday, for ever
FREQ=WEEKLY;BYDAY=MO,WE;UNTIL=20261231T000000Z Mondays and Wednesdays until the end of the year
FREQ=MONTHLY;BYMONTHDAY=1;COUNT=6 The first of the month, six times

Leave it empty and the class runs once, on the first date.

Timezones and clock changes

A recurring class keeps its local start time when the clocks change. A class scheduled for 18:00 continues to start at 18:00 in that timezone.

Use the trainer’s timezone. If the trainer’s record says America/Denver, 18:00 means six in the evening in Denver. Customers see the equivalent in their own timezone. Set the zone on the person, not the class.

Skip or move a date

Add exceptions under Dates that are different, using the original session date:

  • is off — skip that date, for example when the shop is closed for a holiday.
  • runs at — change the start time on that date.

A rescheduled date retains its duration and position in the series. Exceptions follow local time through clock changes.

Choose what a purchase includes

Choose what each purchase includes:

One date. Each purchase reserves a place on the selected date. Use this for independently bookable workshops or sessions.

The whole course. Each purchase reserves a place on every remaining date under one course number. Joining in week three of an eight-week course reserves the final six dates.

A course’s availability is the smallest number of places remaining on any of its dates. If week four is full, the whole course is full.

Reserve the trainer and room

Scheduling a class immediately reserves its trainer and room for the session, even before anyone registers:

  • The trainer cannot take appointments during the class.
  • The room cannot be reserved for another service at that time.
  • A conflicting class is rejected on save, with the first conflicting date shown.

Troubleshoot identifies the class blocking a time, for example Trainer: teaching Tuesday bootcamp.

These reservations apply even when the register is empty.

Set a registration deadline

Set Registration shuts to the number of hours before the session when bookings close. A two-hour cutoff closes booking at 16:00 for an 18:00 class.

The registration deadline is checked when a customer chooses a date, adds it to the cart and checks out. If the deadline passes while their cart is open, they see "Registration for that date has closed. Pick another one." This is separate from a hold expiring.

The class product page

The class product page lists available dates instead of showing a month calendar.

The product page lists the next two months of dates, with the time, remaining places and booking button for each. Customers enter How many places before choosing. A date with two places left shows Full to a party of three.

The price label states whether a purchase covers one date or the whole course, whichever date you start on. It describes what the customer buys, rather than the duration of one session.

A full date with a waiting list offers Join the waiting list. Full dates without a waiting list and dates past their registration cutoff are omitted.

The waiting list

Enable A full date takes names to offer a waiting list when a session fills up.

Joining a waiting list creates a booking that reserves no place and takes no payment. It has no order, including when the class itself is paid online.

Offer an available place

When a place becomes available, the next action depends on the payment requirement:

No online payment required. For free classes and payment on the day, availability is rechecked and the first waiting customer receives a confirmed place and notification.

Online payment required. The next customer receives an offer with a twelve-hour hold and a link to their booking. The place is unavailable to others during that hold.

The booking page shows the held place, its price and the deadline in the customer’s timezone. They add it to their cart and pay to confirm the existing booking, keeping the same reference.

You can also use Give them the place on the register to assign the held place yourself. This confirms it regardless of payment.

If the offer expires, its hold is released and the next person receives an offer. The original customer remains on the waiting list.

Important

A waiting-list offer on a paid class holds the place while the customer pays. It does not confirm attendance until payment is completed.

Manage offers manually

Set When a place comes free to By hand to manage offers yourself. Use the register’s buttons when a place opens. The register displays the current setting.

  • Offer the place holds it for them while they pay for it.
  • Give them the place confirms their place regardless of payment.

Both actions are also available on the booking record, alongside a link to the session’s waiting list.

The register

Open Bookings → Sessions, choose a class, then select a date to view its register. The class list shows each class’s next date and remaining places.

The register separates Coming from Waiting. Confirmed attendees have links to their bookings and any associated orders. The waiting list shows offer order and actions to offer, assign or remove a place.

Use the header actions to mark all attendees as present or absent at once.

Cancel a class date

At the bottom of the register, press Call this date off and enter a reason customers can read. This cancels all bookings for the date, clears its waiting list and notifies everyone.

Cancelling a class does not issue refunds. The screen lists linked orders with payments so you can review and refund them individually.

Embed a timetable

Embed the timetable with a shortcode in page Markdown:

TXT
[kahunacart-sessions days="60" /]

In a theme template:

TWIG
{{ kahunacart_sessions(60) }}

Both accept a category filter and a display timezone. Available dates show Book, full dates with waiting lists show Join, and other full or closed dates have no action.

The timetable is rendered on the server and remains visible without JavaScript.

Limitations

  • Book opens the class product page. The customer must select the date again there.
  • Rescheduling moves a booking to another date of the same class.