Classes and guests
Class sessions, credit booking, and the guest policy (one guest per class, two guest bookings per period on unlimited).
Classes is the studio schedule. Open a session for the roster, check-in, and who is in the room. Guest policy: one guest per class.
The public storefront (Offerings) lists the current Sunday–Saturday week. Changing weeks shows a loading bar and skeletons until that week loads — empty days then say No classes. Students tap a day in the picker to jump to that day’s header. Staff Offerings (/classes) uses the same week list. Staff Studio schedule (/schedule) is the same Sun–Sat week as a day/hour grid, with a red current-time line when you are viewing this week. Upcoming classes on the staff Dashboard show booked/capacity and expand to list who is booked, with waitlist named separately. Instructors only see classes assigned to them. The Upcoming class bookings card counts booked spots on upcoming scheduled classes from today onward in the studio timezone (waitlist is not included). Open the card to read what that number means, with a per-class breakdown and a link to each class.
Weekly series
Check Repeat weekly and set a series end date. The preview shows every weekday in range (capped at 26 weeks) and how many of those dates publish immediately.
Sessions are only materialized about 28 days ahead. The weekly rule can continue after that; the next month of dates is created when staff load Classes or Schedule, or when the public /s/{slug} schedule loads. Students therefore cannot book three months out on a long series. Each date keeps the same local start time in the studio timezone through daylight saving changes.
A series class can be edited or cancelled as this occurrence, this and following, or the entire series. In Edit class, the red button is Cancel this class…, Cancel this & following…, or Cancel entire series… (or Delete class… when it is not a series). Close without saving (or Discard changes if you edited the form) only closes the sheet. Studio cancel releases membership credits and does not take a late-cancel fee. Bookings are not left on a deleted class.
Canceled classes still show on the public site until you Archive them (Classes list or the session header). You can archive just that date or other canceled future sessions of the same class. Cancel & archive on the session header (or the edit-sheet confirm) cancels first, then hides the class. Restore one session at a time from Archived (the last 50 archived classes; older ones via hello@fitnessclass.studio).
Invite-only classes
On the class session page, turn on Restricted to selected clients and pick who may book (search, Waitlist-tagged, or everyone in the current search). Only those students can reserve. Everyone else still sees the class on the public site and embed as Invite only, with booking turned off. Front desk can add someone else after a warning. You can email the allowed list a link to that class (same personal-message pop-up as client invites), or Send email on one roster / allowed-list row (never a blast). If the class is invite-only and that client is not allowed yet, the send dialog offers to add them (on by default). Recurring series copy the restriction onto new dates. If an invited student cancels their reservation from My classes, they stay on the allowlist and can book again — cancel does not remove invite-only access. Matching uses this studio’s client (login or email).
Free / grand-opening class
A $0 price on the class type is what students pay (nothing). It does not use the studio’s catalog Drop-in price and it does not spend a class pack or membership credit, even if the student has one. The reserve dialog says the class is free — it must not say it uses a class from a pack. Turn on Allow booking without a membership for a paid-looking class you still want to give away, and use the session override (inherit / allow / require) when one date should differ.
Signed-in students then see Free / No membership needed and Book. People who are not signed in create an account first. The seat counts toward capacity.
Class waitlist
Show number of people booked to clients (App & Site → Class booking) is on by default. Turn it off to hide booked, remaining, and capacity numbers from the public schedule, class page, embed, My classes, booking screens, and public APIs. Clients then see Spots available or Class full (and Join waitlist when the class is full). Staff views still show counts.
When a class is full, signed-in clients see Join waitlist on the public schedule and class page (including the site embed). They can leave the waitlist themselves and see their place in line (You’re #2). Waitlisted classes show under My classes.
If someone cancels, the earliest person who can take the seat is moved in automatically:
- Free or open-booking classes: no credit needed.
- Members with a credit or unlimited plan: that entitlement is used when they are moved in, not when they join the waitlist.
- Someone who still needs to pay stays on the waitlist. The next eligible person gets the seat. Staff can remove a person or Move in from the roster; Move in fails until that client has a credit or the class is free.
The roster lists waitlist position, name, joined time, and a Next up marker. The timetable shows booked/capacity plus the waitlist count. Instructors and front desk see the same classes they already can; platform super admins stay off staff screens.
Booking confirmation email
After a class is reserved, the client gets a studio-branded confirmation (class name, date and time in the studio timezone, the length shown to clients, room and instructor when set, a My classes link, and the cancel window). Staff booking someone on the roster and free classes send the same mail. Turn it off under Settings → Email Templates → Send booking confirmation emails to clients (on by default). A failed email never blocks the reservation.
If they were on the waitlist and a seat opens, they still get the existing A spot opened email — not a second confirmation.
Paid memberships, subscriptions (first invoice), and class packages send a separate purchase confirmation (item, amount, credits, renewal date for recurring, account link). Turn that off next to the booking toggle. Recurring renewals do not send again.
Class reminders are off until you enable them on the same Email Templates card. Choose hours before class start (default 13) or hours before the late-cancel cutoff (default 1). Booked clients get one email with the class time (studio timezone), length, room, instructor, cancel deadline, and a My classes link. Waitlist and cancelled seats are skipped.
Booking with a credit
A member with a usable credit or an unlimited plan reserves against the ledger. That hold spends one credit. Check-in consumes it. Cancel inside the booking window releases it back to the member.
Drop-in Checkout is for someone with no usable entitlement. It charges the studio Stripe account from Settings → Integrations.
Guest booking (Option A)
This rule is enforced when a member books a guest. A reserved member with a credit or unlimited plan can book a guest, and that seat spends one credit. The class allows one guest. An unlimited plan allows two guest bookings in the current billing period. An in-window cancel frees that period slot.
Per class
A member may book at most one guest seat in a class, besides their own seat (self + 1 guest).
- Guest name and email are required. The guest does not need an account. They must sign a liability waiver before check-in (an older version still allows check-in).
- The seat stays on the paying member’s client record.
- The guest seat spends 1 membership credit.
Unlimited memberships
An unlimited membership allows at most 2 guest bookings per billing period. Each one still spends 1 credit, and each class still allows only one of those guests.
Cancel and no-show
Cancel and no-show for a guest hit the paying member, on the same window as that member’s own booking. An in-window cancel releases the credit. A late cancel or no-show uses the studio’s fee for that member. The guest is not a separate Stripe customer.
Packs and limited plans
Packs and other limited plans are not on the unlimited guest allowance. A later setting can make them stricter (0 or 1 guest per month). That number is not chosen yet.
Sign in / Book on the public class schedule no longer freeze the browser tab. Guests who are not signed in go to the account page once, then back to the class they were viewing. Moving between Classes, Memberships, and Shop should keep the studio background — it should not flash white. Clicking a class to see its details (or leaving that page for another storefront tab) should show the studio chrome and a loading skeleton, not a blank white screen.
If the schedule is iframed on your marketing site, Book now leaves the iframe and opens https://www.fitnessclass.studio/s/{your-slug}/classes/{class id} in the same tab (the class details page). Sign in and Your account still open /s/{your-slug}/account?returnTo=…. Signing in there makes the person a client of this studio (it never creates a second software workspace).
To size the iframe to the schedule (no inner scrollbar), include /embed.js once on the parent page. It listens for height messages from Fitness Class Studio and sets iframe.style.height. Several iframes on one page are fine:
<script src="https://www.fitnessclass.studio/embed.js" async></script>
<iframe
src="https://www.fitnessclass.studio/site-embed/your-slug/classes"
title="Class schedule"
style="width:100%;border:0;display:block;overflow:hidden;min-height:400px;"
></iframe>
Use /site-embed/your-slug/waitlist for the waitlist page, or /site-embed/your-slug/highlights for featured classes. The parent page should scroll; do not give the iframe a fixed max-height. Copy-paste snippets live on App & Site.
Class detail duration is the session’s start-to-end time (2:00–2:45 is 45 minutes), not a stale class-type default.
Cancelling from My classes or class details asks Cancel this booking? and mentions a late-cancel fee when the studio’s cancel window has closed.
Staff Cancel class releases a membership credit only when that seat used one. Free, open-booking, unlimited, waitlisted, and guest seats are just cancelled.
Admin roster
On /classes/{id}, each booked row keeps name, email, and a status chip on the left. Check in and Cancel booking stay in one right-aligned group. Send email and Mark no-show sit in the ⋯ menu so the buttons do not wrap or overlap. On a narrow screen the info stacks above a full-width action row. An older-waiver warning is a full-width line under the name and email, never beside the buttons. Cancelled, checked-in, and no-show rows show no desk actions.
A guest row shows the guest name, a Guest tag, and:
Booked by {member name} · {member email}
The member’s own row does not say Booked by. It stays name, email, and status.