Loading…
Loading…
Loading…
Sign in to see the schedule and book a class.
Dev quick sign-in
Every class including hidden ones, with live booking counts. Select a class to preview its roster.
Classes you teach or co-teach, with live booking counts. Select a class to preview its roster.
Loading the schedule…
Nothing scheduled in .
No sessions in the next 14 days.
Loading roster…
Upcoming events
No upcoming sessions.
BookLoading…
- When
- Duration
- min
- Teachers
- Type
- Spots
You're booked in. Payment of is due — the studio will confirm it once received.
Cancelling now counts as a late cancellation (the cutoff was ), so any class credit used won't be returned.
This class is included in your subscription and can't be cancelled individually.
Cancel this booking
This class is part of a whole-series booking. Cancel just this one, or this and every future class in the series?
You're on the waitlist. We'll book you in automatically if a spot frees up.
Your waitlist entry has expired — it's too close to the class start for promotions.
Liability waiver
Please read and accept this before your first booking.
Terms & conditions
Please read and accept this before your first booking.
Checkout
- Class
- Price
- Promo discount
- Store credit
- Total due
Code applied — off.
There's no card payment here — you'll be booked in straight away and pay the studio directly. They mark it paid once the money arrives.
Book the whole series
class(es) will be booked and full date(s) will go to the waitlist instead .
Will be booked:
Will be waitlisted:
- Priced classes
- Promo discount
- Store credit
- Total due
Code applied — off.
One payment covers every priced class booked — the studio reconciles it as a single amount, not one per class.
Confirm booking
Book this class using ?
Book a guest
My bookings
Sign in to see your bookings.
Loading…
Loading…
- Teachers
- Sessions
- Price
Sessions
| When | Duration | Location |
|---|---|---|
| min |
You're registered. Payment of is due — the studio will confirm it once received.
Cancelling now counts as a late cancellation (the cutoff was ).
You're on the waitlist. We'll register you automatically if a spot frees up.
Your waitlist entry has expired — it's too close to the event for promotions.
Liability waiver
Please read and accept this before registering.
Terms & conditions
Please read and accept this before registering.
Checkout
- Event
- Price
- Promo discount
- Store credit
- Total due
Code applied — off.
There's no card payment here — you'll be registered straight away and pay the studio directly.
Sign in to register.
My events
Sign in to see your event registrations.
Loading…
My subscriptions
Sign in to see your subscriptions.
Loading…
This submits a request — nothing is booked or charged until an Admin approves it.
Your subscription requests
You haven't requested a subscription yet — find a series on its class page and tap Subscribe.
| Series | Place | Option | Total | Status |
|---|---|---|---|---|
Admin
Classes
New class New seriesA class runs once, on a single date. A series repeats on set days between two dates and generates a class for each occurrence.
Loading…
Series
No class series yet.
No cancelled series.
No archived series.
| Title | Place | Schedule | Runs | Classes | Status | |
|---|---|---|---|---|---|---|
| Edit | ||||||
|
Checking this series… Cancel this series? Its upcoming will be cancelled, everyone booked gets their credit back and is notified, and waitlists are cleared. Classes that already happened are left exactly as they are. |
||||||
|
Checking this series… Delete this series permanently? Nothing has ever been booked on it, so it and its can be removed completely. This can't be undone. Archive this series? of its classes bookings, so deleting it would strand those. Archiving hides it from this list while those classes keep working. You can restore it later. |
||||||
|
Loading upcoming classes… No classes in the next . |
||||||
Individual classes
No one-off classes yet.
No cancelled classes.
No archived classes.
| Title | Date | Status | |
|---|---|---|---|
| Vacation | Edit Manage class | ||
|
Checking this class… Cancel this class? Everyone booked gets their credit back and is notified, and the waitlist is cleared. |
|||
|
Checking this class… Delete this class permanently? Nobody has ever booked it, so it can be removed completely. This can't be undone. Archive this class? Booked: . Cancel those first if you'd rather delete it outright. Plus past or already-cancelled booking that can't be cleared — deleting would strand . Archiving hides it from this list while its bookings keep resolving it. You can restore it later. |
|||
Runs once, on the date you pick. No parent series.
Loading…
No places yet — add one under Places if members should see where this happens.
Note: setting a price means anyone can still book this class by paying, even without a covering pack — the access type decides what a pack covers for free, not who may attend.
Policy overrides (blank inherits the studio setting)
This series will have classes after saving. ( dates skipped — holidays.)
Edit class
Loading…
Policy overrides (blank inherits the studio setting)
Loading…
Vacation · ·
Booked ()
Nobody booked yet.
| Member | Payment | Attendance | |
|---|---|---|---|
|
Already refunded: A refund is a record only — it never changes this booking's status, releases its slot, or revokes access. Cancel or remove separately if that's also needed. |
|||
|
|
|||
Walk-ins ()
No walk-ins recorded for this class.
| Name | Attendance | |
|---|---|---|
|
|
||
Grant a free spot
Give a real member a spot in this class at no charge. Capacity is bypassed, same as a walk-in.
No matching members not already booked.
Waitlist ()
Nobody waiting.
Past the promotion cutoff — these entries can no longer be promoted.
Cancelled and removed ()
| Removed |
Everyone booked is removed (class credit returned), waitlist entries are cancelled, and everyone affected gets a notification. The class stays on the schedule marked cancelled.
Events
New eventLoading…
No events yet.
No archived events.
| Title | Sessions | Price | Status | |
|---|---|---|---|---|
|
Checking registrations… Delete this event permanently? Nobody has registered, so it and its sessions can be removed completely. This can't be undone. Archive this event? It has , so deleting it would leave those pointing at nothing. Archiving hides it from this list while the registrations keep resolving the event. You can restore it later. |
||||
Loading…
Policy overrides (blank inherits the studio setting)
Save the event first, then its sessions.
Loading…
·
Registered ()
Nobody registered yet.
| Member | Payment | Attendance (selected session) | |
|---|---|---|---|
|
Already refunded: |
|||
|
|
|||
Attendance session:
Waitlist ()
Nobody waiting.
Past the promotion cutoff — these entries can no longer be promoted.
Cancelled and removed ()
Everyone registered is removed, waitlist entries are cancelled, and everyone affected gets a notification. Cancelling a single session isn't modeled — use the message below for that.
Teachers
Teachers are records, not logins — admins manage rosters and attendance on their behalf.
Add a teacher
No teachers yet.
No archived teachers.
| Name | Member | Status | ||
|---|---|---|---|---|
|
Checking this teacher's classes… Delete this teacher permanently? They aren't assigned to anything, so the record can be removed completely. This can't be undone. Archive this teacher? Assigned to: . Assigned to . Deleting them would leave those showing an unknown teacher. Archiving takes them off this list and out of the assignment pickers, while the classes they taught keep their name. You can restore them later. |
||||
Linked member
Not linked to a member — they can't sign in to manage their own classes yet. No members match. Statusupcoming class(es) are still taught by . Pick who takes over before deactivating them. Pick a replacement, then hit Save below to reassign those classes and deactivate together. |
||||
Places
The rooms a class can be held at. Members see the address and photos from the class they're looking at.
Loading…
No places yet.
No archived places.
| Name | Address | Photos | Status | ||
|---|---|---|---|---|---|
|
Checking whether this place is still in use… Delete this place permanently? Nothing uses it, so it can be removed completely — along with its photos. This can't be undone. Archive this place? Used by: . Used by . Deleting it would leave those without a location. Archiving hides it from this list and from the pickers that assign a place to a class, while those classes keep showing it. You can restore it later. |
|||||
|
Enter a valid hex code, e.g. #ff751f. |
|||||
New place
Enter a valid hex code, e.g. #ff751f.
Subscriptions
Loading…
No subscription requests.
No subscriptions match these filters.
| Member | Series | Option | Plan | Total | Submitted | Status | Payment | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| · note | |||||||||||||||||||
|
Note from member:
|
|||||||||||||||||||
|
|
|||||||||||||||||||
|
Reject this request? |
|||||||||||||||||||
|
Cancel this subscription? Its remaining future classes will be removed (freeing the spot for anyone waitlisted), and any money not yet collected — remaining installments, or an unpaid lump sum — will be voided. Classes already attended and payments already made are not affected. |
|||||||||||||||||||
Settings
Studio settings
These are the defaults every class inherits unless its series or a single class overrides them.
Default policies
Manage roles
Grant or remove Admin access, and link members to Teacher records for Schedule and Classes access.
Loading…
No members match.
Select a member on the left to manage their roles.
Admin —
Remove your own Admin access? You'll lose access to every Admin screen immediately, including this one.
Teacher —
Remove the Teacher role? The Teacher record itself is kept — only the login link and Schedule/Classes access go away.
Not a Teacher. Link them to a Teacher record to grant Schedule and Classes access.
Reminders
No backend runs this on a schedule — click to send any reminder that's due right now, for classes and events within the next few days. Safe to run repeatedly; a reminder is never sent twice for the same lead time.
Last run: class, event reminder(s) sent.
Sender display details and a delivery test. Per-event wording lives under the Email templates tab.
Test email
Send a one-off test to confirm the SMTP/extension pipeline actually delivers.
Email templates
Plain text only — no HTML needed. Every event ships with starter wording but is off by
default; turn a row on once you've reviewed it. A disabled row only stops the email —
the in-app notification still happens either way. Placeholders like {{classTitle}}
get filled in automatically.
Show available placeholders
—
Loading…
Full HTML, pasted from an external editor. Used exactly as-is — no branding wrapper, no escaping — so a broken paste produces a broken email; the studio logo/name/colours you get for free in Simple mode don't apply here. The same placeholders still get filled in (see "Show available placeholders" above).
Maintenance tools
Each class and event keeps a running capacity counter rather than counting bookings live — it can only drift under rare conditions (a crashed tab mid-booking, a hand-edit in the Firebase console). Validate checks upcoming classes/events against their real bookings; Fix repairs whatever Validate found.
Classes
Checked upcoming class(es) in s.
- () — shows , actually
Events
Checked upcoming event(s) in s.
- () — shows , actually
Loading…
Liability waiver
Shown to a member before their first booking. Saving edits the current text in place — it does not ask anyone who already accepted to accept again. Use Reset for that.
Terms & conditions
Shown to a member before their first booking, right after the waiver. Same rules: saving edits in place, Reset is what asks everyone again.
Loading…
Landing page
The intro text and logo shown on the landing page — design comes later, this is just the content.
Uploading…
Splash screen
An animated logo covering the app's first moment while it loads. Optional — with none set, the app boots as it does today. It's stored as the SVG itself rather than as a file, so it can be on screen in the first frame; that's also why the size is worth keeping an eye on.
It stays up for at least 3.5 seconds, so a one-shot animation has time to finish rather than being cut off part-way — which does mean every launch takes that long, even when the app was ready sooner. It first appears on the next load, not this one, and a viewer who has never opened the app on their device won't see it until their second visit. Anyone who prefers reduced motion never will.
Saving…
Loading…
| Title | Visibility | Window | |
|---|---|---|---|
No announcements yet.
My packs
Sign in to see your packs.
Loading…
You don't hold any packs yet. You can still book classes at their listed price.
In use
—
Loading…
No classes booked with this pack yet.
| Class | For | Class date | Booked on | Status |
|---|---|---|---|---|
Your other packs
Nothing else held.
| Pack | Terms | Validity | Status | |
|---|---|---|---|---|
Only one pack is ever in use at a time. Switching is instant and doesn't consume or restore anything on either pack.
Buy a pack
Nothing is on sale right now. The studio can assign a pack to you directly.
- Terms
- Validity
- Price
- Promo discount
- Store credit
- Total due
Code applied — off.
You have no pack in use, so this one becomes your active pack straight away.
There's no card payment here — the pack is usable immediately and you pay the studio directly.
| Pack | Terms | Validity | Price | |
|---|---|---|---|---|
My credit
Sign in to see your credit balance.
Loading…
Usable toward any priced purchase — a pack, a priced class, or an event. It never expires.
No credit activity yet.
| Date | What | Amount |
|---|---|---|
My account
Sign in to see your account.
Delete my account
Permanently removes your personal details from this app. Your name, email, phone and date of birth are erased and you won't be able to sign in again. The studio keeps its own record of the classes you attended and what was paid, without anything identifying you.
Checking your bookings…
You have upcoming . ItThey will be cancelled and any class credit returned to your account before it's closed.
You have no upcoming bookings.
This cannot be undone. Type DELETE to confirm.
Notifications
Sign in to see your notifications.
Loading…
Nothing yet.
These are logged in the app but not emailed yet — sending needs a backend, which this build deliberately doesn't have.
Packs
Loading…
| Name | Terms | Validity | Price | Status | |
|---|---|---|---|---|---|
|
Validity runs from each member's grant date, not from a shared calendar window. |
|||||
New pack
Validity runs from each member's grant date, not from a shared calendar window.
Promo codes
Loading…
| Code | Discount | Applies to | Redeemed | Window | Status | |||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
||||||||||||
|
Loading… Nobody has redeemed this code yet.
|
||||||||||||
New promo code
Members
Loading…
No members match.
Select a member on the left to see their details.
Deactivated — not shown in the directory and can't book.
Store credit:
Agreements
Waiver: · Terms & conditions:
Active pack
—
None in use. Bookings won't draw on any held pack until one is made active.
Account
Deactivating is reversible and keeps everything. Erasing is not — use it when the member has asked to be forgotten.
Checking their bookings…
Erase this member's personal data?
Their name, email, phone and date of birth are removed and they won't be able to sign in again. The studio keeps its record of the past and what was paid, with nothing identifying them.
Their upcoming will be released first, returning any class credit and promoting anyone waiting.
This cannot be undone. Type ERASE to confirm.
Held packs
No packs held.
| Pack | Terms | Expires | Status | Payment | Source | |
|---|---|---|---|---|---|---|
|
Revoke this pack? Any classes already booked with it stay booked. |
||||||
Assign a pack
A newly assigned pack only becomes active if the member has none active — an existing active pack is never silently replaced.
Purchases
No pack purchases.
| Pack | Amount | Status | |
|---|---|---|---|
|
Already refunded: |
|||
Grants
No grants issued yet.
| Date | What | Reason |
|---|---|---|
Adding class credits needs an active fixed-credit-count pack — this member doesn't have one in use.
Link walk-in history
Search past walk-ins by name and link the ones that are this member. Each becomes a real booking on their account — matching status, no payment attached — and the walk-in record is removed. This can't be undone.
Loading walk-in history…
No walk-ins match that name.
| Name | Class | Date | Status | |
|---|---|---|---|---|
Payments
Loading…
Money is collected offline — this queue is where it gets recorded. Everything still owed is always listed, however old. The dates below bound how far back settled payments are shown.
Outstanding: · row(s) shown, totalling
Nothing matches those filters.
| Member | For | Type | Status | Amount | Booked on | Paid on | |
|---|---|---|---|---|---|---|---|
| The member cancelled this booking. It stays here because the money may already have changed hands. | |||||||
|
|
|||||||
Reports
The teacher filter narrows attendance, fill rate and the CSV export. Revenue is studio-wide.
Building the reports…
Revenue
- Gross
- Refunds
- Net
Income over time
Nothing was paid in this range.
Tallest bar:
Gross by product type
No income to break down.
Gross by promo code
Refunds by method
Attendance
Class fill rate
Emptiest classes in this range:
Roster / attendance export
CSV of every class booking and walk-in in the date range above, optionally filtered to one teacher. For a single class or event's roster, export from its own Manage class/event screen instead.