Overview
AllSquads sends notifications via three channels: in-app (push/bell), email, and SMS. Players, coaches, and club admins each receive role-specific notifications. All notification preferences are configurable per user.
Email coverage is broad (~84 distinct templates) and spans authentication, welcome drips, bookings, court hire, subscriptions (lifecycle and pause/resume), credits, payments, payouts, invites, products, reviews, lesson offers, admin/legal, and marketing.
Channel matrix (rework, 2026-08-02, M1 bounce — Alex's GOVERNING ruling). Trigger: a live prod SMS read "Your All Comers Pickle Sesh class will be taken by Luca Katsamakis from now on." with no date, time, or club — sent for a routine coach reassignment. A first pass built to a SUPERSEDED relay of Alex's ruling that kept rescheduling on SMS; M1 bounced it. Alex's GOVERNING ruling, verbatim: "coach swaps don't need any email/in-app, except for a private lesson perhaps. cancellations get SMS, reminders get email and in-app. rescheduling gets in-app/email."
| Event family | SMS | In-app | |
|---|---|---|---|
| Cancellations (9 types — session/booking/subscription/court-hire cancelled, or a cash/credit refund tied to one) | ✅ | ✅ | ✅ |
| Reminders (24h/1h class reminders, court-hire series occurrence reminder) | — | ✅ | ✅ |
| Reschedules (class date changed, session rescheduled, booking moved, court hire rescheduled) | — | ✅ | ✅ |
| Coach swaps — GROUP class (per-session replacement, class-level reassignment) | — | — | — (suppressed entirely) |
| Coach swaps — PRIVATE LESSON | — | ✅ | ✅ |
Booking emails name the session you booked, and every session the booking covers (2026-09-04; Alex ruling). A booking email's Date and Time always describe the SESSION being attended — never the day the booking was made, and never a different session of the same class. A booking that covers more than one session lists every one of them, each with its own date, rather than showing the first and dropping the rest. This applies to the player's booking confirmation and to the club/coach "New Booking Received" email alike. The subject line deliberately does NOT carry a date; the body is where the dates live.
A term enrolment's confirmation email states the WHOLE term, plus how many sessions you have left if you joined partway through. The Schedule row on a term booking's confirmation email always shows the term's own full start-to-finish range and session count (the same range shown on the class page, in the cart, at checkout, and on the booking confirmation screen) — never just the sessions you personally have left to attend. If you joined after the term had already started, the row adds how many of the term's sessions remain for you, e.g. "5 of 8 sessions remaining"; a player who joined before the term began sees no remaining-session note, because they are in for the whole thing. The per-session list underneath the Schedule row still names only YOUR own remaining sessions, exactly as always.
Why it is written down: a club received a "New Booking Received" email dated a fortnight before the session actually booked, for a session they knew was full, and reasonably read it as a phantom booking. The email was describing the class's next upcoming session instead of the one the player had bought.
This SUPERSEDES both the earlier "SMS on any booking change" policy and the first rework pass's "cancellations + rescheduling" SMS list. Every surviving cancellation SMS body must carry enough detail (class/court + date/time where one applies + club/venue) to be useful on its own — see the ≤160-character single-SMS-segment budget note below.
Player Notifications
| Event | In-App | SMS | |
|---|---|---|---|
| Booking confirmed | ✅ | ✅ | — |
| Booking cancelled (by player) | ✅ | ✅ | — |
| Booking cancelled (credits issued) | ✅ | ✅ | Optional |
| Booking refunded (Stripe — admin override) | ✅ | ✅ | Optional |
| Booking partially cancelled | ✅ | ✅ | Optional |
| Session cancelled by coach/club | ✅ | ✅ | Optional |
| Court hire booking confirmed | ✅ | ✅ | — |
| Court hire booking cancelled | ✅ | ✅ | Optional |
| Court hire series — occurrence reminder | ✅ | ✅ | — (reminder) |
| Court hire series — occurrence skipped | ✅ | ✅ | Optional |
| Court hire series — cancelled by coach | ✅ | ✅ | Optional |
| Private lesson booking pending approval | ✅ | ✅ | — |
| Private lesson approved | ✅ | ✅ | — |
| Private lesson declined | ✅ | ✅ | — |
| Private lesson request auto-cancelled (no coach response in time) | ✅ | ✅ | Optional |
| Alternative time suggested (private lesson) | ✅ | ✅ | — |
| Session reminder — 24 hours before | ✅ | ✅ | — (reminder) |
| Session reminder — 1 hour before | ✅ | — | — (reminder) |
| Session rescheduled | ✅ | ✅ | — (reschedule, not a cancellation) |
| Court hire rescheduled (the date, start or end time, or court changed; shows the old and new slot as start–end, and the old and new court if it moved; not sent when nothing changed) | ✅ | ✅ | — (rework) |
| Class date changed | ✅ | ✅ | — (rework) |
| Booking moved to a different session | ✅ | ✅ | — (rework) |
| Coach change for upcoming session (replacement player) | GROUP: — · PRIVATE LESSON: ✅ | GROUP: — · PRIVATE LESSON: ✅ | — (never — coach swaps aren't a cancellation) |
| Coach changed on a class | GROUP: — · PRIVATE LESSON: ✅ | GROUP: — · PRIVATE LESSON: ✅ | — (the reported-bug type; never SMS) |
| Waitlist spot available | ✅ | ✅ | — |
| Payment confirmed | ✅ | ✅ | — |
| Payment failed | ✅ | ✅ | — |
| Credits issued | ✅ | ✅ | — |
| Credits expiring soon | ✅ | ✅ | — |
| Subscription cancelled | ✅ | ✅ | Optional |
| Subscription paused | ✅ | ✅ | — (lifecycle change, not a cancellation) |
| Subscription pause confirmed | ✅ | ✅ | — |
| Subscription resuming soon | ✅ | ✅ | — |
| Subscription pause — pre-resume reminder | ✅ | ✅ | — (reminder) |
| Subscription resume outcome | ✅ | ✅ | — |
| Auto-renew charge processed | ✅ | ✅ | — |
| Auto-renew charge failed | ✅ | ✅ | — |
| Annual membership renewing soon (14 days before the yearly charge; once per year; honours the "membership renewal" email toggle) | ✅ | ✅ | — |
| New message from coach or club | ✅ | ✅ | — |
| Group chat message | ✅ | Optional | — |
Unpaid checkouts are not cancellations. If a player starts a checkout, leaves without paying and later clears that unfinished checkout (or cancels the unpaid booking), no "Booking cancelled" notice is sent by in-app, email or SMS. The unpaid booking is simply closed and never appears in booking history. A paid booking cancelled the normal way still sends its notices.
Message-reply emails have their own toggle. Every chat reply (DM, group, class, or channel) that generates an email can be switched off independently of every other notification, from a dedicated "Email — Messages & chat replies" toggle under Notification preferences in Settings/Profile. Turning off booking, promotional, or reminder emails does not also turn these off — they're controlled separately, and vice versa. Every message email's footer "Manage notification preferences" link goes straight to that toggle.
Muting ONE conversation is separate from the global message toggle. The bell icon on a group/class/channel conversation (in Messages) mutes just that conversation — you stay a member and can still read it, you just stop getting emailed and notified about new replies there, while every other conversation keeps notifying you as normal. Every channel-shaped message email also carries a "Mute this conversation" link in its footer that does the same thing without needing to sign in: open the link and press Mute conversation to confirm (opening the link on its own changes nothing, so an email scanner can never mute you by accident) — it's separate from the "Unsubscribe" link some broadcast emails also carry (that one opts you out of bulk/announcement-style email from every channel at once; muting is scoped to the one conversation).
A club message about a class you're booked into still reaches you, even if you've unsubscribed from marketing (2026-09-20). When a club or coach messages everyone booked into a specific class or session — a venue change, a schedule update, a general heads-up — that email is treated the same as a booking confirmation: it always goes out, whether or not you've turned off marketing/announcement emails and whether or not your email address is verified. Every one of these emails carries its own link to stop future messages about that particular class, so you're never stuck without a way to opt out — you just won't miss something that affects a class you're actually attending. Booking changes and cancellations for that class always arrive regardless of whether you've used that link.
A club's whole-club broadcast now reaches you by default too (2026-09-25). When a club sends a message to its whole contact list (not just the people booked into one class), you receive it by default — whether or not your email address is verified, and even if you've never touched your notification settings. You don't have to opt in first. Every one of these emails still carries an "Unsubscribe" link in the footer, and if you've previously turned off club announcement emails in Settings, or already clicked "Unsubscribe" on a past one, those broadcasts stop reaching you — an explicit opt-out is always honoured, it just isn't the default anymore.
Legacy migrated group channels are notification-suppressed (2026-08-20): group channels imported from v1 that were never mapped to a class, segment, or club (type='group' with no target_kind) do NOT send message notifications or emails at all — one post to such a channel previously emailed every bulk-imported member (up to 340 people). Posts to these channels remain visible in-app to their members; DMs, class channels, segment channels and club announcements are unaffected. Each legacy channel will be individually mapped to its real class or archived.
Messages from your club are not marketing: when a club you are a member of, or a class you are booked into, posts to its channel, including the club's announcements channel, you receive the notification even if you have unsubscribed from marketing emails. These messages are information about something you are part of. To stop them for one channel, mute that channel, from the channel itself or from the link at the bottom of the email. Muting one channel does not affect any other.
Messages tab is organised, not just chronological (2026-08-20): Announcements always sit together in one section at the top. A class or lesson group chat that nobody has posted to yet stays hidden from players/members until the coach who set it up posts the first message (the coach always sees it so they can post that first message; club/coach staff always see it too) — it's never deleted, it just reappears the moment it has content. Conversations imported from before go-live are grouped into a collapsed "Earlier / imported" section rather than mixed in with current chats — nothing is ever deleted, just tucked away until you open it. Everything else is sorted by most recent activity.
| Review prompt (after attendance) | ✅ | ✅ | — |
|---|
Waitlist — strictly first-come, first-served (2026-07-19): when a spot opens, "Waitlist spot available" fires to the waitlisted player(s). There is no time-based expiry, no offer hold, and no sequential offer-to-next-player queue — a prior "Waitlist spot expired (no action taken)" row here described machinery that was never built (see also docs/02-core-flows.md "Auto-remove / offer expiry: NONE"). A 24h expiry + FIFO cascade job was built against this stale doc line without approval and was reverted the same day.
Losing the race (2026-07-20; Alex ruling Option B+C): a notified row is not a terminal state. If a different player's booking consumes the spot first, the loser's row resets from notified back to waiting, so they remain eligible for the next spot-open notification instead of being silently and permanently excluded. Re-joining the waitlist also resets a stuck notified row as a safety net. This does not add an expiry/hold/offer-queue — it only prevents a lost race from being a dead end.
Player SMS coverage (canonical, 9 types — rework, 2026-08-02)
Player-facing SMS is sent ONLY for cancellations — see the channel matrix in the Overview above. Reminders and rescheduling are email + in-app only (moved OFF SMS in this rework — a first pass had kept rescheduling on SMS against a superseded relay of Alex's ruling). Every other player event (booking-confirmed, court-hire-confirmed, player-initiated cancellations, waitlist notices, coach reassignment, subscription pause/resume lifecycle changes) is intentionally excluded — these are covered by in-app and email instead.
Who gets player messages (2026-10): every player message about a booking needs the player to have an AllSquads account, whatever the payment method (card, cash, already paid, internal, complimentary, send link, voucher). A player with no account gets nothing about their bookings on any channel, other than a free member court booking they made themselves. Two messages still reach them because they are how they pay and join: the Send link payment email and the invitation to create an account. An account holder gets every cancellation type on the list below by SMS as well, however the booking was paid; cash and already-paid bookings are no longer an exception. This is a per-booking check, not a per-type exclusion, so it applies underneath every type in the cancellation list below.
Every SMS body below carries the class/court name + the specific date and/or time + club/venue (or, for event-level types with no single session date — a rejected pending booking, a Stripe cash refund, a recurring court-hire series cancel, a subscription's effective date — the class + club/venue anchor at minimum). No SMS body ever emits a bare "has changed" / "from now on" with no identifying context (the defect in the reported prod SMS). Every cancellation SMS body is also capped at 160 characters (a single GSM-7 SMS segment — Alex: "≤160 so it's one SMS message") via a shared composer that shortens the date/time format and drops the coach/admin-typed cancellation reason (unbounded free text) and secondary credit/pack detail from the SMS specifically; the full detail still reaches email + in-app.
Cancellations (the complete SMS list):
- session_cancelled
- booking_cancelled_refund
- booking_partial_cancelled
- court_hire_cancelled
- court_hire_series_cancelled_by_coach
- court_hire_series_occurrence_skipped
- stripe_refund_issued (admin Stripe override; distinct from booking_cancelled_refund which is credits-issued)
- subscription_cancelled
- private_lesson_request_auto_cancelled (lesson approaching, still no coach response)
Moved to email + in-app only in this rework (rescheduling — was SMS-eligible under the first, superseded rework pass): class_date_changed, session_rescheduled, booking_moved_player, court_hire_rescheduled.
Moved to email + in-app only as of the first rework pass (previously SMS-eligible under the superseded earlier "any booking change" policy): reminder_24h, reminder_1h, court_hire_series_occurrence_reminder, waitlist_spot, subscription_paused, subscription_resuming_soon, subscription_pause_confirmed, subscription_pause_pre_resume_reminder, subscription_resume_outcome.
Never SMS, and suppressed on EVERY channel for a GROUP class (email + in-app too) in this rework — coach_changed_player and coach_session_replacement_player (the reported-bug type). A PRIVATE LESSON keeps these on email + in-app (never SMS, matching every other type in this list). The class/session's squad_type/schedule_type determines which applies.
Coach Notifications
Coaches receive notifications via in-app and email. SMS is reserved for the player-facing event types listed in the canonical SMS coverage section above.
| Event | In-App | |
|---|---|---|
| New booking (own class) | ✅ | ✅ |
| Booking cancelled (player) | ✅ | ✅ |
| Private lesson booking request | ✅ | ✅ |
| Private lesson cancelled (player) | ✅ | ✅ |
| New review received | ✅ | ✅ |
| Session reminder (own session) — 24 hours | ✅ | ✅ |
| Replaced on a session by club admin | ✅ | ✅ |
| Assigned as replacement coach on a session | ✅ | ✅ |
| New message from player | ✅ | ✅ |
| Payout processed | ✅ | ✅ |
| Payout failed | ✅ | ✅ |
| Stripe Connect approved | ✅ | ✅ |
| Class capacity reached | ✅ | ✅ |
Club Admin Notifications
Club admins receive notifications via in-app and email. SMS is reserved for player-facing event types (see canonical SMS coverage section).
| Event | In-App | |
|---|---|---|
| New booking (any class) | ✅ | Optional |
| Booking cancelled | ✅ | Optional |
| New private lesson request | ✅ | ✅ |
| Court hire booking made | ✅ | Optional |
| Court hire booking cancelled | ✅ | Optional |
| New review received | ✅ | ✅ |
| New contact added | ✅ | — |
| Membership expiring (contact) | ✅ | ✅ |
| Credits issued (by system) | ✅ | Optional |
| Payout processed | ✅ | ✅ |
| Payout failed | ✅ | ✅ |
| Stripe Connect approved | ✅ | ✅ |
| Class capacity reached | ✅ | ✅ |
| Scheduling conflict detected | ✅ | ✅ |
| New message from player | ✅ | ✅ |
| AI agent escalation (unresolved enquiry) | ✅ | ✅ |
Setup Emails for Coaches and Clubs
New coaches and clubs get a short series of setup emails that help them finish setting up and start taking bookings. There is one series for coaches and one for clubs. Every new coach and club gets a welcome email straight away when they sign up, whether they sign up with an email address, Google or Apple. It sets out the first week or two of setup and what already works, and the series follows it.
- Coach series: day 2, finish your profile (photo, bio, sports, qualifications); day 4, connect your payouts so you get paid weekly; day 7, publish your first class; day 10, share your booking link to get your first booking; day 14, book a free 20-minute setup call, or just reply.
- Club series: day 2, finish your club page (description, logo, facilities, address); day 4, add your first program and bring your coaches in; day 7, add your courts and open them for hire; day 10, connect payouts so the club is paid weekly; day 14, book a free 20-minute setup call, or just reply.
- Buttons go straight to the right page: each email's button opens the page it names in the dashboard (signing in first if needed).
- Steps already done are skipped: each email covers one step, and if that step is already done on the day it is due, that email is not sent. Coaches employed by a club never get the payments email, because the club handles payments. The "share your booking link" email waits until a coach has a class.
- When they stop: as soon as the account is set up and has had a booking. An account that is already set up and has taken bookings before does not get the series at all.
- Existing accounts: coaches and clubs that joined before this series started and have not finished setup are all added when the series is switched on. Their first email is the first step they still need, and the rest follow on the same day spacing from then.
- When they arrive: only between 9am and 5pm, Monday to Friday, in the coach's or club's local time. An email that falls due outside those hours waits for the next weekday morning; none is skipped, so the series can run a day or two later than its planned days.
- One series at a time: coaches and clubs never get the player emails. Never more than one setup email every two days.
- Opting out: these are account setup emails, not marketing, so they are sent even if marketing emails are switched off. Every one carries an unsubscribe link at the bottom that works without logging in; clicking it stops them. They are not sent to an email address that has bounced.
Status: this series is switched on and sending.
Feature Tips for Coaches and Clubs
Once a coach or club has finished the setup emails, or is already set up and taking bookings, they get an occasional email about one AllSquads feature they are not using yet. There is one series for coaches and one for clubs.
- What they cover, in order: session packs and memberships; automatic reminders and waitlists; court hire with member rates (clubs only); the AI assistant in the dashboard (its button opens the assistant); payouts and reports (not sent to coaches employed by a club, because the club handles their pay); messaging and broadcasts; the Pro Shop and promo codes (not sent to coaches employed by a club); and what's new and what's coming. Each email covers one feature and links straight to the right page in the dashboard. The session packs email opens the new-class form, where packs are set up.
- Features already in use are skipped: for example, a club that already sells memberships, has member court rates, or has sent a broadcast does not get the email about that feature. The Pro Shop and promo codes email is skipped only for an account that already has promo codes and either has a Pro Shop or is on a plan without one. The what's new email always goes.
- When they arrive: about a week apart, and never while a setup email is still to come. The first one comes at least a week after the last setup email. Like the setup emails, they are sent only between 9am and 5pm, Monday to Friday, local time.
- Existing accounts: coaches and clubs that are already past setup are all added when the series is switched on.
- Opting out: these are not marketing emails, so they go out regardless of the marketing-emails preference and are not held to the marketing-send frequency limit. Every one still carries an unsubscribe link, and clicking it also stops the welcome emails you get after signing up, and the account-setup emails above. They are not sent to an email address that has bounced.
- New features: brand-new features are announced in What's new and the monthly product update email. Once a feature has been announced and is described in the help centre, it also gets its own short email at the end of this series. These emails are written automatically in plain language and link to the right page. Someone who has had every email so far gets the new one on their next eligible day, with the same timing as above: about a week after their last email, weekday hours only. They never quote prices or fees, and one can be removed by the AllSquads team at any time.
Status: this series is built and its wording is approved, but it is not yet switched on. The automatic new-feature emails are built too, and are also not yet switched on.
Emails for New Players
Players get their own short series of emails, separate from the coach and club ones. It helps new players get to their first booking, then shows them useful features. Anyone who also has a coach or club account never gets these.
- Getting started, after the welcome email: day 2, add your details once; day 4, find your next session; day 7, add your children so you can book for them; day 10, put AllSquads on your phone's home screen (this one is held back for now). An email is skipped if that step is already done. Every new player gets the welcome email straight away at signup, whether they sign up with an email address, Google or Apple.
- When they stop: as soon as the player makes their first booking.
- Then, feature tips: about a week apart, one feature per email: waitlists, how cancelling and credit work, session packs and memberships, court hire, and the Concierge AI assistant (its button opens the Concierge). A feature the player already uses is skipped.
- Timing: sent only between 9am and 5pm, Monday to Friday, in the player's local time; an email due outside those hours waits for the next weekday morning and is never skipped. Never more than one getting-started email a day, and never more than one of these emails a week once the tips begin, so an email can arrive a day or two after its planned day.
- Existing players: players who joined earlier are all added when the series is switched on, starting with the step that fits where they are.
- New features: once a feature has been announced in What's new and is described in the help centre, it also gets its own short email at the end of this series, written automatically in plain language. A player who has had every email so far gets the new one on their next eligible day, with the same timing as above. These emails never quote prices or fees, and one can be removed by the AllSquads team at any time.
- Opting out: these are not marketing emails, so they go out regardless of the marketing-emails preference. Every one still carries an unsubscribe link, and clicking it also stops the welcome emails you get after signing up. They are not sent to an email address that has bounced.
Status: this series is built and its wording is approved, but it is not yet switched on. The automatic new-feature emails are built too, and are also not yet switched on.
Email Coverage
AllSquads ships ~84 distinct email templates across the following categories:
- Authentication and password
- A welcome email at signup for every player, coach and club, sent straight away
- Setup emails for coaches and clubs (see above)
- Feature tips for coaches and clubs (see above)
- Emails for new players (see above)
- Bookings (confirmation, cancellation, partial cancellation, refund, moved-player)
- Coach changes (replacement coach, coach changed on a class)
- Court hire (single bookings and recurring series)
- Subscription lifecycle (cancellation, paused, pause confirmed, resuming soon, pre-resume reminder, resume outcome)
- Credits (issued, expiring, redeemed)
- Payments and payouts (success, failed, processed)
- Invites (coach invite, club invite, accepted)
- Products (purchase, refund)
- Reviews and lesson offers
- Admin and legal notices
- Marketing campaigns
Specific templates can be enabled or disabled per user via notification preferences (see below).
Notification Preferences
Configuring preferences
All users manage notification preferences in Dashboard > Settings > Notifications. Each notification type can be toggled on or off per channel (in-app, email, SMS).
Coach/club email toggles — what each controls
The Settings > Notification preferences panel exposes two coach-side email toggles. Both default ON for new accounts.
- "New booking received" — fires the email when a player completes a booking (paid or pending) on one of your classes. Backend event:
new_booking_received. Includes manual bookings created by an admin, regular Stripe-paid bookings, annual subscription renewals. - "Booking cancellation" — fires the email when a confirmed booking is cancelled by either the player or by you. Backend events:
booking_cancelled_by_player,booking_cancelled_refund,booking_partial_cancelled,session_cancelled(all four map to the samebooking_cancelledpreference category).
Two former toggles ("Payment received" + "New player joined") were removed because no backend event existed to gate. Coach-side payment notifications are bundled into the "New booking received" email (most bookings are paid at booking time). Payouts are always-sent transactional and not user-toggleable. There is no platform-side "new player joined this club" event — players appear in your contacts the first time they book.
Per-club notification preferences
Players who follow or are members of multiple clubs can set per-club preferences in Dashboard > Profile > Notifications > "Per-club preferences". For each club a player can independently mute marketing broadcasts, class announcements, and waitlist notifications without affecting bookings/payment notifications, which always go through. The backend notify() dispatcher checks the per-club preference table before sending email or SMS so muted users receive nothing for that club.
SMS notifications
SMS notifications require a verified mobile number in the user's profile. Standard SMS rates may apply depending on the user's carrier.
Cancellations are the only family that texts. The nine cancellation events marked "Optional" in the tables above are the complete list — nothing else on AllSquads sends a text. Booking confirmations, class reminders, reschedules, coach changes and waitlist offers are email and in-app only, however their preferences are set.
Switching cancellation texts off. Notification preferences carries one SMS control, "SMS — Cancellations". Turning it off stops the texts for a cancelled session, a cancelled or partially cancelled booking, a card refund, and an unanswered private-lesson request. It does not change the matching emails, which are sent separately.
Court-hire cancellations, court-hire series changes and subscription cancellation still text regardless of that setting — those four events are not attached to any preference, so there is currently no way to switch them off. This is a known gap rather than a deliberate policy.
Earlier builds of the preferences panel offered "SMS — Booking confirmations" and "SMS — Class reminders". Neither event has ever sent a text, so both controls have been removed rather than left advertising something the platform does not do. Anyone who had switched either on keeps the stored setting; it has no effect and nothing reads it.
Email frequency
For high-volume events (e.g., individual bookings on a large class), club admins can switch from per-booking emails to a daily digest to reduce inbox volume.
Notification Content Standards
Booking confirmation (player)
Contains: class name, session date and time, full venue address (street, suburb, state, postcode — not just the suburb; 2026-07-30), coach name, participant name, booking reference, payment amount, cancellation policy summary, link to booking in dashboard. The full address applies to every booking-confirmation path (one-off, casual-recurring subscription renewal, annual subscription, session-pack redemption, free-trial, club-approval, manual add, court hire) so the player always knows exactly where to go — profile/explore/search cards intentionally show only suburb + state for browsing.
Get directions, calendar invite, and message-the-club (2026-09-28). Every booking confirmation, moved-booking, and reschedule email (player side) additionally carries a "Get directions" link (a Google Maps search built from the venue's own address — omitted, not blanked, for a venue with no street on file), a downloadable calendar invite attached to the email itself (one event per session, capped at 20 for a long-running term or subscription — the Schedule line above the attachment still states the true full range), and a "Message the club" link. A cancellation email (a booking cancelled outright, or cancelled with credits issued) carries the message-the-club link and the cancellation policy, but no manage-or-cancel link, no directions and no calendar invite: there is nothing left to manage or attend. Its cancellation policy matches how the term was paid, the same wording as the confirmation (a term paid upfront is told no refund is given for the rest of the term; a term on weekly instalments is told the instalments continue). A partial-cancellation email still describes a live booking, so it keeps the manage and directions links for what remains, but never a calendar invite. A coach-added ("you've been added to a class") email carries the same set as a booking confirmation.
New booking received / booking moved / session rescheduled / voucher to redeem (club/coach)
The club/coach-facing copy of a booking event — a new booking, a player moved into your class, a session you rescheduled, a court hire, or a government-voucher booking waiting on redemption — states who/what/where/when (player name, class or court name, venue, and the session date and time in the club's timezone) but carries no money at all: never the booking fee, never the price the player paid, never a card-charged or total figure. It also carries none of the player-only actions — no cancellation-policy paragraph, no downloadable calendar invite, no "Message the club" link, and no manage/cancel link (a club does not manage a player's own booking from this email). Each of these emails carries exactly one call to action, "Go to bookings", linking to the club's own bookings dashboard (the same dashboard list that shows class and court-hire bookings together).
Session reminder (player)
Contains: class name, session date and time, full venue address (street, suburb, state, postcode), coach name, what to bring (if configured), link to booking. Court-hire's equivalent recurring-series occurrence reminder carries the same full address.
Waitlist confirmation (player)
Sent the moment a player joins a waitlist. Contains: the player's name, class name, club name, venue (when the class has one and it is not simply the club's own name), session date and time in the club's timezone, and the player's position in the queue. Every value except the class name is optional: when one cannot be resolved it is left out along with the sentence clause and detail row that would have held it, so a missing value never renders as an empty gap in the copy.
Waitlist spot opened / booking payment link (player)
Contains: class name, session date and time, full venue address, spots remaining (waitlist) or amount due (payment link), a book-now / pay-now link. Every court-hire email (confirmed, new booking, cancelled, rescheduled, series invite, payment link) carries the same full address as its class-booking equivalent.
Coach reassignment (player + coach)
Per-session and class-level coach-change emails (coach_session_replacement_player, coach_changed_player, and the new-coach/original-coach counterparts) carry the full venue address, resolved from the class's linked venue — not read off sessions, which has no location column.
Rework (2026-08-02): the two PLAYER-facing types above (coach_session_replacement_player, coach_changed_player) are suppressed entirely — no email, no in-app, no SMS — when the class is a GROUP class. A PRIVATE LESSON keeps them on email + in-app (never SMS). The coach-facing counterparts (original coach told they were replaced; new coach told they were assigned) are unaffected and fire regardless of class type.
Booking cancellation (player)
Contains: class name, cancelled session date, reason (if provided), refund outcome (credit amount and expiry, or no refund), link to credit balance.
Private lesson request (coach)
Contains: player name, requested date and time, duration, lesson type, player notes, approve/decline action links.
Payout notification (coach/club)
Contains: payout amount, period covered, number of transactions, link to payout report.
AI agent escalation (club admin)
Contains: channel (website chat / email / WhatsApp), player name or identifier, conversation summary, link to full conversation in Messages tab.
Marketing SMS Broadcasts — not available
Marketing SMS broadcast campaigns are OFF on all tiers and not offered to any club or coach (the add-on purchase model was removed; the feature is deferred until a future paid plan re-introduces it). There is no SMS Campaigns surface in the dashboard today.
Transactional / operational SMS (booking confirmations, reminders, cancellation notices) is a separate feature with its own tier rules and is unaffected by this — see the notification-type sections above and 20-pricing-tiers.md for which tiers include transactional SMS.
