Creates a slug-keyed club sandbox. The organiser gets a link like ?club=east-grinstead-tennis that drops their players straight into their club.
Modules enabled
Match Finder & Mix-Ins always on. Additional modules opt-in at provisioning.
Leagues at
Create a New League
+
Create new club
First one here? Set up your club.
Singles leagues won't ask players for a partner when they join.
✅
League Created!
INVITE LINK
👋
What's your full name?
Use your first and last name — this is how other players will see you in the league.
🤝
Who's your doubles partner?
Pick from existing members or type their full name if they haven't joined yet.
Or type a name if they're not in the list yet
📅
When are you free?
Tap any time to mark a 1.5-hour match window (matches are always 1.5 hours, so one tap selects the whole window). You can always update this later.
🎉
You're all set!
Share this link with everyone else in your league so they can join too.
Share this link:
0 of 0 players submitted0%
⚙️
Setting Up Your League
Add your players or teams (doubles pairs for doubles leagues, individual players for singles). Then share the invite link so players can join and fill in their own availability.
Tip: Use Bulk Add Players from your club welcome screen, or the quick template below, to add everyone in seconds.
League Settings
Players will see a "Book a Court" link on match and open games screens
Invite Players
Share this link with your players. When they click it, they'll be taken straight into this league.
Teams
New Team
Quick Add All Teams
Quick Add
League Members
These people have joined your league. Link them to a player name so they can fill in availability.
📅
Mark Your Availability
Tap the boxes below to mark when you're free to play — pick your available 1.5-hour slots for each day.
Once you've marked your slots, click "Everyone" to see when all players are available, then "Match Finder" to find the best times to play.
⚠️
You're not linked to a player yet
Ask your league organiser to link your account to your player name in the Settings tab.
👤 Fill in availability for another player
🤖AI Availability AssistantBETA
Describe when you're free — I'll fill the grid for you. Try: "every day except Tuesday", "weekday evenings after 6pm", "weekends only".
💡 Free during beta. We may introduce a small fee for the AI Assistant in the future. The core app (Match Finder, Mix-In Games, Scoring & Tables) will always stay free for clubs and players.
💡 Tap any time to mark a 1.5-hour match window — one tap fills the whole block.
Your matches
Your open games
Your upcoming availability
✅
Great — your availability is saved!
Now follow these two steps to find and book your matches:
👥
Everyone's Availability
See at a glance who's free and when. If someone hasn't filled in yet, use the WhatsApp chase button to send them a reminder.
Everyone's Availability
⚠️ Still waiting on:
🎉
Everyone has submitted!
Head to the Match Finder tab to see available times.
🎾
Match Finder
The app automatically finds times when all players in a match are free. Tap a time slot to book it. Share the summary via WhatsApp with one tap.
🏆
Results & Standings
Record match scores and track who's top of the box. The league table updates automatically as results are entered. Points: 3 for a win, 1 for a loss, 0 for not played.
🏆 League Table
Match Results
🎾
Friendly Matches
Need players for a game? Create an open match and other players can join. Book a court, set the date and time, and watch the slots fill up!
💡Create a game to find players, or Join an existing game below.
Comments & Feedback
📜 What's New
v4.16 · 6–7 May 2026BOOKING FLOW + PADEL
🎾 New “Booked” tab in every league — focused list of every confirmed match, sorted by date, with one-tap Confirm date / Mark court booked / Enter score / Calendar / Share / Copy. Stops bookings getting buried under Match Finder’s suggestion slots
🎾 “My matches” in the ☰ menu — cross-league view of every upcoming booked match you’re in, accessible from anywhere. Solves “I just booked a match, where did it go?”
💬 Share to WhatsApp + 📋 Copy on every match card. Message includes opponent, date, time, court status, court number, notes, confirmation count, and the booking URL so the recipient can act on it without chasing you for details
🏘 “Your club” pinned link in the menu — one tap from any screen back to your scoped club welcome and the Club Organiser Tools panel
Auto-saves your home club when you arrive via a club link. Lose the link? The bare URL still drops you on your club
PadelLevels System 7 scoring for padel clubs: Win 2-0 = 6/2, Win 2-1 = 5/3, Walkover = 2/0, plus a +2 completion bonus when you play all your fixtures (forfeit the bonus if you concede a walkover)
Bulk-add players across multiple boxes in one paste — [Box Name] headers route each section to the right league. Paste a roster split by box, app handles the rest
Padel-only / doubles-only clubs get pre-filled and locked-down create-league forms. Sport / format / deadline default to the club’s setup so admins type just the box name
Full-name convention across all input placeholders + smart truncation (Jane D. & John S.) in standings on mobile to keep team rows scannable
Fix: Confirm date no longer says “booked by someone else” on a match that’s already booked. Same for Mark court booked — both updates run cleanly through the same anti-double-booking guard
Cleaner first-time experience — the generic 5-step tutorial no longer fires for users arriving via a club link, and the April-release video popup auto-stop has gone (still accessible from the menu if you want it)
v4.15.2 · 21 Apr 2026POLISH & FIXES
Auto-recognise your club on sign-in — sign in from any link and the app takes you straight to your home club’s page. No need to remember the club link URL
Cleaner layout — removed the floating Help/New/Feedback widget (was covering app content on mobile) and the “App in active development” banner. All those actions are still in the ☰ Menu
🏠 Home button always takes you to the main welcome screen with Box Leagues + Mix-Ins picker. Consistent everywhere
League codes deprecated — everyone joins via club links now. “Got a code?” entry box and “League code: XYZ” display removed from all screens
“Your Leagues” list removed from main welcome — your home club’s welcome page is your home. Your leagues show there with ✓ JOINED tags
Better empty states — “Your matches to arrange” card now shows helpful guidance when empty (instead of vanishing)
v4.14.1 · 20 Apr 2026HERO + SCORE ENTRY
🎾 “Coming up next” hero card — green banner at the top of every league screen showing your next booked match: opponent, date, slot, court status, and three one-tap buttons (Confirm date / Calendar / Enter score). Answers “where’s my match?” in zero taps
🏆 Enter Score button on My Matches card — you can now record scores directly from the Availability tab, not just from Match Finder. Score shows inline once entered
🏠 Home button in top bar — was just the logo before; now an explicit labelled button so you always know how to get back
🤝 New Mix-In Game button on the Club Organiser Tools panel — create a mix-in directly from your club welcome screen
Guided setup fixed — organisers signing in without a club link can now create their first league (was silently failing since an earlier release)
20+ bug fixes & security hardening behind the scenes — silent-failure writes, XSS vectors, ungated admin functions. All closed. No UI change, just more robust underneath
v4.13.0 · 18 Apr 2026AI ASSISTANT
🤖 AI Availability Assistant — new purple card on the Availability tab. Type a natural-language description like “every day except Tuesday” or “weekday evenings after 6pm” and the AI fills your availability grid
Supports: broad categories (every day, weekdays, weekends, anytime), specific days (Tuesday and Thursday), exclusions (except Friday, not on Mondays), time ranges (mornings, evenings, after 6pm, 7-9pm), and combinations (weekday evenings after 6pm)
Runs locally — no API calls, instant response, free forever. Works offline. Your descriptions never leave your browser
Module-gated — only clubs with the AI Assistant module enabled see the prompt card. Contact us to enable it for your club
v4.12.0 · 18 Apr 2026MODULES
Per-club module system — clubs can now opt in to premium features (Scoring & Tables, AI Assistant) on top of the free core features (Match Finder, Mix-In Games)
Modules set at club setup — when a club is provisioned, admin picks which modules are enabled. Contact us any time to add or remove a module
Clean experience — clubs only see the tabs and features they’ve opted in to. No confusion, no clutter
v4.11.0 · 16 Apr 2026SCORING
🏆 Scoring & Tables module — brand-new Results tab with a live league table that updates automatically as scores are entered
Per-set scoring — enter 6-3, 4-6, 7-5 and the app works out the winner, sets won, games won, and points
Points system — Win = 3 pts, Loss = 1 pt, Not played = 0. Tiebreakers: points → set difference → game difference
🏆 Enter Score button added to booked matches in Match Finder. Score shown inline on the match card once entered
WhatsApp share — one tap sends the current standings table and recent results to your group
Module-gated — only clubs with the Scoring & Tables module see the Results tab
v4.10.1 · 16 Apr 2026POLISH
Auto-generate team names — when adding a doubles team, just enter Player 1 and Player 2. The team name is created automatically as “Player 1 & Player 2”
Full name placeholders — forms now suggest full names (e.g. “Grant de Swardt”) so teams are consistent across the league
Smarter singles leagues — Player 2 field hides automatically for singles leagues
Customer services number added — +44 7782 219066 visible in the footer, new Contact Us menu item with phone, email, and website
Admin console redesigned — user cards now show player name, partners (doubles and mixed separately), and club. League cards have a Manage button that expands to show all teams and members
v4.10.0 · 16 Apr 2026SIMPLIFIED
Club search removed — your club is now set automatically from your club link. No more searching or selecting a club anywhere in the app
Profile now shows your name — Player Name field always pre-populates with your name from Google sign-in
Email shown on profile — your signed-in email address is now displayed below your photo
Browse screen simplified — “Find your club” and “Add a League” cards removed. League code entry kept for direct joins
v4.9.8 · 16 Apr 2026RENAME FIX
Atomic league rename — renaming a league in Settings now updates ALL places the name is stored in a single atomic write: /leagues/{lid}/info/name, /leagues/{lid}/settings/leagueName, /clubLeagues/{clubId}/{lid}/name, /leagueIndex/{lid}/name, and every member’s /userLeagues/{uid}/{lid}/name
Previously: only the league itself and the current user’s /userLeagues entry were updated — club listings, the global index, and other members’ “Your Leagues” views all showed stale names
v4.9.7 · 15 Apr 2026ADMIN FIX
Fix: super admins are no longer auto-joined to leagues they seed — when the super admin created leagues on behalf of a club they don’t play at, the creation code was writing them into /leagues/{id}/members AND /userLeagues/{uid}, so every seeded league ended up in their personal “Your Leagues” list and they appeared as a member of the roster. Both createLeagueInClub() and the scoped mirror scopedSubmitCreateLeague() now detect super-admin-only creators (isAdmin() && !_clubAdminFor.includes(clubId)) and skip those writes entirely
Local club organisers are unaffected — they’re still auto-joined to their own club’s leagues, because they typically play in them. Only the super-admin-seeding path is silenced
Ghost cleanup — 9 pre-existing ghost memberships (Grant at East Grinstead Tennis, Squash & Racketball Club) swept from /leagues/{lid}/members and /userLeagues/{uid} via the Firebase Admin SDK. League info, organiserUid, and all legitimate members are untouched
Activity log marker: super-admin-seeded creates now log as create_league_super_seed / create_league_scoped_super_seed so future audits can distinguish them from normal creates
v4.9.6 · 15 Apr 2026WELCOME CARD
New welcome hero card — one clean “Box Leagues” card with a fresh photo overlay that reads “Join a Singles or Doubles Box League · Tennis · Padel · Squash · Badminton”. Makes it obvious up front that the app supports both singles and doubles without confusing players with two near-identical cards (the v4.9.5 layout)
Image: new images/box-league-card-sm.jpg generated from the high-res doubles photo, with the old baked-in doubles-only caption cropped out and a new dark gradient + headline rendered over the bottom. The two-image v4.9.5 layout is rolled back
v4.9.4 · 15 Apr 2026HELP REFRESH
All help content rewritten for the current system — the FAQ, How it works, welcome overlays, guided tour, explainers and in-app edu-tips were all written before the club sandbox existed. They now describe club links (?club=), the three-tier role model (player / club organiser / super admin), the apply.html flow, the Club Organiser Tools panel, bulk add players, and club-admin-controlled league deletion
FAQ expanded to 25 questions — new entries for "What is a club sandbox link?", "How do I get my club added?", "How do I create a league?", "How do players join?", "Can I add other organisers?", "Can I delete a league?", and "What roles exist and who can do what?"
"How it works" expanded from 3 to 4 steps — now walks through Get your club set up → Share the club link → Create leagues & bulk add players → Find & book matches
Guided tour has a new Club Link + Club Organiser Tools step so first-time organisers see exactly what the scoped welcome and the tools panel do. Tour is now 7 steps instead of 6
Setup edu-tip is now format-agnostic — no longer assumes singles leagues, mentions Bulk Add Players, and explains the invite link flow
No code changes — purely a help content refresh. All v4.9.3 bug fixes remain in place
v4.9.3 · 15 Apr 2026AUDIT & FIXES
Fix: Ladies Singles Premier now shows the SINGLES badge — the scoped club welcome had its own local badge helper that only looked at the explicit format field, so legacy leagues (created before v4.7.3) fell through to DOUBLES even when the name said "Singles". Scoped badges now use the same full detection the rest of the app uses (format → sport → name heuristic)
Fix: email keys are now always lowercased — sanitizeEmail previously only replaced dots, so signing in as Grant@x.com vs grant@x.com would write to two different Firebase keys, orphaning the second membership. Now trimmed + lowercased + null-safe. One legacy inline duplicate in adminDeleteUser was also routed through the helper
Fix: super admin check is now case-insensitive — isAdmin() used a literal .includes(currentUser.email), so Grant would lose super-admin if his email came back mixed case from a future auth provider. Normalised to lowercase before comparing
Defense-in-depth permission gates on removeMember, resetLeagueData, unbookMatch, and clearAllComments. These were previously only protected by the UI, meaning a player on the browser console could still trigger them. They now all check isAdmin() or league organiser role before touching Firebase. Players can still cancel their own bookings via unbookMatch
No data migration needed — existing keys were already lowercase in practice (Google auth normalises), so this release is safe to hot-deploy. Bill's league, the scoped sandbox, and all existing memberships work exactly as before
v4.9.2 · 15 Apr 2026ADMIN ROLES
Single super admin — grantdeswardt@gmail.com is now the only global admin with override rights on every club. All other organisers are local club admins only — they can manage their own club but have no access to other clubs, global settings, or the admin console
Firebase security rules tightened — /clubs, /clubAdmins, /clubApplications, /userLeagues and /activityLog all now check against the single super admin email. Local club admins are unaffected — they continue to manage their own club through the Club Organiser Tools panel
v4.9.1 · 15 Apr 2026HOTFIX
Club organisers no longer get auto-joined as players — when a club organiser clicks a league they're not a member of from the scoped welcome screen, they now land in the league as organiser without writing a /members record or running the partner-onboarding wizard. New in-memory adminEnterLeague() path. Unjoined leagues get an amber 🔐 ORGANISER VIEW tag so it's obvious which action you'll get
The v4.9.0 bug fixed here: clicking Bill's league as a club admin in v4.9.0 wrote a player membership and asked for your doubles partner. That's now gone
v4.9.0 · 15 Apr 2026
Player onboarding on scoped club links — when you land on a ?club= link for the first time, your league list is split into Your Leagues (with a green ✓ JOINED tag) and Join a League. Brand-new players see a 👋 welcome card prompting them to tap and join. No more hunting for the right league or not knowing whether your organiser has added you already
Club admins can now delete leagues in their club — every league card in the scoped welcome has a small 🗑 button when you're a club organiser. Delete still asks for two confirmations and cascades through /leagues, /clubLeagues, /userLeagues, /leagueIndex and /codes properly
Manage Organisers modal — new button in the Club Organiser Tools panel. Lists every current club admin for your club, lets you add new ones by email, and remove any organiser (except yourself). Promotes or demotes are live — the next time that person signs in they get the Club Organiser Tools panel automatically. All changes are logged to the activity feed
Super admin badge — the scoped welcome now shows a purple SUPER ADMIN pill when you're signed in as the global admin (grantdeswardt@gmail.com). Makes it obvious when you're viewing someone's club with full override rights vs. just as a club organiser
v4.8.0 · 15 Apr 2026BIG ONE
Club sandbox links — every club now gets its own short link like ?club=east-grinstead-tennis. Players who click it land straight in their club's welcome screen with their box leagues and mix-ins listed and nothing from other clubs in the way. No more hunting through the clubs list
Apply to add your club — a new public form at /apply.html lets organisers request a club sandbox in 30 seconds. We review the application and send a dedicated link back by email
Club organiser tools — if you're a designated clubAdmin, the scoped welcome shows a Club Organiser Tools panel with one-tap New League, Bulk Add Players and Share Club Link buttons. No need to understand the admin console
Bulk add players — paste a list of players (or doubles teams with &) into a league in one go. Supports name-only, name+email, and team pairings like Jane, jane@x.com & Bob, bob@x.com
Admin: club provisioning panel — create new slug-keyed club sandboxes, assign clubAdmins by email, and attach slugs to existing push-key clubs (so Bill's existing league keeps working with a friendlier share link)
Admin: application queue — pending club applications show up in Admin → Applications. One-click Approve & Provision pre-fills the provisioning form from the application
Zero data loss rebuild — v4.8.0 is fully backwards compatible. Existing clubs, leagues, users and bookings are untouched. Your old bookmark still works exactly as before. Bill's league, East Grinstead, and the 10 International pilot are all safe
v4.7.3 · 15 Apr 2026
Fix: singles leagues stop asking for a doubles partner — Create League now has an explicit Format picker (Singles / Doubles / Mixed Doubles). When a singles league is created the join wizard and profile no longer prompt for a partner. Legacy leagues still work: if the name contains "Singles" the app now treats it as singles automatically
Format auto-detect — typing "Men's Singles Box 3" into the League Name field automatically flips the Format picker to Singles. Typing "Mixed Doubles" flips it to Mixed. You can override at any time
Admin: spot league-named "clubs" — the admin club list now flags entries that look like league names (e.g. "Mens Singles Box 5") and sorts them to the top so they're easy to clean up
Warn before creating a league-named club — if someone types "Box League 5" into the club field, the app now explains the difference and asks them to confirm
Clearer club placeholder — "Search for your club (venue)" makes it obvious this is the place, not the competition
Simpler welcome screen — just two choices now: Box Leagues and Friendly Mix-Ins. No more format filter page to click through
Format badges on every league — every league card shows SINGLES, DOUBLES or MIXED DOUBLES at a glance so you always know what you're joining
Fix: singles leagues not loading — the old format filter was hiding some tennis singles leagues. Removed entirely
Admin console from the top menu — clicking Admin Console in the menu now opens the console from anywhere, not just the Browse screen
Doubles + Mixed Doubles partners — your profile now remembers both a doubles partner and a mixed doubles partner, so you don't have to retype when you join a new league
New sticky top menu bar — always visible at the top of the app so you can see where you are and jump anywhere in one tap
Full menu system — Home, Browse leagues, all league tabs, Add a match, My profile, Help, What's new, Feedback & Sign out all in one place
Add a match arranged outside the app — if you've agreed a game face-to-face or on WhatsApp, record it here so reminders, WhatsApp sharing and calendar invites all still work
One-tap 1.5-hour slot selection — tap a single time and the full match window is selected automatically (saves two clicks per slot)
Legacy availability auto-fix — old 1.5-hour availability slots are silently upgraded to the new 30-minute format on load
12 Apr 2026
Edit open/mix-in games — creators can now edit title, date, time, venue, sport, level and notes after creating a game
Add players to games — add other players to your open games directly without them needing to join themselves
Development notice banner — see what's new and send feedback easily
This changelog! — track all the latest updates in one place
11 Apr 2026
30-minute time slots — book courts in 30-min intervals from 7am to 9pm (was 1.5hr blocks)
Edit booked matches — change date, time, court number and add notes to existing box league bookings
Email sharing — share league invites via email with pre-filled subject and body
In-app FAQ — 20 frequently asked questions in the Help section
10 Apr 2026
Welcome screen photos — premium card images for singles, doubles, and mix-in game types
Mobile image optimisation — compressed images load fast on all devices
Image fallback text — cards still show labels when images don't load
Paste players one per line. Each line is a full name (first + last), or full name, email. For doubles, write teams as Jane Doe & John Smith or Jane Doe, jane@x.com & John Smith, john@y.com. Full names matter — they keep "Mike A" separate from "Mike B" once your club grows past one box.
Used for any line that isn't under a [Box Name] header. To split a roster across multiple boxes, see below.
Tip: add [Box Name] headers in your paste to split players across multiple boxes in one go. Box names must match leagues that already exist at this club.
Manage club organisers
CURRENT ORGANISERS
Loading…
Add a new organiser by email
The organiser will get the full Club Organiser Tools panel next time they sign in with this email.