Skip to content

Powered by Grav CMS + Helios Theme

Getting started: a personal trainer

Set up half-hour and hour-long personal training appointments, plus a bootcamp sold as an eight-week course.

Run bin/plugin kahunacart-bookings seed trainer to create this example, then use the steps below to review it. You can also follow the steps to build it manually.

Before you begin

  • KahunaCart installed and working, and bin/plugin kahunacart migrate run once after this add-on went in.
  • Manage Bookings and Setup (kahunacart.bookings.manage), and kahunacart.products.manage for the two products.

1. Set opening hours

Bookings → Schedules → New hours, called Training hours:

  • Monday to Thursday, 06:00–20:00
  • Friday, 06:00–14:00

Include any early or late hours when you accept appointments.

2. Add the gym location

Under Bookings → Locations, create The gym, enter its address and select Training hours.

3. Add the trainer

Under Bookings → People and places → Add somebody or something, add yourself as a Person at the gym using Training hours.

This resource lets the appointment service and bootcamp share your availability.

4. Create personal training appointments

Make the product — KahunaCart → Products → Add — called Personal training, type Booking, with two options: 60 minutes at $70 and 30 minutes at $40.

Bookings → Services, Set it up:

Field What to put
How long it takes 60 minutes
Start times every 30 minutes
Notice you want 4 hours
How far ahead 45 days
Cancelling shuts 24 hours
Hours to fall back on Training hours

Add a Trainer requirement containing your record, with customer choice disabled.

Create a separate rule for the 30 minutes option. Use a thirty-minute duration and the same Trainer requirement.

Use service-only availability

A service without requirements uses its own availability and falls back to location and service hours. This can suit a single-service business run by one person.

For the appointment and bootcamp setup here, keep the shared trainer resource so both services reserve the same person.

5. Create the bootcamp

Make a product called Tuesday bootcamp at $160, type Booking.

Set How it is booked to It runs on a timetable, then complete When it runs:

Field What to put
The first one The next Tuesday, at 18:00
How it repeats FREQ=WEEKLY;BYDAY=TU;COUNT=8 — every Tuesday, eight times
Registration shuts 2 hours before
One purchase buys The whole course
A full date takes names on
Places on each date 10
How long it takes 60 minutes
Cancelling shuts 24 hours

The first session uses local time. An 18:00 class remains at 18:00 when the clocks change.

Then one need: Trainer, you, no choice.

Course purchases

A course purchase reserves every remaining date under one course number. Joining in week three reserves the final six sessions.

Course availability is limited by the date with the fewest places left. If any remaining date is full, the course is full.

Choose One date instead for independently bookable sessions or one-off workshops.

Trainer availability during the course

Saving the bootcamp reserves the trainer on each scheduled Tuesday evening. Appointment availability excludes those times, and Bookings → Troubleshoot reports Trainer: teaching Tuesday bootcamp.

The trainer remains reserved even when no customers have registered yet.

6. Test the booking page

Open Personal training. Check that customers can choose sixty or thirty minutes and see a calendar without a staff selector.

Open Tuesday bootcamp to see a list of dates with available places and booking buttons. The price reads $160.00 for the whole course, whichever date you start on. Customers enter their party size in How many places before choosing a date.

Add [kahunacart-sessions /] to a page to display the bootcamp dates, remaining places and booking links. This list remains visible without JavaScript.

7. Manage the waiting list

Full dates offer Join the waiting list. Joining takes no payment and reserves no place.

When a place opens, the next customer receives an offer with a twelve-hour hold. Other customers cannot take it during that period. The place is confirmed when the customer pays.

The offer email links to the held place and its price. Customers add it to their cart and pay, confirming the existing booking under the same reference. If you choose to assign it yourself, use Give them the place on the register.

Continue setup

  • Products - the product, its options and its price
  • Payments - what a client goes through when they pay
  • Shortcodes - the other blocks a page's Markdown can carry