Running the academy
The work that repeats once the academy is configured. If something here is missing or greyed out, the cause is usually a step in Academy setup that has not been done yet.
Invite and manage members
- 1Open Members and create an invitation with the correct email and role.
- 2Optionally add a mobile number on the invitation. When the invitee accepts, ControleHQ texts them a confirmation link; they receive messages only if they confirm.
- 3Assign the initial account state and billing account as needed. Choosing New account now puts a placeholder for the invitee into that account straight away, so the account is not empty while you wait for them to accept.
- 4Pick their plans on the same form. Only pending payment or comp are offered, because there is nobody to charge before they accept; the choice is applied when they join, after their account membership.
- 5After the member joins, open their detail view to manage account state, waiver exemption, payment bypass, ranks, plans, and profile visibility.
- 6Use Admin only for users who should manage organization configuration; use Instructor or Staff for limited operational access.
- 7Ask users to log out and back in after changing their role.
- 8Invitations and their six-digit codes expire after 7 days. Issue a new invitation rather than reusing an expired code.
Manage accounts and membership plans
- 1Open Accounts and create an individual or household account.
- 2Add joined, non-admin members and choose the primary contact. Admin-role users cannot belong to billing accounts.
- 3Search by name or email in the Add member dialog rather than scrolling the whole organization. When nobody matches, the empty state carries what you typed straight into an invite, so you do not have to leave and come back.
- 4From Members, use + Add plan (collect payment, pending, or comp) or open Account detail → Plan enrollments.
- 5For pending enrollments, open the plan ⋯ menu: Complete payment (staff Checkout), Send payment request (email link to the primary contact), or Copy payment link.
- 6Use Pause, Cancel, or Add freeze on active enrollments according to academy policy.
A member must belong to the account before receiving a plan. Add-on plans may require an active base plan. Primary contacts can pay pending plans under Account → Billing. Payment request emails go to the primary contact when set, otherwise the enrolled member. Requires email delivery (Resend) to be configured. Enable Customer Portal on the connected Stripe account for payment method updates.
Add a member who has no login
A child who trains but has no email address does not need one, and no longer needs a borrowed address either. Add them to an account and they train, hold a plan, appear on rosters and count like any other member — they simply have no login, and the account’s primary contact acts for them.
- 1Open Accounts, open the household, and use Add member. Choose the option for somebody with no login of their own.
- 2Give a name. An email address is not required, and a date of birth is optional exactly as it is for anyone else.
- 3Make sure the account has a primary contact first. Without one there is nobody to sign their waiver, receive their notifications, or be billed, so the academy has to set one.
- 4Enrol them in a plan of their own from the same place you would for any member.
- 5Tell the primary contact to sign the waiver from their own Waiver page — members on their account who cannot sign for themselves are listed there.
- They hold their own plan enrollment. A 3-a-week plan is three classes for that child, not three shared across the family, and two children on the same programme need two enrollments.
- They count as a billable active student, because that is what they are. A household with two training children is two students.
- Their waiver is a signature of their own, recording both whose waiver it is and which adult accepted it. They are not marked exempt, and they do not inherit the parent’s signature — the academy holds a waiver naming the child.
- Everything the system would tell them reaches the primary contact instead, reworded to name them, so a parent with two children can tell which one a message is about.
- The primary contact can switch to their dashboard and see their rank and attendance. It is read-only, and checking in is not part of it.
- The concept is not about age. It equally covers an adult who will not use email, or anyone recorded before they have set an address up.
When they later get an email and accept an invitation, their history follows them: attendance, promotions, streaks, plan and program enrollments and waiver signatures all stay attached to the same person, and afterwards nothing about them is special. Members recorded as profile-only before this existed were upgraded, so an academy that had already listed a child finds them working rather than inert.
Configure billing and payments
Manage the academy’s subscription to ControleHQ and open the billing portal when available.
Connect Stripe before charging plans. Members pay via Account → Billing. Staff use the plan ⋯ menu (Members, member detail, or Account detail) to complete payment, email a payment request, or copy a Checkout link. Configure Customer Portal on the connected account for card updates and invoices.
Manage announcements, seminars, and store
- Announcements: publish global or role-targeted messages and monitor visibility.
- Seminars: create events, define registration details, and manage attendance.
- Store: create products and variants, set each variant’s price and inventory mode, update stock, and review orders. The price is recorded on the order line at purchase, so later price changes never rewrite order history.
Pair and manage kiosk devices
- 1Open Kiosks and configure the shared staff PIN.
- 2Choose whether mobile QR check-in, ineligible students, and ineligibility reasons are visible.
- 3Create a pairing code and enter or scan it on the kiosk app before it expires.
- 4Label the paired device so staff can identify it.
- 5Review last-seen status and revoke any lost, replaced, or unauthorized device.
- 6Kiosk name search includes eligible guests from linked academies when program mappings and link-access plans are in place.
Revocation takes effect on the kiosk’s next API request. The device then returns to its pairing screen.
Administrator troubleshooting
- Missing gear/menu: verify the user’s organization role, menu access, and fresh login session.
- Student cannot check in: trace Schedule/Class → Program → paid plan or payment bypass, then verify account state, waiver, pending payment, and check-in time.
- Add plan button missing: create an active plan, place the joined student in an Account, and use a non-admin member.
- Payments unavailable: verify Stripe Connect, that the plan is synchronized, and billing is ready on the plan ⋯ menu.
- Payment request email not received: check spam, confirm Resend is configured, and verify the account primary contact email.
- Kiosk unauthorized: confirm it is paired and not revoked.
- Times appear wrong: correct the academy timezone before editing schedules.
- Linked guest missing from kiosk: confirm they have a granting home plan, program mapping, and you are searching the visiting academy’s kiosk.
- Members turned away for a class limit unexpectedly: a limit counts the period that has already happened, so saving one mid-week can block people who trained earlier in it. The preview beside the field says how many before you save.
- Overriding a class limit: staff check the member in anyway at the point of refusal, and the audit records who did it and for which class. There is deliberately no persistent exemption, because a flag set on a busy evening would silently disable that member’s limit forever.
- Cannot add a member without a login: the account needs a primary contact first — that is who signs their waiver, receives their notifications, and is billed.
- A parent cannot see their child’s dashboard: the switcher is offered only to the account’s primary contact. Moving it also moves billing and correspondence, so it is not a neutral change.
- Member stuck on SMS pending: the confirmation text was delivered but the link was never opened, or it expired after 72 hours. Use Resend on the member detail modal.
- Member shows No SMS and Resend is disabled: they replied STOP, so the carrier is blocking us. Ask them to text START to the academy’s sending number; a new confirmation link comes straight back.
- Saving a number reports SMS is not configured: the platform Twilio credentials are missing. No confirmation text was sent.
- Public schedule times look wrong: correct the academy timezone in General Settings; the public page renders in it.
- Cover requests reach nobody: the recurring class has no backup instructors listed, or everybody in the pool has turned off Ask me to cover classes.
- A class shows No instructor: the assigned instructor is out and nobody has picked it up. Assign someone by hand, or reschedule or cancel the class.