Version 2.4.0 went out on 17 September — three weeks of work, and 40 new features. Rather than a highlight reel, here is the whole thing, grouped by where you will actually run into it.
At the Front Desk
Twenty people arrive in four minutes. Most of this release exists to survive that.
- Check in a family member from the app. The Check In screen now asks “Who’s checking in?” when an account has family members on it — something the kiosk always offered and the app never did. Members with no one else on their account see the screen unchanged.
- A class picker on check-in. Members choose the class they are attending, including drop-ins they never booked, instead of one undifferentiated general check-in.
- Price no longer blocks a drop-in from the app. A member standing in the room is no longer turned away because the class carries a price.
- Double taps are harmless. Check-ins are idempotent, so a retry or an impatient second tap will not create a second record — or a second points award.
- Check In Anyway on the kiosk. For a failed card or an outstanding waiver when the member is standing right there. Sort the paperwork after class, not in the doorway.
- A Bulk Check-In page. Pick a class, date and time slot, then type names. Built for the instructor doing roll call, not the member at a screen.
- Time slots on the Check-In Report.
- Walk-ins on the Class Calendar, shown as a +N walk-in count, so a session that looked half empty on paper reads accurately.
- A Daily Roster link in the Reports menu.
- Two portal settings for how members book classes.
Class Credits, Rebuilt
Ten classes bought in March and ten bought in June are not the same ten classes. Now the software knows that. Credits used to be a single pool with a single expiration date; every grant is now its own pack.
- Per-pack credits. Every grant — signup, purchase, renewal, a staff adjustment — carries its own count and its own expiry.
- Members see their packs, not just a total. Each pack’s name, where it came from, how many remain, and when that specific pack expires.
- Staff can edit or remove a single pack — and a pack cannot be shrunk below the credits already spent from it.
- Adjustments spend newest first. Increases land on the newest pack and inherit its expiry; decreases come off the newest credits. Members keep their oldest, soonest-to-expire credits longest.
- Credits come back when they should. Deleting a check-in returns its credit to the pack it came from, and cancelling a booking refunds the credits it consumed.
- Expiries resync hourly, so they land on time without anyone running a sweep.
Getting Paid
Less about new reporting, more about specific places money was leaking.
- A Payouts report (Reports › Admin › Payouts) — your Stripe balance, future payouts, what is in transit to the bank, and full payout history, without leaving the app to log into Stripe.
- Record a partial cash payment against an invoice’s remaining balance, instead of the all-or-nothing Mark Paid.
- Partial payments now stick. Invoices track what has been paid separately from what was originally owed, so retries, account credit and dunning charge the remaining balance rather than the full amount again.
- Cancelling a subscription is a choice, not a date field. The Cancel button offers “at end of paid period” with the date already worked out, instead of editing an end date by hand.
- An Inactive — Still Billing filter, surfacing the worst case in the business: members locked out of their portal who are still being invoiced.
- Single-use membership levels. An intro or promo level can be blocked from ever being used twice by the same person, matched by email within your gym.
- Average LTV by membership level on the dashboard widget.
- A Member Downgraded email.
- Subscription prompts on bundle and sub-accounts — prompted to add a subscription right after adding one, and to cancel linked subscriptions right after removing one.
Scheduling and Staff
- Move one session without moving the series. The rained-out-Tuesday case: shift a single occurrence and leave the recurring schedule alone.
- Notes that stay with a session — what happened in that class, visible to whoever opens it next.
- Hours and pay on Trainer Reports, computed from each class’s actual schedule rather than from revenue or attendance.
- Promote a member to staff from their profile — no deleting and recreating the account. Demotion clears permissions immediately.
- At Risk Customers now excludes free accounts. No revenue is at risk when a free member drifts away, so they no longer clutter the list.
Points and a Leaderboard
New in this release, and entirely optional — leave it switched off and nothing changes.
- Points accrue automatically — one per general check-in, one per class attended (a class check-in earns the class rate, never both), plus a one-time bonus for a member’s first ever class.
- A leaderboard showing the top 50, with month, year and lifetime views, and a public version you can switch on at /leaderboard.
- Staff can award points by hand for what software cannot see — a social share, helping mop the mats — with an optional reason and reusable presets so wording stays consistent between staff.
- Awards are reversible and auditable. A reversal requires a reason, any award can be annotated after the fact, and a gym-wide Points Ledger shows every transaction with filters.
- Automations can award points. A door scan, a first class booking — any existing trigger can now pay out.
- It is also available on its own. If the scoreboard is all you want, there is a free permanent account for it at /register/scoreboard — no plan picker, no payment step — with CSV member import that tells you why any row was skipped rather than importing silently.
Member Records and the API
- Edit and delete member notes.
- Member contact CSV export.
- The Register API accepts contact fields — mobile, address, city, state and zip — so the point of sale can push details captured at the counter onto an existing member.
Alongside the above, 2.4.0 included 43 fixes and a round of security hardening. Questions about any of it, or something you want to see next, just reply — we read all of it.
