Admin Guide

Water Polo Club Management — Admin Guide

Set up your water polo club, manage tournament schedules, run live scoring, and keep parents informed — all in one place.

1

Getting Started

What is Eggbeater?

Eggbeater is a tournament management platform built for water polo clubs and high school programs. Your admin panel is where you build schedules, manage rosters, communicate with spectators and families, and run live scoring — all from your phone or laptop.

Spectators and admins can access Eggbeater via our mobile-optimized web app or by downloading the Eggbeater native app for iOS or Android.

Open the Admin Panel

Go to eggbeater.app/admin.html?club=your-club-id in any browser. Bookmark it for quick access.

Sign In with Google

Tap Sign In with Google and use the Google account that was authorized by your club's platform admin. Your email must be on the approved admin list.

Select Your Age Group

Use the age group pills at the top of the screen to switch between teams (e.g., 14U Girls, 16U Boys). Each age group has its own schedule, roster, and tournament data.

Start Building

Add your games, import your roster, configure settings, then hit Save & Deploy to publish everything to the spectator app instantly.

💡

Tip: The admin panel works great on mobile. You can manage everything from the pool deck on your phone.

2

Your Dashboard

The Header

The header bar is your command center. It shows your club name, the current tournament, and the active age group. Here's what each piece does:

  • Age Group Pills — Tap to switch between teams. A colored dot shows each team's status (green = live, red = draft, gray = no data). The list now wraps for better visibility on mobile.
  • Tournament Library — In the "+ Games" tab, manage your private library of tournament drafts. Save entire workspace snapshots (games + rosters) to swap between tournaments easily.
  • Save & Deploy Button — Saves and publishes your currently active workspace to the spectator app instantly.

Navigation Tabs

The admin panel is organized into tabs. On desktop/tablet, all tabs are visible directly in the left sidebar — no More button needed. On mobile, the primary tabs (Schedule, Roster, Games) are in the bottom bar, and the remaining tabs are one tap away via the More button:

Schedule Roster Games More … (mobile)
ScheduleView and manage the current game schedule for the selected age group
RosterAdd players, import from spreadsheets, manage cap numbers
GamesTournament settings, add/edit games, clock config, multi-team mode, templates, brackets
Club InfoOrganization type, logo, branding, admin management, join links
CommunicationPush notifications, announcements, Telegram/GroupMe/TeamSnap bots
ArchiveSeason dashboard, past tournament records, stats
HistoryTournament results, MaxPreps import (high school)
3

Club Setup

First-Time Setup Checklist

When you first access your club's admin panel, complete these steps to get everything configured:

  1. Set Organization Type — Go to Club Info and choose "Club / Age Group" or "High School". This changes the age group labels (10U-18U vs. Varsity/JV).
  2. Set Club Name — This appears in game cards as "Pacific Waves vs. NorCal Gold". Leave blank to use the default "vs." format.
  3. Set Branding Colors — Pick your club's primary and secondary colors so the spectator app matches your brand.
  4. Upload Club Logo — A square image under 150KB. Shows in the app header and game cards.
  5. Share the Join Link — Copy your club's spectator link from Club Info and share it with families. They'll open it in a browser to follow your team.
📱

Spectator Link: Your club's app URL is eggbeater.app/?join=your-club-id. Spectators open this link, pick their age group, and they're set. No account required.

4

Schedule & Games

Adding Games

Go to the Games tab to build your tournament schedule. You have several options:

  • 🏟️ Hosted Tournament / Tournament DirectorRecommended for tournaments. Import the hosted tournament package from the director or use T-Score when the event provides it. This is the cleanest path for bracketed events, rebracketing, and shared tournament data.
  • 📊 Bracket Sheet Sync — Use this for standard Google Sheet imports when the sheet has separate tabs or a normal layout.
  • Futures Bracket Import Wizard — Use this for Futures sheets that share one tab across multiple age groups and separate them by legend colors.
  • Tournament Library — Save your current "Workspace" (games and roster) as a named draft. You can build these in advance and load them when needed.
  • + Add Game — Add games manually with opponent, time, location, pool, and cap color.
  • Start Fresh — Use the "✨ Start Fresh" button to clear your current workspace games and roster without affecting your saved drafts or the live site.
  • Paste Schedule — Paste a full schedule from a spreadsheet (Google Sheets, Excel).
  • Clone from Archive — Reuse a past tournament's structure (games/roster) with scores cleared.

🏟️ Hosted Tournament First, Then Pick the Right Sheet Wizard

For most tournaments, start with the hosted tournament flow: the tournament director publishes the event package and team admins import it with the share code. Use the standard Bracket Sheet Sync when the event is only sharing a normal Google Sheet. Use the Futures Bracket Import Wizard when the tournament is sharing a mixed-age Futures sheet with color legends.

🏆

Current recommended tournament flow: Ask the tournament director for the hosted tournament package or T-Score share code first. That path carries the full tournament structure more cleanly, especially for divisions, crossover games, and rebracketing. If the event only distributes a Google Sheet, use the standard Bracket Sheet Sync for a normal sheet and the Futures wizard for mixed-age Futures tabs.

If you do receive a Google Sheet from the tournament director, you can still pull your team's schedule directly from it — no copy-pasting required. The app re-checks the sheet on a schedule and now updates games, official final scores, resolved next opponents, venue, and cap color from that sheet when the data becomes available.

💡

Before you start: Standard Bracket Sheet Sync works with a public viewable sheet. The Futures wizard uses Google Sheets API access, so the admin signs in with Google during setup and the testing account must have access to the sheet.

Step 1 Paste the Google Sheets URL
Copy the full URL from your browser (or the link the tournament director sent you) and paste it into the field. Tap Next →.
Step 2 Enter the pool seedings range
This is the grid on the sheet that lists which teams are in which pools. Enter the cell range (e.g. J3:M6). If the first row of that range contains pool names like "Pool A / Pool B / …", the app picks them up as headers automatically. Tap Fetch Pools → and you'll see a preview grid of all pools and seeds.
Step 3 Find your team
Type your team name exactly as it appears on the sheet (e.g. Diablo). Tap Find My Team →. The app highlights your team in the pool grid and confirms your pool and seed (e.g. "✅ Found: Pool B, Seed 2"). It then automatically scans for your games.
Step 4 Review your games
The app scans the schedule columns (Date / Location / Time / White / Blue) and finds every row containing your team name. It automatically sets cap color based on which column your team appears in — White cap if you're in the White column, Dark if you're in the Blue column. That same white/blue logic is reused later when the sheet resolves the next bracket game. Review the list and tap Continue.
Step 5 Re-bracket (Day 2 advancement)
If the tournament has a second day where teams advance based on pool results, tap Yes, it does. Enter the cell range that shows the bracket paths (e.g. J13:M29) and tap Fetch Re-bracket →. If it's a one-day tournament, tap No, single day.
Step 6 Set the auto-sync interval
Choose how often the app should re-check the sheet for changes — every 5, 10, or 30 minutes, or manual only. Tournament directors sometimes update game times, locations, final scores, or resolved bracket opponents the morning of the event; auto-sync keeps schedule, history, and next-game cards aligned with the official sheet. The wizard now preserves its draft, shows you the detected changes before deploy, and lets you compare before you push them live.
Step 7 Deploy to the app
Review the summary (games found, pool, re-bracket, auto-sync interval) and tap 🚀 Deploy to App. The games go live immediately and the admin panel switches to the Schedule tab so you can review. If you have auto-sync enabled, the app keeps checking the sheet in the background.
⚠️

Finding the right cell ranges: Open the Google Sheet, click the top-left cell of the pool grid and note the cell reference in the top-left of the sheet (e.g. J3), then click the bottom-right cell (e.g. M6). Your range is J3:M6. The same method works for the re-bracket range.

🎨

Futures color-aware import: The dedicated Futures Bracket Import Wizard now handles mixed-age shared tabs, merged or offset legend labels, Google sign-in, malformed row corrections, venue confirmation for directions, and follow-on path detection. It also auto-generates the tournament ID so later syncs stay attached to the correct event.

📅 Calendar Subscribe Feed

After deploying games through NJO Mode, spectators can subscribe to a WebCal calendar feed that auto-updates in Google Calendar, Apple Calendar, or Outlook.

  • How it works: After NJO Mode deploys, a webcal:// link appears. Copy and share it with spectators and families (e.g. in a group chat). They tap the link once to subscribe — all games appear as calendar events immediately.
  • Auto-updating: The feed refreshes every 5 minutes. As bracket opponents are confirmed, game titles update automatically (e.g. "Bracket Game TBD" becomes "vs. San Clemente Red"). Times and locations also update if the director changes them.
  • Calendar name: You name the calendar in Step 4 of the NJO wizard (e.g. "14u Girls NJO 2026 — 680 Drivers"). This name shows in the parent's calendar app.
  • Works everywhere: Google Calendar, Apple Calendar (iPhone/Mac), Outlook, and any app that supports iCal/WebCal feeds.

📱 What Spectators See — Live Activities, Widgets & More

These features are automatic — once you deploy games, spectators get access to all of them with no extra setup on the admin side.

  • Live Activities (iPhone) — During a live-scored game, the score appears on the iPhone lock screen and in the Dynamic Island with team logos, a running clock, and a live event feed. Auto-starts when scoring begins, stays in sync with remote updates, and auto-ends on Final.
  • Live Updates (Android 16) — A persistent notification chip shows the current score (e.g. "Q2 7–5") and updates on every poll tick. Requires Android 16+ with notification permission granted.
  • Home Screen Widgets — Spectators can add Score, Schedule, and Stats widgets to their home screen on both iOS and Android. Widgets update automatically as games progress.
  • Calendar Subscribe — Spectators subscribe once to the WebCal feed and all games appear in their calendar app, auto-updating as the bracket resolves. See Calendar Subscribe Feed above.
  • Offline Scoring — Scorers can enter scores even with no internet. Goals queue locally and sync automatically when connectivity returns.
💡

Tip for admins: Let your spectators and families know these features exist! A quick message in your group chat — "You can add a widget or follow the game on your lock screen" — drives adoption.

🏆 NJO Mode — National Junior Olympics

NJO Mode is a dedicated wizard for USA Water Polo's National Junior Olympics — a 4-day, multi-bracket tournament with a complex advancement structure. It reads directly from the MASTER BY DIVISION sheet that USA Water Polo posts each year, which contains every game for every division in a single tab.

💡

When to use NJO Mode vs Bracket Sheet Sync: Use NJO Mode when you have the USA Water Polo MASTER BY DIVISION sheet. Use the regular Bracket Sheet Sync wizard for all other tournaments. NJO Mode auto-detects the sheet format — if it sees the GMID division column it knows it's an NJO sheet.

Step 1 Paste the NJO sheet URL
Open the MASTER BY DIVISION tab in the USA Water Polo sheet, copy the full URL (including the #gid=… at the end), and paste it into the field. Tap Detect NJO Format →. The wizard fetches the sheet, finds the GMID column, and lists all available division codes (e.g. 12G, 12GX, 14G, 14GX).
Step 2 Configure Team A
Select your division from the dropdown — the labels decode automatically (e.g. 12G = 12U Girls Championship, 12GX = 12U Girls Classic). Enter your team name exactly as it appears in the White or Dark columns on the sheet (you can omit the pool-seed prefix — e.g. just San Clemente Red not B1(2)-San Clemente Red). Tap Find Team A & Scan All Games →. The wizard finds all group play games for your team and traces the full bracket tree using the W to # / L to # advancement columns.
Step 3 Configure Team B (optional)
If you're bringing two teams to NJO (e.g. Team A in 14G Championship, Team B in 14GX Classic), tap Yes — add Team B and repeat the same configuration. Each team gets its own bracket in the spectator app — spectators tap A or B to switch.
Step 4 Name the spectator calendar & set sync frequency
Enter a name for the spectator calendar subscribe link — something specific like 14u Girls NJO 2026 — 680 Drivers. This is what spectators see when they subscribe. Then choose how often to auto-sync (every 5 minutes is recommended during NJO since bracket opponents get confirmed quickly after pool play).
Step 5 Deploy to app
Review the summary and tap 🏆 Deploy NJO to App. Two things happen: (1) Group play games go live in the Schedule tab immediately with real opponents, times, and locations. (2) The Bracket tab populates with all possible games your team could play, organized by tournament day. After deploy, a 📅 calendar subscribe link appears — copy and paste it into your team chat. Spectators tap it once to add the schedule to Google Calendar, Apple Calendar, or Outlook. The calendar auto-updates every 5 minutes as bracket opponents are confirmed.
📅

Spectator calendar updates: Bracket games start as "Bracket Game TBD — Gm 125". As auto-sync confirms opponents (e.g. Winner of Gm 97 is resolved to San Clemente Red), the calendar event title updates automatically on every calendar app that subscribed. Spectators don't need to do anything — their calendar just updates.

⚠️

GMID codes explained: The division code format is {age}{gender}{bracket}. Gender: G = Girls, B = Boys, C = Coed. Bracket: no suffix = Championship, X = Classic. Examples: 12G = 12U Girls Championship · 12GX = 12U Girls Classic · 14B = 14U Boys Championship · 10C = 10U Coed Championship.

Game Fields

OpponentTeam you're playing (e.g., "NorCal Gold")
DateGame date — shown on game cards in the spectator app
TimeStart time (e.g., "8:30 AM")
LocationVenue name — spectators can tap for Google Maps directions
PoolPool play group (e.g., "Pool A") or bracket round (e.g., "Semifinal")
Cap ColorWhite or Dark — shown on game cards so spectators know what cap to bring

Tournament Settings

In the Games tab, configure your tournament details:

  • Tournament Name & Dates — Shown at the top of the spectator app.
  • Coming Soon Message — A placeholder shown to spectators before you've added games (e.g., "Schedule will be posted Wednesday").
  • Scoring Password — Optional. If set, scorers must enter this password to submit live scores.
  • Clock Settings — Quarter length, breaks, halftime, and timeout configuration for the live scoring clock.

Upcoming Mode

Toggle a game to Upcoming Mode to show tournament info (name, dates, venue) without revealing the full schedule. Useful when you know the tournament but haven't finalized games yet. Spectators see the coming soon message instead of an empty schedule.

⚠️

Remember: Changes aren't visible to spectators until you Save & Deploy. You can edit freely without affecting what spectators see.

5

Roster Management

Adding Players

Go to the Roster tab to manage your team's players. Each player has a cap number, first name, and last name.

  • + Add Player — Add one player at a time.
  • Paste from Spreadsheet — Paste roster data from Google Sheets or Excel. The parser auto-detects columns by header (Cap/#, Name, Position).
  • Upload CSV — Import a CSV file with the same column detection.
  • Sync from Google Sheets — Enter a Google Sheets URL and sync your roster directly. Expected columns: Team, Cap #, First Name, Last Name.

Multi-Team Rosters

If your age group has multiple teams (A/B/C), each team has its own roster section. Players are assigned to a specific team. You can customize team labels in the Games tab → 🏊 Multi-Team Mode section (e.g., "Red" and "Blue" instead of "A" and "B"). Requires Club Plan.

Exporting

Tap Export Roster CSV to download your roster as a spreadsheet file. The file is named with your club ID and age group (e.g., pacific-waves-14u-girls-roster.csv).

🏟️ Inline Roster Editor (Tournament Hosts)

When you're hosting a tournament, every registered team gets a card in the Tournament Director tab with its own inline roster editor — no need to bounce between the team admin's app and yours. Each team card shows:

  • Cap # · First · Last rows you can edit in place, plus an Add Player row at the bottom of every card.
  • Paste from spreadsheet directly into the team's roster — the parser auto-detects columns the same way it does for your own roster.
  • A dirty-state indicator on each team card so you always know which rosters have unsaved edits.

Auto-refresh suspension: the moment you start editing a team's roster, the dashboard's auto-refresh pauses for that card so an incoming poll can't overwrite the cap numbers you're typing. Auto-refresh resumes after you save. If the poll does arrive with a newer roster while your edits are pending, the app preserves your draft and offers Restore my changes so you don't lose work.

💡

Why it matters: Tournament directors used to have to call the team coach or wait for them to redeploy when a cap number was wrong. Now you can fix it in seconds from the host cockpit, and the change broadcasts to every spectator within 5 seconds.

6

Deploying Changes

How Save & Deploy Works

The 💾 Save & Deploy button is the most important button in the admin panel. Here's the workflow:

  1. You make changes in the workspace (add games, update roster, change settings).
  2. Changes are saved as a draft but not yet visible to spectators.
  3. Option A: Tap the main 💾 Save & Deploy button (top-right header) to publish your current data.
  4. Option B: Go to the **Schedule** tab and tap **Deploy to Live** on any saved draft in your library.
  5. Changes go live instantly — the draft replaces the active site data and triggers the live update.

Safe to experiment: Until you deploy, spectators see the last deployed version. Edit freely, preview everything, then deploy when it looks right.

When to Deploy

  • After adding or editing games
  • After updating the roster
  • After changing tournament settings or coming soon message
  • After entering scores (if not using live scoring)
  • After switching to/from Upcoming Mode

You don't need to deploy after: changing club info/branding (saves automatically), sending push notifications, or managing admin access.

7

Tournament Lifecycle

Create → Build → Activate → Archive

CreateTap the tournament selector and choose "+ New Tournament". Give it a name and ID.
BuildAdd games, import roster, set clock, configure settings. Deploy when ready.
ActivateMark the tournament as "Active" so it's the one spectators see. Only one tournament per age group is active at a time.
ArchiveAfter the tournament ends, archive it. Results are saved permanently and show up in the Season Dashboard and player stats.

Brackets

If your tournament has bracket play after pool play, use Auto-Populate Bracket in the Games tab. It analyzes pool play results, ranks teams by record and goal differential, and maps them to bracket seeds. You can review and manually adjust seeds before applying.

Templates

Save any tournament structure as a reusable template with Save as Template. Next time you set up a similar tournament, load the template and your games, bracket format, and structure are pre-filled — just update dates and opponents.

🏟️ Tournament Director Cockpit

If your club is hosting a tournament (not just attending one), the Tournament Director tab is your event control center. From here you build the event package, publish it to participating teams, and monitor every game live throughout the weekend.

The cockpit is split into three workspaces:

  • Setup — Tournament name, dates, venues, age groups, divisions, pool seedings, and game schedule. You can build the full structure here or import an existing template.
  • Teams & Rosters — Every registered team appears as its own card with the inline roster editor (see Section 5). Add or remove teams, accept invites, and fix cap numbers without leaving the page.
  • Live Dashboard — The full tournament-wide live view that you watch during the event itself.

📤 Publishing the Event & Share Codes

When the tournament structure is ready, tap Publish Event in the Tournament Director Setup workspace. The platform generates a 6-character share code (e.g. K7M-3QP) that participating team admins enter in their own admin panel under Hosted Tournament → Import by Code.

  • The share code carries the full tournament package — pools, divisions, game format, bracket structure, venues, divisions, and seedings.
  • Re-publishing pushes updated games and brackets to every team that imported the code, so rebracketing or schedule fixes propagate automatically.
  • Share the code in a single email or group chat. Each team admin pulls the package once; spectators of those teams then see the live tournament without doing anything extra.
🏆

Why share codes beat sharing a Google Sheet: Sheets need every team admin to set up the import wizard correctly, and one bad cell range breaks the import for that team. The hosted package is the canonical source — one click, every team aligned, rebracketing handled centrally.

📊 Live Dashboard — What Each Tile Means

During the event, the Live Dashboard in the Tournament Director tab is your operations view. Tiles update in real time as scorers at each pool record events:

Spectators WatchingHow many devices currently have a game open. A reasonable proxy for parent engagement and a quick sanity check that your share code reached families.
Games Live NowCount of games with at least one event recorded in the last 5 minutes. Tap to drill into the game cards for any pool that's currently scoring.
⚠ Players Near LimitPlayers with 2 kickouts. Heads-up to the bench coach that one more major foul disqualifies them for the rest of the game. Sorted by team and cap number.
🚩 Players BenchedPlayers who have already accumulated 3 kickouts in a game. They are out for the remainder of that game; the public box score and game card show a 🚩 BENCHED chip next to their cap.
Cross-Team Venue ConflictsTwo games scheduled to start within 10 minutes of each other in the same pool, or one team scheduled to play two games inside 60 minutes at different venues. The dashboard flags both so you can resolve before tip.
Scored CompleteGames that have a referee sign-off. The score is locked and showing on the public tournament page as Final.
Goals BroadcastTotal goal events pushed to spectators during the event so far — a good sense of total tournament activity.

Auto-refresh: the dashboard polls every 5 seconds while you're on the page. If you're editing a team's inline roster, auto-refresh suspends for that team card until you save (see Section 5) so a poll can't overwrite your cap edits mid-keystroke.

🌐 Branded Public Tournament Page

When you publish the event, a public spectator URL is generated automatically:

eggbeater.app/tournament.html?code=K7M-3QP

Anyone with that link sees the live tournament — pools, brackets, schedule, live scores, per-player box scores — with no install or account required. The page also auto-themes to your hosting club's branding via the /club-branding endpoint, so the primary and secondary colors, logo, and header style you set in Club Info → Branding apply automatically. Visiting parents see your tournament, in your colors, on the same domain as the rest of the platform.

This URL is the one you put on registration forms, share in tournament emails, and pin to your club's social media. As games are scored throughout the weekend, the page refreshes every 5 seconds with new scores, bracket advancement, and finalized box scores.

📋 Trilingual Game-Desk Guide (auto-generated per tournament)

Every published hosted tournament gets its own printable Game-Desk Quick Reference guide for volunteer scorers, available in English, French, and Spanish. The guide is generated from the canonical Tournament Scorer Guide and customized with your tournament's name, dates, and clock settings.

  • Available from the Tournament Director tab as a one-click download (PDF or print-ready HTML).
  • Three pages, letter portrait — cover, action-button reference, and finalize/quick-key.
  • Covers Common Penalty vs. Kickout, the 3-kickout BENCHED rule, earned exclusions, modifiers (6-on-5, Counter, Forced Ball Under, Inside 2m), and end-of-game referee sign-off.
  • Set the language in your tournament settings so all game-desk volunteers receive the same version. Need multiple languages at one event? Print all three and stack at each desk.
📖

Print before tournament day. Wi-fi at pools is unpredictable; printed guides at every game desk mean volunteer scorers always have a reference even if their phone signal drops.

8

Running a League Season

The Leagues tab

If your club hosts multi-week league play instead of (or alongside) tournament weekends, the Leagues tab in admin handles the whole season — from setup wizard to publishing a public /leagues/{slug}/ page parents can follow without an account.

Two SKUs cover the two shapes of league:

  • Club League · $99/season — single-club leagues using only your club's teams (internal/rec). Round-robin, single-elim, double-elim, Swiss, weekly pods, pools-to-bracket. Live standings, configurable tiebreakers.
  • Multi-Club League · $249/season — teams from multiple clubs. Inherits every Club League feature, plus cross-club standings, visiting clubs' parents get the spectator page free, sheet write-back, per-division event calendars.

The full setup walkthrough lives in the League Builder Guide — this section just covers what changes inside the admin panel.

Setting up a league

Subscribe to a league SKU

The Leagues tab shows a 👑 crown when your club is entitled and a 🔒 lock otherwise. Subscribe through Settings → Manage Subscription if locked.

Open Set up league

The wizard is a single scrolling form: league identity, divisions & teams, format, schedule preset, points & tiebreakers. Save and close at any point — your draft is preserved locally.

Auto-schedule or import

One weekly preset (game day + start times + minimum rest between same-team games) auto-generates every match. Or import an existing schedule from Google Sheets with reusable column templates.

Publish

A 6-character share code goes live with a public spectator URL. The /leagues/{slug}/ SEO page is auto-generated.

💡

Tournaments and Leagues stack. A club can run a tournament and a league at the same time — they publish under separate share codes and don't interfere. Same admin panel; different tab.

📱

Week-aware Live Activities. League games on iOS lock screens read "Week 3 · vs Stingrays" instead of a generic "next game" — helpful when families are tracking a multi-month season at a glance.

9

Team Communication

Push Notifications

Spectators who enable notifications in the app receive push alerts on their phone. You control what gets sent:

  • Game Day Reminders — Automatic. When enabled, spectators get reminders at 2 hours, 1 hour, and 30 minutes before each game with the opponent, time, and location. Toggle this on/off in the Communication tab.
  • Announcements — Manual. Write a title and message, pick which age groups to notify, then send. Rate limited to 5 per hour.
  • Scheduled Announcements — Toggle "Schedule for Later" to pick a future date/time. The notification sends automatically at the scheduled time.

Subscriber Stats

Tap Load Subscriber Stats in the Communication tab to see how many spectators have notifications enabled, broken down by age group and notification type.

Messaging Integrations

Connect external messaging services to automatically post score updates:

  • Telegram — Add your bot token and chat ID.
  • GroupMe — Add your bot ID.
  • TeamSnap — Connect via OAuth and link your team.

After connecting, score updates and announcements can be sent to these channels alongside push notifications.

10

Live Scoring

How It Works

During a game, a designated scorer opens the spectator app (not the admin panel), taps on the active game, and enters the live scoring view. They can:

  • Tap to increment/decrement scores for each team
  • Run the game clock with quarter tracking
  • Record individual player stats (goals, assists, attempts, exclusions, earned exclusions, and GK Saves)
  • Manage lineups and track playing time per quarter

Score updates push to all spectators watching in real time and can also update the Apple Watch companion app for spectators following the current game. If the scorer loses internet, updates queue locally and sync automatically when connectivity returns.

Scoring Password

Set a Scoring Password in Tournament Settings to prevent unauthorized scoring. Only people with the password can submit live scores. Share it with your designated scorer at each game.

Sharing Results

After a game, spectators can tap Share Result on any completed game card to generate a branded image with the final score. It's sized for Instagram and can be shared directly to iMessage, Instagram Stories, or any social app.

🕐 Clock ON / OFF mode (per-device scorer setting)

Every scorer panel (in both the regular Scores tab and the Tournament Scorer modal) has a small 🕐 Clock: ON pill in the header. Scorers can tap it to flip to 🕐 Clock: OFF:

  • The auto-clock display, Sprint Won, Pause/Resume, Reset Clock, and quarter-break controls all disappear from the panel.
  • Period bar (Q1 · Q2 · ½ · Q3 · Q4 · SO · End) stays, plus all action buttons (Goal, Assist, Excl, Steal, Save, etc.).
  • Events still record real timestamps and broadcast to spectators in real time. The scorer's preference rides along on every broadcast (score.clockMode) so spectator-side surfaces (public tournament page, Live Activity, Watch app, home-screen widget) hide the clock label too — no half-empty 0:00 ghost.
  • Per-device, persisted in localStorage. Tournament desks default to ON; casual / parent scorers usually flip OFF the first time they open the scorer.

As a tournament director, you don't need to do anything special — the toggle is per-scorer-device. If a parent scorer at a side game flips OFF, that game's spectators see no clock; another scorer at the next pool with ON shows clock times. Both scorers' data flows into the same Live Dashboard and Box Scores identically; the only difference is whether clock times appear next to events.

11

Archive & Season Stats

Season Dashboard

The top of the Archive tab shows your club's season record at a glance — overall wins, losses, ties, and win percentage across all age groups. Each age group has its own row with a record summary and color-coded win percentage bar.

Tournament Archive

Every archived tournament is stored permanently with full game results and rosters. Tap any archived tournament to see the detail view with all game scores, roster snapshot, and metadata. You can also load an archived roster back into a current tournament.

Player Stats

In the Roster tab, tap Load Season Stats to see cumulative player statistics across all archived tournaments: games played, goals, assists, steals, ejections, and goals per game. Stats are sortable by any column. Players and spectators can also see these stats in the public app.

CSV Export

Export game results or your roster as CSV files at any time. Files are named with your club and age group for easy organization.

12

Custom Branding

Make It Yours

In the Club Info tab, the Branding section lets you customize how the spectator app looks for your club:

  • Primary Color — Used for the header, buttons, dark-cap game cards, Apple Watch branding, and accent elements throughout the app.
  • Secondary Color — Used for highlights, live accents, the Apple Watch accent strip, and supporting elements.
  • Header Style — Choose between gradient, bold gradient, or solid color.
  • Club Logo — Displayed in the app header and on game cards.

Changes preview in real time as you pick colors. Tap Save Branding when you're happy with the look.

🎨

Pro tip: Use your club's official colors for a polished, professional look. If you're unsure of the hex codes, check your club's website or ask your club coordinator.

How Branding Reaches Spectators

The colors and logo you save in Club Info → Branding are served from the platform's /club-branding endpoint and applied automatically wherever your club appears:

  • Your spectator app (eggbeater.app/?join=your-club) themes from these values on every load.
  • Hosted tournament public pages (eggbeater.app/tournament.html?code=...) auto-theme to the hosting club's branding — so a tournament you host shows up in your colors to every visiting family.
  • Native iOS and Android apps re-fetch branding when they open and apply the same theme.
  • The Apple Watch companion mirrors your primary color in the watch header and accent strip.

Changes to branding don't require a deploy — saving in Club Info pushes the new values immediately and devices pick them up on next refresh.

13

Managing Admins

Adding New Admins

In Club Info, the admin management section lets you control who has access:

  • Invite Link — Generate a one-time invite link and send it to a new admin. They click the link, sign in with Google, and they're automatically added.
  • Add by UID — If you have someone's Firebase UID, add them directly.

Admin Roles

Each admin has a role that controls their access level:

AdminFull access — can edit games, rosters, settings, deploy, and manage other admins.
ScorerLimited access — can only use the live scoring interface. Cannot edit schedules, rosters, or settings.

Use the Scorer role to give a parent access to run the scoreboard at a tournament without granting full admin permissions.

14

Advanced Features

🏆

Tournament Host

Build or import hosted tournament packages with seeding grids, divisions, and game formats. Tournament directors publish the event, and team admins import it with the 6-character code.

📊

Analytics

View subscriber counts by age group, daily page views, and platform growth metrics in the Communication tab.

📱

Dark Mode & Themes

Spectators can choose Light, Dark, or System theme in the app settings. Great for poolside visibility in bright sun or evening games.

History & MaxPreps (High School)

If your organization type is set to "High School," you get a History tab for tracking season-by-season tournament results. Import results directly from MaxPreps by pasting the schedule page URL, or add them manually. History data powers the multi-season record displayed to spectators. The app now also guards against duplicate tournament-history collisions when IDs or repaired imports overlap.

Scored Game Recovery & Official Results

The admin History tools now work from durable scored-game records, mirrored scorer drafts, and server-backed scorer sessions — not just browser-local history. Use them when a scorer closes a game incorrectly, a final score changes on the official sheet, or a tournament needs to be rebuilt cleanly.

  • Scored Games list — review every durable scored game for the selected team
  • Active Scorer Sessions — see which device currently owns a live scorer session and whether it is still active
  • Recovery summary + filters — use the top summary strip plus Needs Action / Show All to focus the admin panel on issues that need immediate cleanup
  • Mirrored Drafts — inspect server-backed scorer drafts when the original device had weak signal, refreshed, or was lost
  • Restore Draft / Clear — rebuild from a mirrored draft or clear a bad server draft without manual KV work
  • Sync Official Sheet Results — pull final scores from the tournament sheet into scored games and history
  • Rebuild History from Scored Games — regenerate tournament history from durable scored-game records
  • Promote Final / Reopen / Reset / Restore — correct bad closeouts without losing the durable source record
  • Needs Finalization — expired games that still require a scorer or admin to submit the final score
15

Tips & FAQ

Common Questions

Q: I made changes but spectators can't see them? A: You need to tap Save & Deploy. Changes are only visible to spectators after deploying.
Q: How do spectators find my club's app? A: Share the URL from Club Info with your spectators and families. No download or account required.
Q: Can I have multiple admins? A: Yes. Generate an invite link in Club Info and send it to anyone you want to grant access. You can assign Admin or Scorer roles.
Q: What happens if I archive a tournament by accident? A: You can clone it from the archive to restore the full tournament structure, activate it again from the tournament selector, or rebuild the tournament history from durable scored games if the archive content is wrong.
Q: Does live scoring work with bad WiFi? A: Yes. Scores queue locally on the device, mirror to the server when possible, and sync automatically when connectivity returns. The scorer now sees an explicit sync-status badge, and admins can inspect mirrored drafts plus active scorer sessions from Recovery.
Q: Can I use this on my phone? A: Absolutely. The admin panel is fully mobile-responsive. Many coaches manage everything from the pool deck.

Pro Tips

  • Clone often — If you attend the same tournament each year, clone last year's from the archive. Games, roster, and structure carry over.
  • Use Upcoming Mode — Deploy the tournament info early so spectators can see the dates and venue, even before you have the full schedule.
  • Set up game reminders — Enable automatic push reminders in the Communication tab. Spectators love getting automatic reminders at 2 hours, 1 hour, and 30 minutes before game time.
  • Save templates — If your league has a standard format (e.g., "3 pool play + bracket"), save it as a template for one-click setup.
  • Print game sheets — Print them before you leave for the tournament. They have your roster, scoring grids, and quarter tracking built in.
  • Check the Activity Log — If multiple admins manage the same team, the activity log (in the Games tab) shows who changed what and when.
🙋

Need help? Tap the Help tab inside the admin panel for detailed documentation on every feature, or reach out to your platform administrator.