What is AllSquads?
AllSquads is a sports class booking and management platform connecting sports clubs, coaches, and players across Australia. The platform provides two surfaces:
- allsquads.com.au — the consumer-facing marketplace where players discover and book classes
- business.allsquads.com.au — the business dashboard where coaches and clubs manage their operations
User Roles
Player
A player is any individual who uses AllSquads to find, book, and attend sports classes or court hire sessions. Players can:
- Search and browse classes by sport, location, and class type
- Book single sessions, term enrolments, camps, or private lessons
- Manage their bookings, credits, and payment history
- Follow clubs and coaches
- Leave reviews
Coach
A coach is an individual sports instructor who creates and delivers classes. Coaches fall into two categories:
- Independent coach — operates their own coaching business, manages their own classes, connects their own Stripe account, and receives payments directly. Independent coaches see business-only features (Court Hire, Pro Shop, Promo Codes, Team Management) as upsell opportunities encouraging upgrade to a Business account.
- Club-employed coach — coaches under a club's umbrella. Club-employed coaches do not need their own Stripe account (payments flow through the club). They have access to core coaching tools (Classes, Bookings, Schedule, Contacts, Messages, Reviews, Help, Settings) but business features like Payments, Analytics, Court Hire, Pro Shop, Promo Codes, and Team Management are hidden.
All coaches can:
- Create and manage all class types
- View and manage their roster and attendance
- Set availability windows and manual blocks
- Manage their contacts and communications
- Build a LinkedIn-style public profile with work history, achievements, qualifications, languages, and social links
Club
A club is an organisation (tennis club, swim school, gym, etc.) that manages multiple coaches and facilities. Clubs can:
- Create and manage classes across all coaches
- Manage courts, facilities, and court hire
- Run memberships, discounts, and session packs
- Access full analytics and financial reporting
- Manage multiple venues
Admin
AllSquads platform administrators. Full access to all platform data, commission settings, payouts, taxonomy, and user management.
Multi-role accounts
A single user account can hold multiple roles simultaneously — for example, a user can be a player, a coach, and a club admin. Roles are additive: signing up as a coach and later creating a business adds the club role without removing the coach role. The dashboard adapts based on the user's active context and persona.
Entitlements System
Personas
The platform defines four personas that determine feature access: player, independent_coach, club_employed_coach, and club. Each persona maps to a set of feature entitlements.
Access states
Each feature has one of three access states per persona:
- granted — the feature is fully available and functional
- hidden — the feature is not shown in the UI at all
- upsell — the feature appears in the sidebar with an amber "Upgrade" badge; clicking it displays an upsell card prompting account upgrade
Coach entitlements
Independent coaches (independent_coach) have full access to core coaching tools (Classes, Bookings, Schedule, Contacts, Messages, Payments, Analytics, Reviews, Help, Settings). Business-only features (Court Hire, Pro Shop, Promo Codes, Team Management) are shown as upsell opportunities, encouraging coaches to upgrade to a Business account to unlock them.
Club-employed coach entitlements
Club-employed coaches (club_employed_coach) have access to core coaching tools (Classes, Bookings, Schedule, Contacts, Messages, Reviews, Help, Settings). Because payments and analytics flow through the club, Payments and Analytics are hidden. All business features (Court Hire, Pro Shop, Promo Codes, Team Management) are also hidden — these are managed at the club level.
Club entitlements
Club accounts (club) have full, ungated access to every feature on the platform.
Core Concepts
Squads vs Classes
"Squads" and "Classes" refer to the same thing on AllSquads — they are used interchangeably throughout the platform. A squad/class is a bookable sports session created by a coach or club.
Sessions
A session is a single occurrence of a class. A recurring weekly class generates individual sessions (e.g., every Tuesday 9am). Session generation is asynchronous — when a class is created, sessions are generated in the background via a BullMQ job and may take a few seconds to appear. Coaches and clubs manage sessions; players book into sessions.
Bookings
A booking is a player's confirmed reservation for a class. A booking may cover a single session (one-off or drop-in) or an entire term/camp enrolment.
Credits
AllSquads uses a credit system for refunds. 1 credit = $1 AUD. Credits are club-scoped — credits issued by one club can only be used for bookings with that club. Credits have an expiry date set at time of issue.
Court Hire
Court hire is separate from class bookings. Players or members can book individual courts by the hour (or in 30-minute increments) via the court hire tab. Pricing can be set by time of day (day/night rates) and by member vs non-member status.
Supported sports
The consumer onboarding picker, /explore filter, class creation wizard, and court hire surface all share a single canonical sport list:
- Tennis
- Padel
- Pickleball
- Squash
- Golf
- Badminton
New sports can be enabled by AllSquads without code changes as a club's player base grows.
Platform Architecture
Fees model
AllSquads charges two distinct fees per booking: a booking fee (player pays at checkout, driven by class type) and a platform fee (club pays at weekly payout, driven by subscription tier). All payments land on the AllSquads platform Stripe account (platform-held charges); the booking fee is AllSquads revenue, and the platform fee is netted off the club's weekly payout. AllSquads absorbs Stripe processing fees — they never appear as a deduction on a payout. Canonical rates, code references, refund/credit interaction, customer-facing labels: `docs/23-fees-model.md`.
Stripe Connect
Every independent coach and every club connects their own Stripe account via Stripe Connect — this is how they RECEIVE their weekly payout. Player payments are processed on the AllSquads platform account (platform-held charges); every payment type (classes, court hire, memberships, session packs, subscriptions, lesson offers) accrues into a single weekly payout, paid every Monday as a Stripe transfer of payable minus platform fee to the club's (or independent coach's) connected account. Club-employed coaches do not need their own Stripe account — their classes pay out to the club. Connecting Stripe is never required to START selling; it is required to receive the payout.
Timezone handling
All dates and times are stored and processed in Australian Eastern Time (AEST/AEDT). The platform is built timezone-aware from the ground up.
API versioning
The backend exposes both unversioned and /v1/ prefixed routes. Native mobile clients should use the /v1/ prefix for stability. Web clients use the unversioned routes for now; both routes serve the same handlers.
Security
- Passwords hashed with bcrypt at 12 rounds (Australian Privacy Act / OWASP recommendation)
- JWT auth on all protected routes with refresh token rotation
- Content Security Policy (CSP) headers on all pages
- File upload size + content-type validation on the storage upload endpoint
- Rate limiting on auth endpoints (sign in, sign up, forgot password, reset password)
Key Terminology Reference
| Term | Meaning |
|---|---|
| Squad / Class | A bookable sports session (used interchangeably) |
| Session | A single occurrence of a class |
| Booking | A player's confirmed reservation |
| Sub-booking | A booking for an individual player within a group booking |
| Credit | Platform credit, 1 credit = $1 AUD, club-scoped |
| Court hire | Facility booking (courts, lanes, etc.) separate from classes |
| Term | A fixed-duration enrolment period for a recurring class |
| Drop-in | Single-session casual booking for a term class |
| Pro-rata | Reduced price when joining a term partway through |
| Session pack | Pre-purchased bundle of sessions at a discounted rate |
| Waitlist | Queue for a fully-booked class |
| Listing access | Who can see a class: public, private, or invite-only |