Build a Class Scheduling & Booking App for Your Gym
In a gym or boutique studio, group classes are the retention engine — members who take classes are far less likely to cancel — but every spin bike, reformer and mat is a capacity-limited seat that has to be booked, waitlisted and paid for. Most owners still run this on a whiteboard, a spreadsheet of class-pack balances and a phone that rings during peak hours. A booking app built for how classes actually work — recurring timetables, per-class caps, cancellation windows and pass credits — turns that chaos into a system your members run themselves.
The problem
- The 6am spin fills, three people no-show, and eighteen bikes sit half-empty while a paper waitlist of members who wanted in never got called.
- Class packs and memberships live in a spreadsheet, so front desk can’t tell if someone’s 10-class pack is used up, expired, or if their unlimited membership is on a failed-payment hold.
- There’s no cancellation policy anyone can enforce — members drop out five minutes before class with no fee, so no-shows are chronic and prime slots look booked but run empty.
- Instructor swaps and holiday closures get texted around by hand, and members still show up to a locked studio for a class that was cancelled.
What you’d build
A recurring weekly timetable with a real capacity on every class — Mon 6am Spin (18 bikes), Tue 7pm Reformer (10 machines). Members see live "spots left", book their seat, and join an ordered waitlist when a class is full.
One place that knows each member’s plan — unlimited monthly, a 10-class pack, or a drop-in. Booking decrements a pack credit or checks an active membership, and blocks the booking when the pack is empty, expired, or the membership is frozen.
Enforces your cancellation window, auto-promotes the next person off the waitlist when a spot frees, notifies them, and lets an instructor mark attendance so no-shows are flagged or charged per your rule.
The data model
A day in the system
- The owner sets the weekly timetable once — each class with its instructor, time and capacity — and the system generates dated class instances for the weeks ahead.
- A member logs in on your own domain, sees the week’s grid with live "spots left", and books Saturday 9am HIIT; the system confirms their pass has a credit and decrements one.
- The 6am Spin hits its 18-bike cap; the next member taps "join waitlist" and is queued in position order rather than turned away.
- At 8pm a booked member cancels — inside the 12-hour window, so they forfeit the credit — and the system auto-promotes the first waitlisted member and texts/emails them the freed spot.
- An instructor calls in sick: the owner reassigns a sub on that one class instance (or cancels it), and everyone booked is notified automatically, so nobody shows up to a locked door.
- At class time the instructor opens the roster on a tablet and checks members in; anyone booked but absent is marked no-show, which flags their account under the policy.
- A member’s monthly payment fails, their status flips to on-hold, and new bookings are blocked until billing is resolved while their existing bookings stay intact.
- End of week the owner reviews attendance by class and instructor, spots the slots that keep running empty, and prunes or moves them.
Where AI trips up
- Capacity belongs to the dated class instance, not the recurring template. A naive build caps the class once, so a single cancellation appears to "free a spot" across every future Tuesday. Each occurrence needs its own count, waitlist, sub and cancellation.
- The last-spot race: two members tap "book" on the final bike in the same second. Without an atomic capacity check inside a transaction you oversell the class — and the same bug promotes two people off the waitlist into one open seat.
- Cancellation-window math has to run against the class’s local start time and survive daylight-saving changes. Get the timezone or a spring-forward hour wrong and you charge no-show fees on perfectly valid cancellations.
- Credits and refunds are the economic model: cancel inside the window and the credit is forfeited, cancel outside it and the credit returns to the pack. A build that always refunds — or never does — quietly breaks your revenue. Expired packs and frozen memberships must also block booking.
- A first-time member must have a signed liability waiver / health screening on file before they can attend — letting someone book and train with no waiver is a real liability gap, not a nice-to-have. And never store card numbers yourself; run payments through a PCI-compliant provider’s vault.
- The recurring weekly timetable with per-instance capacity, member self-booking, and a live "spots left" count — the core loop that empties the front-desk phone.
- The membership and class-pack wallet that decrements on booking and blocks when a pack is empty, expired, or frozen.
- The cancellation window plus waitlist auto-promotion with an automatic email/SMS to the promoted member.
- Native iOS/Android apps — a mobile-friendly booking page on your own domain covers almost every member; skip the app stores for v1.
- A full retail POS for shakes, apparel and lockers — keep v1 to classes and passes.
- Body-metrics tracking, workout logging and wearable integrations — that’s a fitness app, not a booking system, and it will sink your first release.
FAQ
How do class packs and unlimited memberships work together in one system?
Each member’s pass row carries a plan type and, for packs, a credit balance. Booking decrements a credit for pack holders and simply checks an active, non-frozen status for unlimited members. The booking screen and the cancellation engine both read that one wallet, so a member can never book a class their pack can’t cover.
What happens when a class fills up?
New requests go onto an ordered waitlist instead of being turned away. When someone cancels or a spot opens, the system auto-promotes the first person in line and notifies them — you never chase empty bikes by hand. On ybuild this runs live on your own domain, so members self-serve the whole flow.
Can I enforce a cancellation policy and charge for no-shows?
Yes. You set a window — say 12 hours. Cancel outside it and the credit returns to the pack; cancel inside it, or simply don’t turn up, and the member forfeits the credit or is flagged and charged per your rule. The instructor’s check-in screen is what turns a booking into an attended or no-show record.
How do I handle an instructor calling in sick or a holiday closure?
Because each dated class is its own instance, you cancel or reassign just that one occurrence and everyone booked is notified automatically. The recurring template and every other week stay untouched, so a one-off change never rewrites your whole timetable.
Do members have to sign a waiver before booking?
You can require a signed liability waiver or health questionnaire before a member’s first booking is confirmed, and store the signed date on their record so staff can prove it later. Payments run through a PCI-compliant provider, so card numbers are vaulted there and never on your system.
Sources
- How 77 Million US Fitness Members Work Out — Health & Fitness Association — HFA (formerly IHRSA), the industry body, on record membership and the growth of small-group and studio training — the demand a booking app has to schedule.
- Group Exercise & Member Retention Statistics — Retention data (citing Les Mills and IHRSA research) showing group-class attendees stay markedly longer than solo members — why filling every class seat matters.
Describe it, go live on your own domain in one pass — hosted, full-stack, no server. Free to start.