Skip to content

Admin guide

Eggbeater Admin Panel. Run your whole club.

Everything you need to set up your club, manage tournaments and leagues, run live scoring, and keep spectators informed, from your phone or a laptop.

  • Schedule, roster and games
  • Tournament Director cockpit
  • Live scoring
  • Custom branding
Your water polo club live in 5 minutes with Eggbeater ·

More for clubs and coaches

  • After the water polo game: box score, shot chart and the coach’s report ·

All Eggbeater videos

Getting started

Your admin panel is where you build schedules, manage rosters, communicate with spectators and run live scoring, all from your phone or laptop. Here is how to get in and find your way around.

What is Eggbeater? And your first 4 steps

Eggbeater is a tournament management platform built for water polo clubs and high school programs. Spectators and admins reach it through the mobile web app or by downloading the native app for iOS or Android. Your first four steps:

  1. Open the admin panel. Go to admin.eggbeater.app in any browser. Bookmark it for quick access.
  2. Sign in. Google, Apple, or an emailed sign-in link, whichever you prefer. Use the account your club was set up with. If it is not attached to a club yet you land on a “No club found” screen with a support link, not a dead end.
  3. Pick your age group. Tap the Age group pill in the sub-header to open the picker (14U Girls, 16U Boys, or All Groups). Each age group has its own schedule, roster and tournament data.
  4. Start building. Add games, import your roster, configure settings, then hit Save & Deploy in the save bar at the foot of the Add Games tab to publish everything to the spectator app.
The admin panel works well on a phone. You can manage everything from the pool deck.

Your dashboard: the header

The top bar carries the current section, a Sheet Sync shortcut, the language chip, the theme toggle and your account menu. Directly beneath it, on any tab scoped to an age group, sits the sub-header:

  • Tournament strip: the active tournament’s name, dates and location. A high school club with nothing loaded yet reads “Fall 2026 Season · not set up yet” and does not claim a tournament that is not there.
  • Age group pill: tap it to open the picker. A colored dot shows each group’s status: green is fully deployed, amber is a draft (not deployed), red is an error in the data, gray is not in use. An All Groups option sits at the top.
  • Sheet Sync: a shortcut in the top bar that jumps straight to Add Games, where every import wizard lives.
There is no Deploy button in the top bar. It was removed deliberately, because a header button cannot see which workspace you are publishing. Save & Deploy lives in a save bar pinned to the foot of the Add Games tab, alongside a plain Save. The Roster tab has its own pair.

Navigation tabs

The sidebar groups fourteen destinations into four sections. On desktop and tablet all of them are visible at once, with no More button needed. On mobile the three pool-deck tabs (Schedule, Roster, Add Games) sit in the bottom bar and the rest are one tap away under More. A crown marks the premium destinations:

  • Tournament: Schedule (the live game list with a Score button on every row, spectator dashboards, Drafts & Mode, audit log, danger zone), Roster (players and cap numbers), Add Games (the draft workspace, tournament setup, every import wizard, and the Save & Deploy bar), Director (premium, the hosting cockpit), Leagues (premium, season play).
  • Club: Club Info (organization type, logo, branding, admin management, join link, Apple TV codes, analytics), Purchases (subscriptions), Team Comm (push, announcements, Telegram, GroupMe and TeamSnap).
  • Records: Archive (premium, the season dashboard and past tournaments), History (tournament results, Coach’s Report, MaxPreps import).
  • System: Recovery (premium, fixing badly closed games), Settings (account and app preferences), Help (documentation and support), Raw JSON (the underlying tournament data).
The crown marks a premium tool, not your subscription state. Director, Leagues, Archive and Recovery always show it.

Purchases and plan management

The Purchases tab (headed “Purchases & Plan”) is the single place to manage club subscriptions. Open it to see:

  • A banner telling you where the club stands: either “N active entitlements, managed via Stripe, cancel anytime” or “on the Free tier”.
  • Active: the plans your club already owns, each row with a green Active badge, its price, and a Manage button.
  • Add more: the plans your club does not own yet. Each card shows the price, a feature list and an Upgrade button that opens Stripe Checkout in a new tab.
Premium Spectator ($4.99/mo) is sold per account on iOS and the web, not as a club purchase. Admins manage club-level subscriptions here. Spectators manage their own on their phone.

Club and schedule

Configure your club once, then build your tournament schedule. Several import paths cover hosted tournaments, Google Sheets, Futures and the National Junior Olympics.

First-time setup checklist

When you first open your club’s admin panel, work through Club Info top to bottom:

  1. Organization Settings. Set the Club Name (it appears on game cards as “Pacific Waves vs. NorCal Gold”) and pick a Club Type: Club (youth) or High School. The type changes the age-group labels: 10U to 18U, or Varsity and JV.
  2. Logo & Branding. Upload a square logo, which shows wherever your club appears, and pick your club’s primary and secondary colors for your club and team pages, their game pages and printables.
  3. Spectator Access. Copy your club’s join link and share it with spectators. They open it in a browser to follow your team.
  4. Admin Management. Invite the other people who need access (see “Managing admins” below).
  5. Then head to Add Games and build the schedule.
Spectator link: your club’s app address is eggbeater.app/?join=your-club-id. Spectators open it, pick their age group, and they are set. No account required.

Adding games: your options

Go to the Add Games tab and open Import Games. Nine methods are on offer:

  • Hosted Tournament: recommended for tournaments. Enter the director’s 6-character share code to fetch the schedule and pick your team. The cleanest path for bracketed events and shared tournament data. A master code for a large multi-division event comes in the same way. (See “Master tournaments” below.)
  • Google Sheets / BSSync: paste a Sheet link. It detects columns, maps age groups and previews before importing. The main method for standard schedules.
  • Season Schedule: upload a CSV or paste any public Google Sheet. It only needs Date, Time, Opponent, Location and Cap columns.
  • Import from a Tournament Sheet: for any event running its own Google Sheet (NJO, JO Qualifiers, US Club Championships). Detects divisions and pulls your team plus the full draw.
  • Futures Importer: for Futures sheets that share one tab across multiple age groups and separate them by legend colors.
  • Keep Sheet Synced: checks a linked sheet again every 10 minutes and merges new or changed rows. Scores and notes are never overwritten.
  • Clone Tournament: copy a past tournament’s structure with every score cleared.
  • MaxPreps Sync: high school only. Paste your MaxPreps page source to pull the upcoming schedule into the draft and completed results into History.
  • Manual Entry: add games one at a time with opponent, pool, date and time, and cap color.
Recommended flow: ask the tournament director for the hosted share code first. It carries the full structure most cleanly (divisions, crossover games, rebracketing). If the event only shares a Google Sheet, use Google Sheets / BSSync for a normal sheet and the Futures Importer for mixed-age Futures tabs.

Game fields, tournament settings and Upcoming Mode

When adding or editing a game, each field maps to what spectators see:

  • Game fields: Opponent is the team you are playing (“NorCal Gold”). Date is shown on game cards. Time is the start time (“8:30 AM”). Location is the venue name, tappable for Google Maps directions. Pool is the pool group (“Pool A”) or bracket round (“Semifinal”). Cap Color is White or Dark, so spectators know which cap to bring.
  • Tournament settings (Add Games, then Setup): Tournament Name & Dates (top of the spectator app), Coming Soon Message (placeholder before you add games), Scoring Password (optional; scorers enter it to submit live scores), Clock Settings (quarter length, breaks, halftime, timeouts).
  • Upcoming Mode (Schedule, then Drafts & Mode): show tournament info (name, dates, venue) without revealing the full schedule. Useful when you know the tournament but have not finalized games. Spectators see the coming-soon message instead of an empty schedule.
Changes are not visible to spectators until you Save & Deploy, and that button asks “Deploy to spectators?” before it publishes. You can edit freely without affecting what spectators see.

What spectators get automatically

Once you deploy games, spectators get all of these with no extra setup on the admin side:

  • Live Activities (iPhone): during a live-scored game the score appears on the lock screen and Dynamic Island with a running clock and a live event feed. It starts when scoring begins and ends on final.
  • Live Updates (Android 16): a persistent notification chip shows the current score and updates on every poll tick (Android 16 or later with notification permission).
  • Home-screen widgets: Score, Schedule and Stats widgets on iOS and Android, updating as games progress.
  • Calendar Subscribe: a WebCal feed spectators subscribe to once. All games appear in Google, Apple or Outlook calendars and update as the bracket resolves (it refreshes about every 5 minutes; “Bracket Game TBD” becomes “vs. San Clemente”).
  • Offline scoring: scorers can enter scores with no internet. Goals queue locally and sync when the connection returns.
Let spectators know these exist. A quick “you can add a widget to follow the game on your lock screen” in the group chat drives adoption.

National Junior Olympics: Import from a Tournament Sheet

The Import from a Tournament Sheet wizard handles any event that runs its own Google Sheet, and it has dedicated handling for the National Junior Olympics, a 4-day, multi-bracket tournament with a complex advancement structure. It reads directly from the MASTER BY DIVISION sheet the event posts each year, which lists every game for every division in a single tab.

  • Use this wizard when the event publishes its own sheet (NJO, JO Qualifiers, US Club Championships). Use Google Sheets / BSSync for an ordinary club schedule. It detects the format on its own: if it sees the GMID division column it knows it is an NJO sheet, and it falls back to treating the tab as a standard bracket for one age group if there is no GMID master.
  • Step 1: paste the NJO sheet link (including the #gid=... at the end) and tap Detect NJO Format. The wizard finds the GMID column and lists all division codes (12G, 12GX, 14G, 14GX).
  • Step 2: configure Team A. Pick your division (labels decode automatically, for example 12G is 12U Girls Championship) and enter your team name exactly as it appears in the White/Dark columns. The wizard traces the full bracket tree through the advancement column.
  • Step 3: configure Team B (optional) if you are bringing two teams. Spectators tap A or B to switch.
  • Step 4: name the spectator calendar (“14U Girls NJO 2026”) and set the sync frequency (every 5 minutes is recommended during NJO).
  • Step 5: deploy. Group-play games go live immediately with real opponents, times and locations, and a calendar-subscribe link is generated to paste into your team chat.
GMID codes are {age}{gender}{bracket}. Gender: G is Girls, B is Boys, C is Coed. Bracket: no suffix is Championship, X is Classic. For example, 12G is 12U Girls Championship and 14GX is 14U Girls Classic.

Rosters and deploy

Manage your team’s players, edit every registered team’s roster inline when you host, and understand the single most important button in the panel: Save & Deploy.

Roster management

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.
  • Scan a deck roster (OCR): photograph a printed roster sheet and the app reads the cap numbers and names straight into the roster. The image is processed in-boundary on Cloudflare Workers AI, with no third-party service, and you review and correct the parsed rows before saving.
  • Paste from Spreadsheet: paste roster data from Google Sheets or Excel. The parser detects columns by header.
  • Upload CSV: import a CSV file using the same column detection.
  • Sync from Google Sheets: enter a Google Sheets link and sync your roster directly.
  • Multi-Team Rosters: if your age group has multiple rosters (A/B/C), each team has its own roster section and players are assigned to a specific team. Switch between Single team and multi-team, name each squad, and add or remove teams in Add Games, under Setup (Club Plan required).
  • Exporting: tap Export Roster CSV to download your roster as a spreadsheet, named with your club ID and age group.

Main Roster and per-tournament caps (roster split)

Your players live in a season Main Roster with no cap numbers: a library of every athlete in the age group, with a stable identity that does not depend on a cap number. For each tournament you then assign that event’s cap numbers on top of the Main Roster:

  • Main Roster: the season library. Add a player once and they are available for every tournament. No cap number is stored here.
  • Per-tournament caps: when you build a tournament, give each player the cap they are wearing that weekend. The same athlete can wear #4 at one event and #11 at the next.
  • Stable stats: because stats attach to the player’s identity (not the cap), a player’s history follows them across tournaments even when their cap number changes. Season and all-time totals stay correct.
Why it matters: cap numbers get reassigned constantly across a season. Splitting the Main Roster from per-tournament cap assignments means a player’s stats never fragment because they switched caps.

Inline roster editor (tournament hosts)

When you host a tournament, every registered team gets a card with its own inline roster editor. There is no bouncing between the team admin’s app and yours:

  • Cap #, First and Last rows you can edit in place, plus an Add Player row at the bottom of every card.
  • Paste from a spreadsheet directly into a team’s roster. The parser detects columns the same way it does for yours.
  • 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 cannot overwrite the cap numbers you are typing. It resumes after you save. If a newer roster arrives while your edits are pending, the app preserves your draft and offers Restore my changes.
Why it matters: tournament directors used to have to call the team coach or wait for a redeploy when a cap number was wrong. Now you fix it in seconds from the host cockpit, and the change reaches every spectator within 5 seconds.

How Save & Deploy works

Save & Deploy is the most important button in the admin panel. It sits in a save bar pinned to the foot of the Add Games tab, next to a plain Save. The Roster tab has its own pair. The workflow:

  1. You make changes in the Workspace. A banner appears telling you there are unsaved edits.
  2. Save keeps them as a draft. Spectators still see the last deployed version.
  3. Save & Deploy asks “Deploy to spectators?” first, because publishing to every spectator at once is worth one confirmation.
  4. Confirm, and the changes go live and replace the active site data.
  5. Got it wrong? Schedule, under Danger Zone, has Undo Last Deploy, which restores from a snapshot.
Safe to experiment: until you deploy, spectators see the last deployed version. Edit freely, then deploy when it looks right.

When to deploy

Deploy after changes that affect what spectators see:

  • After adding or editing games
  • After updating the roster
  • After changing tournament settings or the coming-soon message
  • After entering scores if you are not using live scoring
  • After switching to or from Upcoming Mode
  • You do NOT need to deploy after changing club info or branding, sending push notifications, or managing admin access.

Tournaments

The full tournament lifecycle (create, build, activate, archive), plus the Tournament Director cockpit, share codes, the live dashboard, the public page and the game desk guide generated in three languages.

Lifecycle: create, build, activate, archive

Every tournament moves through four stages:

  • Create: a tournament arrives one of two ways: an import wizard on Add Games, under Import Games (which generates the tournament ID, so later syncs stay connected to the same event), or, if you are hosting it yourself, Publish New Tournament on the Director tab.
  • Build: add games, import a roster, set the clock, configure settings. Deploy when ready.
  • Activate: mark the tournament active so it is the one spectators see. Only one tournament per age group is active at a time.
  • Archive: after it ends, archive it from Add Games, under Archive (or the Director tab’s Publishing card). Final scores are preserved in History / Past Tournaments and the schedule clears so the age group is ready for its next event. Once the dates pass, the spectator app falls back to Stay Tuned on its own, even before a manual archive.
  • Clone from Archive: the fastest way to start the next event. It copies a past tournament’s game structure with every score cleared. Saved-draft and template wizards are marked Coming soon in the panel, so cloning is the route today.

Tournament Director cockpit

If your club is hosting (not only attending), the Director tab is your event control center. A Live Dashboard and a Live Game Console stay pinned at the top. Six workspaces sit below:

  • Setup: tournament name and dates, Age Groups & Divisions, Schedule & Auto-Assign, and the Scorer Display settings.
  • Brackets & Seeding: pool seedings and a bracket preview.
  • Import: the shared import wizards, so a director can pull structure in the same ways a team admin can.
  • Publishing: Publish New Tournament (or Publish / Refresh once live), the share code, referee sign-off, and Archive this tournament.
  • Rosters & Clubs: every registered team on its own card with the inline roster editor. Add or remove teams, fix cap numbers and set club logos without leaving the page.
  • Past: previously hosted tournaments.
Hosting a season, not a weekend? The Setup workspace carries a “Run a League” card that hands you straight to the Leagues tab.

Publishing the event and share codes

When the structure is ready, tap Publish Event in the Setup workspace. The platform generates a 6-character share code (for example K7M-A9F) that participating team admins enter under Hosted Tournament, then Import by Code:

  • The share code carries the full package: pools, divisions, game format, bracket structure, venues and seedings.
  • Publishing again pushes updated games and brackets to every team that imported the code, so rebracketing and schedule fixes reach everyone.
  • Share the code in a single email or group chat. Each team admin pulls the package once, and their spectators then see the live tournament with nothing extra to do.
  • Require referee sign-off: the Publishing card has a “Require referee sign-off” toggle. It is OFF by default. Flip it ON and ending any game on the official Tournament / League feed asks the scorer for the referee’s name (required to finalize), and the final shows “Signed off by [referee].” It never applies to My Club games.
Why share codes beat a Google Sheet: sheets need every team admin to set up the import 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 is your operations view. Tiles update in real time as scorers at each pool record events:

  • Spectators Watching: how many devices currently have a game open. A proxy for engagement and a check that your share code reached spectators.
  • Games Live Now: count of games with at least one event in the last 5 minutes. Tap to drill into the pool that is scoring.
  • Players Near Limit: players with 2 kickouts. A heads-up that one more major foul disqualifies them, sorted by team and cap.
  • Players Benched: players who reached 3 kickouts. They are out for the rest of that game, shown with a BENCHED chip on the public box score.
  • Cross-Team Venue Conflicts: two games within 10 minutes in the same pool, or one team playing two games inside 60 minutes at different venues. Flagged so you resolve it before the sprint.
  • Scored Complete: games that have been ended (and signed off, if you require referee sign-off). The score is locked and shows as Final.
  • Goals Broadcast: total goal events pushed to spectators so far.
Auto-refresh polls every 5 seconds. While you edit a team’s inline roster it suspends for that card so a poll cannot overwrite your cap edits in the middle of typing.

Public tournament page

Publishing the event generates a public spectator address automatically: eggbeater.app/tournament.html?code=K7M-A9F. Anyone with the link sees the live tournament (pools, brackets, schedule, live scores and box scores for every player) with no install or account.

  • The page names your club as the host. Its colors are Eggbeater’s navy and sun, the same for every club.
  • Visiting spectators see your tournament on the same domain as the rest of the platform.
  • This is the link you put on registration forms, share in tournament emails and pin to social media. It refreshes every 5 seconds with new scores, bracket advancement and finalized box scores.

Master tournaments: one code for a multi-division event

A large event with many divisions can be published as a single master tournament with no host. Instead of every division standing up its own code, you share one master code that joins the whole event:

  • One code, the whole event: spectators enter the single master code (on web, the PWA, iOS and the Apple TV app) and get full tabs: My Path, Pool Standings, All Games, Watch List and Schedule, across every division.
  • Per-division data: each division’s package resolves under the master, so a spectator picks their division and sees their team’s path while the master still ties the event together.
  • Master “My Path”: the projector shows win and lose forks with projected opponents, scheduled game times and clinched-finish copy, updating as results land.
  • No host required: there is no single club running the desk for the whole event. Results flow in per division and the master aggregates them.
Master tournaments are how a multi-division championship (for example, a full event across a whole age group) appears as one thing to spectators: hand out one code and every team in every division is covered.

Game desk guide in three languages (generated for you)

Every published tournament gets its own printable Game Desk Quick Reference for volunteer scorers, in English, French and Spanish. It 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 end-game and quick-key.
  • Covers the exclusion kinds (Kickout, Common Foul, Brutality), the 3-kickout BENCHED rule, earned exclusions, goal tags (6-on-5, Backhand, Counter), turnover kinds (including Forced Ball Under and Inside 2m), and ending the game with End Game (plus referee sign-off when you have enabled it).
  • Set the language in your tournament settings so all game desk volunteers get the same version. Need multiple languages? Print all three and stack them 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.

Leagues, comms and scoring

Run a multi-week season from the Leagues tab, keep spectators informed with push and messaging integrations, and run live scoring with the one-button Score this game flow and the per-device clock toggle.

Running a league season

If your club hosts multi-week league play (instead of, or alongside, tournament weekends), the Leagues tab manages the whole season, from the setup wizard to a public /leagues/{slug}/ page spectators follow without an account. Two plans cover the two shapes:

  • Club League, $99/season: single-club leagues using only your club’s teams. Round-robin, single elimination, double elimination, Swiss, weekly pods, pools to bracket. Live standings and configurable tiebreakers.
  • Multi-Club League, $249/season: teams from multiple clubs. Includes every Club League feature, plus cross-club standings, free spectator pages for visiting clubs’ spectators, Sheet write-back and event calendars per division.
  • Setting up: (1) Subscribe to a league plan from the Purchases tab. (2) Open the Leagues tab and tap Create a league, a wizard covering identity, divisions and teams, format and schedule, rules, and points and tiebreakers. (3) Auto-schedule or import: one weekly preset generates every match, or import from Google Sheets or a JSON export. (4) Publish: a 6-character share code goes live with a public address and a generated /leagues/{slug}/ page.
Tournaments and leagues stack. A club can run both at once under separate share codes. League games on iOS lock screens read “Week 3 · vs Stingrays” instead of a generic “next game.” The full walkthrough lives in the League Builder guide.

Team communication

Keep spectators informed from the Team Comm tab:

  • Push Notifications: Game Day Reminders (automatic at 2 hours, 1 hour and 30 minutes before each game) and Announcements (manual messages to selected age groups, limited to 5 per hour). Sending asks for confirmation, because it reaches real devices.
  • Announcement Banner and Send Score Update: put a standing message at the top of the spectator app, or push a one-off score update.
  • Subscriber Breakdown: how many spectators have notifications enabled, split By Age Group and By Notification Preference.
  • Integrations: connect Telegram (bot token and chat ID), GroupMe (bot ID) or TeamSnap. Once connected, score updates and announcements post to those channels alongside push.

Live scoring: how it works

During a game, a designated scorer taps Score this game, chooses what they are scoring, enters the scoring password, and the board opens on the live game. Scoring is action-first: tap the action, then tap the player (there are no plus and minus steppers). They can:

  • Record goals: tap Goal / Opp Goal, tap who scored, then optionally an assist and 6-on-5, Backhand or Counter tags.
  • Run the game clock: Start, Stop and Reset, Sprint Won, and tap the clock to set an exact M:SS (or Clock OFF for period-only).
  • Advance the period on the bar: Start, Q1 to Q4 (H1 and H2 for halves), ½ Time, with SO only when tied at full time.
  • Log everything else: exclusions (Kickout, Common Foul, Brutality), turnovers, steals, blocks, goalie saves and 5m penalties, all attributed by cap number.
  • Scoring Password: set one in Tournament Settings to prevent unauthorized scoring. Share it only with the assigned scorer.
  • Sharing Results: after a game, spectators tap Share Result on a completed game card to generate a final-score image for iMessage, Instagram Stories or any app.
Score updates push to spectators in real time. If the scorer loses internet, updates queue locally and sync automatically when the connection returns.

Score this game and the Clock ON/OFF toggle

Every row on the Schedule tab carries a Score button (it reads View once the game is final). It opens the guided scorer with a quick “What are you scoring?” choice, a scoring password, then the live board:

  • What are you scoring? Pick Tournament / League (the official two-ended feed) or My Club (one of your own club’s games). Both broadcast live to spectators. Choosing My Club on a game that is part of a tournament or league warns you it sends a separate club feed that can diverge from the official score.
  • Scoring password: enter it once and the board opens directly on the live game. There is no separate “open a game” step and no 6-character code to type. The board seeds the period and clock and sets each team’s side and cap color.
  • Clock ON/OFF: the period card has a Clock pill. Flip it OFF and you score by period alone. The period bar (Start, Q1 to Q4 or H1 and H2 for halves, ½ Time, SO) and all action buttons stay. There is no running countdown.
  • Ending a game: End Game is a simple confirm by default. Referee sign-off is optional and off by default. Enable it per event (tournaments: Director console, Publishing card; leagues: Leagues tab, Scorer Display card, “Require referee sign-off”) and finalizing an official Tournament / League game then asks the scorer for the referee’s name, with the final showing “Signed off by [referee].” It never applies to My Club games.
  • Events still record real timestamps and broadcast in real time. The scorer’s preference rides along, so the spectator lock screen and widget hide the clock label too, with no half-empty 0:00 ghost. Tournament desks usually keep it ON. Casual scorers often flip it OFF.
If the Score button tells you to publish first, that is the guard doing its job. A tournament you host has to be published on the Director tab before live scoring opens.

Data, branding and admins

Season stats and archives, your club’s logo and colors, admin roles, and the advanced tools, including scored-game recovery for fixing a game that closed incorrectly.

Archive and season stats

The Archive tab is your club’s permanent record:

  • Season Dashboard: your club’s season record at a glance: overall wins, losses, ties and win percentage across all age groups, each with a color-coded win-percentage bar.
  • Tournament Archive: every archived tournament stored permanently with full game results and rosters. Tap one to open the detail view. You can also load an archived roster back into a current tournament.
  • Player Stats: in the Roster tab, tap Load Season Stats for cumulative player statistics across archived tournaments (goals, assists, steals, exclusions, goals per game). Sortable, and visible to players and spectators in the public app.
  • CSV Export: export game results or your roster as CSV at any time, named with your club and age group.

Coach’s Report and Player Report (PDF in your colors)

From a tournament’s history, generate a print-ready Coach’s Report in your club’s colors: a deep statistical breakdown you can hand to coaches or print at season’s end. It is available in English, Spanish and French:

  • Turnover breakdown: turnovers by kind, plus forced ball under for and against.
  • Foul detail: common fouls and 5-meter fouls, alongside the exclusion picture.
  • Deep-dive for each player: each athlete’s contribution across the event in one place.
  • Player Report: a version for one player that a spectator can be handed (the PDF link is not gated, so it can be shared), drilling into one athlete’s stats and play-by-play.
  • Printable: themed in your club’s colors and laid out for print or PDF. Set the language in your tournament settings.
Pairs with the public box scores: spectators see live stats for every player in the app, while coaches get the full report for review and recruiting.

Custom branding

In Club Info, under Logo & Branding, set how your club shows up:

  • Club Logo: shown wherever your club appears: in the apps, on the TV, on game cards and on your public pages.
  • Primary and Secondary Colors: your club and team pages, their game pages and the printables (Coach’s Report, Player Report).
  • Everything else (the apps, the Desk, the Apple TV app, tournament and league pages, the club-site widget and the stream overlay) uses Eggbeater’s navy and sun for every club, so your colors do not change it. Tap Save colors when you are happy.
Branding is served from the /club-branding endpoint, so saving in Club Info updates your logo, your pages and your printables immediately. No deploy required.

Managing admins

In Club Info, the admin-management section controls who has access:

  • Invite Link: generate a one-time invite link and send it to a new admin. They sign in with Google and are added automatically.
  • Add by UID: if you have a Firebase UID, add that person directly.
  • Admin role: full access: edit games, rosters and settings, deploy, and manage other admins.
  • Scorer role: limited access: use only the live scoring interface. Cannot edit schedules, rosters or settings. Use it for a spectator or helper running the scoreboard without full permissions.

Advanced features

Beyond the basics:

  • Tournament Host: build or import hosted packages with seeding grids, divisions and game formats. Directors publish and team admins import with the 6-character code.
  • Analytics: an Analytics card at the foot of Club Info. Subscriber counts by age group live on Team Comm.
  • Dark Mode and Themes: spectators choose Light, Dark or System theme for better poolside visibility.
  • History and MaxPreps (High School): if your organization type is High School, a History tab tracks results season by season. Import from MaxPreps by pasting the schedule page link, or add games manually. Safeguards prevent duplicate tournament collisions from repeated or overlapping imports.

Scored-game recovery and official results

The Recovery tab reviews every durable scored game for the selected age group, not only browser-local history. Use it 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: every durable scored game, with a Needs Action / Show All filter so you can focus on what actually needs cleanup. Rows you have triaged can be dismissed from the list on this device without touching the record.
  • Repair Game: Promote Final pushes a finalized game into the spectator History view, Fix Score corrects a wrong final, and there is a repair for plays that were logged before Q1 was tapped.
  • Active scorer sessions: which device currently owns a live scorer session, its status and last heartbeat, with Force Close for a session that is stuck.
  • Stamped: the club-wide finalization queue across all tournaments, current and past, so nothing sits half-finalized.
  • 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 the durable records.
  • Snapshots: restore from a deploy snapshot when something needs rolling back. Destructive actions here ask for confirmation.

Questions

Frequently asked questions

How do I set up a water polo club in Eggbeater?

Open admin.eggbeater.app, sign in with Google, Apple or an emailed sign-in link, then work through Club Info: set your club name and type, pick branding colors and a logo, and share the join link with spectators. Add games and a roster, then hit Save & Deploy to publish to the spectator app.

Can I import a water polo tournament schedule from a Google Sheet?

Yes. On the Add Games tab, open Import Games and use Google Sheets / BSSync for a standard sheet anyone can view, or the Futures Importer for mixed-age Futures sheets with color legends. For the National Junior Olympics, Import from a Tournament Sheet reads the MASTER BY DIVISION sheet directly. Best of all, ask the tournament director for the hosted share code. It carries the full structure most cleanly.

How do spectators get notified about water polo game schedules?

Spectators who enable notifications get automatic game-day reminders (2 hours, 1 hour and 30 minutes before), plus any announcements you send from the Team Comm tab. They can also subscribe once to the WebCal calendar feed so every game (and every bracket update) lands in Google, Apple or Outlook calendars automatically.

Can Eggbeater host a tournament for multiple clubs?

Yes. Use the Tournament Director cockpit: build the event package, tap Publish Event to generate a 6-character share code, and each participating team imports it under Hosted Tournament, then Import by Code. The public tournament page shows live scores to every spectator, with no install or account required, and publishing again pushes rebracketing to all teams automatically.

My changes are not showing for spectators. Why?

Tap Save & Deploy. Changes are saved as a draft and only become visible to spectators after you deploy. (You do not need to deploy after changing club info or branding, sending push, or managing admins. Those apply immediately.)

Does live scoring work with bad Wi-Fi?

Yes. Scores queue locally on the device and sync automatically when the connection returns. The admin History tool also keeps durable scored-game records and mirrored drafts so a game can be recovered if a device drops in the middle of a game.

Ready to run your club?

Open the admin panel and run the first-time checklist. It takes about ten minutes. Need a hand? The Help tab inside the panel has documentation on every feature.