Sign in
URL: https://www.class-ops.com. Sign in with the admin email and password you were given.
If you forget the password, hit Forgot password on the sign-in page. The reset link goes to your inbox and works for 30 minutes.
Daily routine
Three rhythms across the day. The system handles two of them on its own.
08:00 · the system has already done
The daily-summary email lands in your inbox. Bookings count, revenue collected, pending and failed payments.
Through the day · reception flow
Reception staff handle this from the Reception view. You can drop in any time to check.
End of day · reconciliation
- Go to Payments → Reconciliation
- Type today's actual cash count into the Cash panel. The match flag goes green if it agrees with the system total.
- Type the Square and Zettle terminal totals. Match flags go green per terminal.
- Look at the Card-on-File audit list. Anyone here needs their card actually charged. Do that on Square or Zettle directly.
- Tap Copy as email at the bottom, paste into your daily summary email.
- Done. The system has already kept all the rows. This is just for your records.
Weekly routine
Monday · review last week
Go to Reports. Four tabs:
- Today. Live ticker.
- Week. Mon-Sun rolling totals.
- Methods. Split by Cash, Card on Terminal, Card on File, Comp.
- Coaches. Hours worked, sessions taught.
Take 5 minutes to scan for anomalies. Sessions with low check-in rates, members showing as lapsed, payments stuck pending for too long.
Membership renewals
Go to Members, filter by status: trial or expired. Reach out, convert or close.
Common tasks
The set of things you'll touch in any given week.
Add a one-off class (not recurring)
- Classes → Calendar view, tap a date
- Fill in: name, type, time, location, coach, capacity
- Save
It only generates that one session. Use blueprints for anything recurring.
Add a recurring class
- Blueprints → New blueprint
- Name, type, day-of-week, start and end time, location, coach, capacity, default price
- Set the date range (start date to end date, or open-ended)
- Save
The session-generator cron runs daily and creates sessions ahead of time. No manual generation needed.
Cancel a single session
- Classes, tap the session
- Tap Cancel session in the top-right
- Pick a reason. Cancellation emails go out to all booked attendees automatically. Refunds and credit re-grants happen automatically.
Refund a customer
If they paid, open their Member detail page → Bookings tab, tap the booking, then Cancel. The system computes the refund based on the cancellation policy: more than 24h ahead is a full refund as store credit, inside 24h is no refund unless overridden.
Override is available if you want to give them store credit anyway.
Add a new member (admin-side)
Most members register themselves. For a walk-in who doesn't have a phone with them:
- Members → New member
- Fill in name, email, phone, DOB
- Save
- They'll get an email with a "set your password" link
Add a child to an existing member
- Members, tap the parent, then Add child
- Fill in name and DOB
- Save
The child uses the parent's email plus a +child_NNN suffix. They don't sign in independently.
Suspend or lock out a member
Two different states. Pick the right one.
- Suspended membership: stop billing them. They can still sign in. Use this when they pause (holiday, injury). Set on the Member detail page → Membership panel → status: suspended.
- Locked out: they cannot sign in at all. Existing cookies and mobile bearer tokens die immediately. Use this for problem accounts, off-boarded members, or compromised logins.
To lock an account
- Members, tap them to open the detail page
- Tap the red Lock account button next to "Edit Member"
- Read the confirmation, tap Lock account to confirm
A red "Account locked" banner appears at the top of the page. The member is signed out of every device immediately. Their booking history, payments, and waivers stay intact. Only their ability to sign in is affected.
To unlock
Same flow. The button now reads Unlock account (green). Once unlocked, the member can sign in fresh. Their previous sessions don't auto-restore.
The button is hidden on child accounts because children don't sign in independently.
Edit a member's email
Members, tap them, then Edit, change the email, save.
Send an announcement to all members
Not built yet. For pilot, send a Mailchimp blast or a manual email from your inbox. Post-pilot we'll add an admin-side "send announcement" button.
Pull a CSV export
Settings → Export. Pick what you want (members, payments, bookings, attendance), download.
Rare-but-handy
Things you'll probably want to know about, but rarely use day-to-day.
Audit a class with bad data
Classes → Audit. Lists sessions with missing min-age and max-age, plus other fixable inconsistencies. Walk through, save fixes.
Manual payment refund (override the policy)
Payments, tap the payment, then Refund (override). Pick the amount and reason. Store credit gets granted regardless of cancellation policy. Use sparingly. It bypasses the safety rails.
Edit a member's waiver
Waivers, search the member, tap. You can void a waiver, which revokes it. The member needs to re-sign before their next booking. Use when there's a legal reason (e.g. a parent signed for self by mistake).
Edit blueprint capacity for an existing class
Blueprints, tap, then Override capacity. Only affects future-generated sessions. Sessions already in the calendar keep their original capacity unless you edit them individually.
Membership status options
- active Paying, full access.
- trial First-time visitor, time-boxed access.
- expired Payment didn't renew. Still has account access but flagged.
- suspended Paused on your side (holiday, injury). Still accessible.
- none No membership tracking, drop-in only.
These affect pricing logic and display flags. They do not lock anyone out. For that, see "locked out" above.
When something breaks
You won't usually need this section. The system is monitored 24/7 (Sentry, Healthchecks.io, Vercel) and Chris is alerted automatically before you notice. But if you do see something wrong, here's how to escalate so he can move fast.
What to do
- Don't try to fix infrastructure issues yourself. The system has its own playbooks and Chris has the access. Trying to debug ends up wasting time at both ends.
- Send Chris a WhatsApp or text with three things: what page you were on, what you tried to do, what the error said. A screenshot beats a description.
- If the app is fully down AND a customer is in front of you, call Chris instead of texting. Faster.
Common situations and what to expect
| What you see | Response time | What to expect |
|---|---|---|
| App fully down for everyone | 15 min | Chris is paged automatically. He'll text you when he's on it. He'll fix it. |
| Daily 08:00 email didn't arrive | By 09:00 | Chris will spot it on his dashboard before you've finished your coffee. |
| Single payment stuck pending | End of day | Usually fine to wait. Chris looks at the reconciliation overnight. |
| Member can't sign in | Same hour | Most often a typo'd email. You can also reset their password from Members → tap them → Edit. |
| Security tab shows red bars | Same day | Screenshot to Chris. Probably someone hammering an endpoint, not urgent. |
| Something just feels wrong | Whenever | Trust the gut. Send Chris a screenshot and a sentence. Better one false alarm than one missed real problem. |
Runs automatically
You don't need to do these. They happen on their own. Listed here so you know what's happening even though you can't see it.
- Generate sessions for the next 30 days (daily cron)
- Send daily summary email at 08:00 (daily cron)
- Send first nudge to members 48h overdue (cron, every few hours)
- Escalate to "URGENT OVERDUE" after 7 days unpaid (cron)
- Follow up with members who haven't attended in 30 days (daily cron)
- Sweep stale rate-limit buckets (daily cron)
Phone-friendly tips
The whole admin app works on phone too. Useful when you're walking the floor.
- Reception → Walk-in works one-handed.
- Member detail loads fast on mobile.
- Payment reconciliation is the only page that's easier on a laptop. Lots of typing.