← Back to Help Center

Workflow Guide

Track Live Games with the Live Tracker

Run the Live Tracker from tip-off to final buzzer — manage substitutions, clock, fouls, stats, and broadcasts without losing data if the page reloads.

6 min read Updated from live product pages

Overview

The Live Tracker (live-tracker.html) is ALL PLAYS' basketball-optimized sideline tracker. It runs in the browser on a phone or tablet and tracks player substitutions, fouls, and live stats in real time while simultaneously broadcasting to Game Day consumers watching on live-game.html. Every stat tap, sub change, and foul increment is written to Firestore the moment it happens — fans and parents following along see a live feed without any manual publish step.

Recent improvements have made the tracker resilient to page reloads and unexpected browser navigation. In earlier versions of the tracker, reloading the page during a game would erase the running clock, reset opponent foul counts, and lose track of which players were on court. That is no longer the case. Clock state (elapsed time and running/stopped), substitution lineups, opponent foul totals, per-player fouls, and period state are all persisted to Firestore and restored automatically when the page loads. You can reload the Live Tracker mid-game and resume exactly where you left off.

Goal-sport games (soccer, hockey, lacrosse, field hockey, water polo) have an additional simpler tracker mode called Live Broadcast Simple. This mode tracks only the game clock, home score, away score, and individual goal events. It is designed for one-person sideline operation when full stat tracking is not needed but live score broadcasting still is.

Baseball and Softball are now supported as fully distinct sports with built-in stat templates, diamond formation views, seven-inning defaults, and batting order support — all accessible from the same game schedule and tracking workflow.

Who Is This For

The Live Tracker is designed for three primary roles. Each role has a slightly different relationship with the tracker, and understanding those differences helps you get the most out of the tool.

Coaches

Coaches are the primary audience for the Live Tracker. During a basketball game the coach (or an assistant coach) keeps the tracker open on a phone or tablet on the sideline. The coach uses the substitution panel to swap players in and out as lineups change, monitors per-player foul counts so they can pull players who are in foul trouble, and reviews live stat summaries between quarters. The tracker's quick-tap interface is designed for use with one thumb while standing and watching the game — not for long data-entry sessions.

Admins

Team administrators often support live tracking by setting up the game record before tip-off, verifying that the stat tracker config is correctly assigned, and troubleshooting issues that arise during the game. Admins can view all Firestore data for the game, including raw events, aggregate stats, and lineup state. If a coach encounters a data issue mid-game, an admin is typically the person who resolves it.

Scorekeepers

Some teams delegate live stat tracking to a designated scorekeeper — a volunteer or assistant who is not the head coach. Scorekeepers can be granted access to the Live Tracker without giving them full team management rights. They can track stats and manage substitutions during the game but cannot modify team settings, player rosters, or game configuration outside of the tracker. This role is specifically designed to allow trusted non-admin helpers to operate the sideline tracker.

What the Live Tracker Is Not

The Live Tracker is distinct from the Standard Tracker (track.html), which provides a full stat grid for all sports but does not have a live broadcast substitution panel. It is also distinct from the Game Day Command Center, which is a read-side tool for monitoring game state and coordinating broadcasts. The Live Tracker is the write side — it is where stats are recorded. The Command Center is where they are displayed and managed for downstream consumers.

Choosing a Tracker Mode

ALL PLAYS offers several tracker modes. The right choice depends on your sport, how many people are on the sideline, and whether you need live score broadcasting for fans. Here is a complete breakdown of each mode.

Live Tracker (live-tracker.html)

The Live Tracker is the basketball-optimized sideline tracking experience. It includes a quick substitution panel that lets you swap players in and out with two taps, a per-player foul counter with fouled-out alerts, a separate opponent foul counter, live stat buttons for each player, and real-time broadcast to live-game.html. Every lineup change and stat event is immediately visible to fans following the game online. Use the Live Tracker for any basketball game where you want full stat tracking plus live broadcast.

Standard Tracker (track.html)

The Standard Tracker works for all sports. It presents a grid of stat buttons organized by player, supports manual period and timer entry, and does not include the live broadcast substitution panel. It is suitable for sports where you do not need real-time lineup broadcasting, or where a more deliberate data entry workflow is preferred. Baseball, softball, volleyball, and football games typically use the Standard Tracker.

Live Broadcast Tracker

The Live Broadcast Tracker is the basketball tracker with full live chat integration and live-view context for Game Day consumers. It opens from the Track modal when you select "Live Broadcast Tracker" for a basketball game. It is functionally the same as the Live Tracker but is launched in a mode that also exposes the live chat sidebar for Game Day coordinators who want to communicate with fans during the game.

Live Broadcast Simple

Live Broadcast Simple is available only for goal-sport games: soccer, hockey, lacrosse, field hockey, and water polo. When you open the Track modal for one of these sports, two options appear — Live Broadcast Tracker (full stats) and Live Broadcast Simple (score, clock, and goals only). Simple is the right choice when you have one person on the sideline who needs to keep live score for fans but does not have the bandwidth to track individual player stats simultaneously. Basketball, baseball, volleyball, and football games do not show the Simple option.

Beta Tracker (track-basketball.html)

The Beta Tracker is an alternate basketball tracking interface focused on quick substitutions and sideline usability. It shares the same Firestore backend as the Live Tracker but presents a slightly different layout with a stronger emphasis on the substitution workflow. Teams that were using the Beta Tracker before the Live Tracker reached full feature parity may still have familiarity with this interface. New setups should default to the Live Tracker.

Stream and Score

Stream and Score is a combined workspace that opens when a volunteer has both scorekeeper permissions and streaming access for a game. Instead of navigating between two separate pages, Stream and Score gives the volunteer a single unified view with the scorekeeper tracker on one side and the stream controls on the other. It opens automatically from the game-day entry point when the system detects that the logged-in user has both permissions.

Quick Reference: When to Use Which Mode

  • Basketball, full stats, live broadcast: Live Tracker or Live Broadcast Tracker
  • Goal sport, live score only: Live Broadcast Simple
  • Goal sport, full stats + live broadcast: Live Broadcast Tracker
  • Baseball or softball: Standard Tracker with baseball stat template
  • Non-basketball, no broadcast needed: Standard Tracker
  • Volunteer with streaming access: Stream and Score (opens automatically)

Starting a Live Tracker Session

Before tip-off, spend two minutes setting up the tracker correctly. A proper setup prevents the most common mid-game issues.

  1. Open from the schedule. Navigate to edit-schedule.html and find the game in your schedule list. Click the Track button next to the game. A modal appears with tracker mode options. For a basketball game, select Live Broadcast Tracker. For a goal-sport game, choose between Live Broadcast Tracker (full stats) and Live Broadcast Simple (score and clock only). The tracker opens in a new view.
  2. Confirm game context. Before touching the clock, review the game header: opponent name, game date, and period configuration. If any of these are wrong, close the tracker, correct the game record in the schedule, and reopen. Do not start tracking a game with incorrect metadata — changing it mid-game is more complex and may confuse downstream stat records.
  3. Set the initial lineup. The tracker opens with all eligible players in the bench pool. Tap players to move them to the "on court" panel until your starting five are shown as active. The initial lineup is written to game.liveLineup in Firestore immediately when you confirm it — this means even if the page reloads before you tap Start, the tracker knows your starters.
  4. Start the clock. Once the lineup is confirmed and the referee signals the start of play, tap Start. The game clock begins ticking. From this point forward, the clock's elapsed time and running state are persisted to Firestore continuously. Important: if the page reloads at any point after you tap Start, the clock will restore its exact elapsed time and running or stopped state automatically. You do not need to manually reset or restart the clock after a reload.
  5. Understand the layout. Once tracking begins, the Live Tracker shows four main areas:
    • On Court panel: displays the five active players with their foul counts and quick-access stat buttons.
    • Bench pool: shows all players not currently on court, available for substitution.
    • Opponent quick stats: a compact panel showing opponent score, opponent fouls, and a foul increment button. Opponent foul totals are persisted — they are not reset on reload.
    • Period and clock controls: Start/Stop clock, current period indicator, and the period advance button to move from Q1 through Q4 and OT.
    • Sub queue: a staging area where you build substitution pairs before applying them. You can queue multiple subs and apply them all at once at the next dead ball.

Managing Substitutions

Substitution management is one of the most frequently used features of the Live Tracker. The sub workflow is optimized for one-thumb operation on a phone — you should be able to complete a substitution in under five seconds.

Making a Quick Substitution

To substitute one player for another, tap the OUT button on the player who is coming off the court in the On Court panel. That player is highlighted as the outgoing player. Then tap the IN button on the player from the bench pool who is entering the game. The substitution pair appears in the sub queue. Tap Apply Sub to confirm. The lineup update is written immediately to game.liveLineup in Firestore, and the on-court panel updates to reflect the new lineup.

This is the key behavior change from earlier versions: previously, a substitution that was applied but then the page was reloaded would be lost — the tracker would revert to the pre-sub lineup on next load. Now, every lineup change is persisted to game.liveLineup the moment you tap Apply Sub. If the page reloads for any reason, the sub is preserved and the correct lineup is restored.

Queuing Multiple Substitutions

If you have multiple subs to make at the same time (for example, switching an entire unit at a timeout), you can queue them all before applying. Select each OUT/IN pair one at a time. Each pair is added to the sub queue. When all pairs are staged, tap Apply All Subs. All substitutions are applied atomically and written to Firestore together. This prevents partial-sub states where some players have been swapped but others have not.

Reviewing the Sub Queue

The sub queue displays each pending substitution as a row: the outgoing player's name on the left, an arrow, and the incoming player's name on the right. Review the queue before applying — once subs are applied, playing time tracking begins for the incoming player and stops for the outgoing player. You can remove a pending substitution from the queue by tapping the X next to it before applying.

After a Substitution

Once a substitution is applied, the subbed-in player appears in the On Court panel. Playing time tracking starts for that player from the moment the sub is applied. The subbed-out player moves back to the bench pool. Their accumulated playing time is paused until they re-enter the game.

Playing Time Tracking

The tracker silently records how long each player spends on court. When the game is finished using the Finish button, playing time for every player who appeared in the game is saved to the game record. This includes players who were subbed in but recorded no stats — they are explicitly marked as participants in the aggregate. Previously, finishing a game in some states caused playing time data to be lost. This is fixed: the Finish flow now correctly saves elapsed field time for all participants before marking the game complete.

Undoing a Substitution

If you applied a substitution by mistake — for example, you tapped the wrong player as the incoming player — there is no direct "undo sub" button in the current tracker. To correct the error, make a new substitution that reverses the incorrect one: sub the wrongly-entered player back out and sub the correct player in. This creates two additional events in the Firestore event log, but the final lineup state will be correct. If the error needs to be corrected at the event level (for example, to fix playing time calculations), contact your team admin — event-level corrections require direct Firestore access.

Tracking Fouls

Foul tracking in the Live Tracker is split into two counters: per-player fouls for your own team's roster, and a single aggregate opponent foul counter in the opponent quick stats panel. Both are persisted to Firestore and restored on page reload.

Per-Player Foul Tracking

Each player card in the On Court panel displays that player's current foul count. To increment the count, tap the foul counter on the player's card. The count increments by one per tap and is immediately written to Firestore. The foul count is visible to the player's coach and to anyone viewing the game's admin data — it is not broadcast to fans on live-game.html.

Fouled-Out Alerts

When a player reaches five fouls, their card in the On Court panel displays a prominent "FOULED OUT!" label in red text. This is not a warning icon or a subtle color change — it is a clear, readable alert designed to be visible at a glance during the chaos of a live game. The tracker signals that the player must come off the court per basketball rules. The alert persists until you sub the player out. You must initiate the substitution manually — the tracker does not automatically move the player to the bench. Use the sub panel to swap the fouled-out player off the court.

Opponent Foul Tracking

The opponent quick stats panel includes a dedicated opponent foul counter. This is a single number that represents the total team fouls accumulated by the opposing team. To increment it, tap the foul button in the opponent panel. The count is saved to Firestore alongside the opponent's score and other quick stats.

Key improvement: opponent foul counts are now persisted across page reloads. Previously, the opponent foul counter was held in JavaScript memory only and was reset to zero whenever the page was refreshed. Now, the opponent foul total is written to Firestore on each increment and is restored from Firestore when the page loads. If you take a halftime break, close the browser, and reopen the tracker for the second half, the opponent's first-half foul total is shown correctly.

Foul Persistence Across Sessions

All foul state — per-player fouls and opponent team fouls — is preserved as part of the game's persisted state. This means you can close the Live Tracker during halftime, allow the device to sleep, reopen the browser, navigate back to the game, and resume tracking with accurate foul counts. There is no need to manually re-enter foul data after a break.

Tracking Stats Live

Stat tracking is the core function of the Live Tracker. Every stat event is immediately broadcast to live-game.html consumers and written to the game's event log in Firestore.

Per-Player Stat Buttons

To record a stat for a player, tap that player's name or card in the On Court panel to expand their stat buttons, then tap the relevant stat button. Available stat types for basketball include: 2PT (two-point field goal), 3PT (three-point field goal), FT (free throw made), REB (rebound), AST (assist), STL (steal), BLK (block), TO (turnover), and FTA (free throw attempt, for tracking attempts separately from makes). Each tap creates a new event document in the games/{gameId}/events/ Firestore collection and updates the player's aggregate in games/{gameId}/aggregatedStats/.

Real-Time Broadcast to Game Day

Simultaneously with writing to the events and aggregatedStats collections, the tracker writes to games/{gameId}/liveEvents/. The live-game.html page uses a Firestore onSnapshot() listener on liveEvents to receive updates in real time. When you tap a stat button, fans watching the live feed typically see the update within one to two seconds, depending on network conditions. There is no separate publish or broadcast step — every stat tap is a live broadcast.

Undoing the Last Stat

If you tap the wrong stat button by mistake, use Undo Last immediately. Undo Last removes the most recently written event from Firestore and rebroadcasts corrected aggregate stats to all Game Day consumers. Both your team's stats and opponent stats can be undone. The key constraint is that Undo Last only reverses the single most recent event. If you tap 2PT for the wrong player and then tap another stat before hitting Undo, Undo will reverse the second tap, not the first. Use Undo Last immediately after the error — before any subsequent stat entries.

For errors that are discovered later (after multiple subsequent taps), the stat cannot be corrected through the tracker UI. Contact your team admin. Correcting older events requires direct access to the Firestore event log, which is available to global admins and team owners.

Zero-Stat Participation Markers

A player who appears in the game (is in the starting lineup or is subbed in at any point) but records zero stats is explicitly marked as a participant in the game's aggregate record when the game is finished. This is an important change from earlier behavior, where players with no stats might not appear in a game's participant list at all — meaning their game history in their player profile would not show the game. Now, every player who was on the court at any point will appear in game history, even if their stat line is all zeros. The participation marker is written during the Finish flow.

Clock and Period Management

The game clock and period controls are in the top section of the Live Tracker. Clock management is one of the most frequently asked-about areas because of historical behavior around reloads — all of those issues are resolved in the current version.

Starting and Stopping the Clock

The Start / Stop button controls the live clock. When the clock is running, it counts up from the period start time (or from its restored elapsed time if this is a resumed session). Tap Stop during dead balls — timeouts, fouls, out-of-bounds play stoppages. Tap Start again when play resumes. The clock's running or stopped state is persisted continuously to Firestore — you do not need to do anything special to save it.

Period Changes

To advance the game to the next period, tap the period advance control. The period indicator steps through Q1, Q2, Q3, Q4, and OT. Period changes are broadcast to live-game.html — fans see the updated quarter display in real time. After a period change, the clock does not automatically reset — stop the clock at the end of a period, advance the period, then start the clock again when the new period begins. If the game goes to overtime, advance past Q4 to OT.

Clock Restoration After a Reload

This is the most significant improvement in the current tracker version. In previous versions, refreshing the page during a game would reset the clock to zero and lose the running/stopped state. Coaches had to manually estimate elapsed time and re-enter it. This is no longer necessary. The clock's elapsed time in seconds and its running state are written to Firestore on a continuous basis. When the page loads, it reads these values from Firestore and immediately initializes the clock to the correct state. If the clock was running at the time of the reload, it will be running again within moments of the page restoring. If it was stopped, it will be stopped at the correct elapsed time.

Halftime and Timeout Handling

For a halftime break, stop the clock at the end of the second quarter. You can safely close the browser or put the device away. When you reopen the tracker for the second half, tap Start again to resume from the correct elapsed position. For timeouts, stop the clock when the referee signals the timeout, and start it again when play resumes. If you want to log the timeout as an event visible in the game replay, use the Log button in the Game Day Command Center — the tracker itself does not have a dedicated timeout event button.

Goal Sport Games — Live Broadcast Simple

Live Broadcast Simple is a streamlined tracking mode designed for sports where scoring happens infrequently but fans want live score updates throughout the game. It strips out the individual player stat grid and provides only what is needed to run a live broadcast: game clock, home score, away score, and individual goal events.

Supported Sports

Live Broadcast Simple is available for: soccer, hockey, lacrosse, field hockey, and water polo. These are all goal-scoring sports where the primary live stat is score. Basketball, baseball, softball, volleyball, and football do not use Simple mode — those sports have different tracking requirements that are better served by the full Live Tracker or Standard Tracker.

How to Access Live Broadcast Simple

Navigate to edit-schedule.html and click Track next to a goal-sport game. The Track modal shows two options: Live Broadcast Tracker (full per-player stats) and Live Broadcast Simple (score, clock, goals). Select Live Broadcast Simple. The simplified tracker opens. If you are tracking a basketball, baseball, softball, volleyball, or football game, the Simple option will not appear — only sports classified as goal sports show this option in the modal.

What Live Broadcast Simple Tracks

  • Home score: tap the + button next to the home team to add a goal. The score increments by one and is immediately broadcast to live-game.html.
  • Away score: tap the + button next to the away team to add an opponent goal.
  • Game clock: same Start/Stop clock control as the full tracker. Clock state is persisted and restored on reload.
  • Goal events: each goal tap is recorded as a goal event with a timestamp, the scoring team, and optionally the player who scored (if your roster is configured). The goal feed is visible in the live game view.

Individual player stats — assists, shots on goal, saves, penalties — are not tracked in Simple mode. If you need those, use the full Live Broadcast Tracker instead.

When to Use Live Broadcast Simple

Use Simple when you are operating solo on the sideline and cannot simultaneously watch the game and track individual player stats. It is also the right choice for games where parents have requested a live score feed but your team does not have a dedicated stat tracker. Simple gives fans real-time score updates with minimal cognitive load on the person running the sideline.

Broadcasting from Simple

Live score updates from Simple are broadcast to live-game.html in exactly the same way as the full tracker. Fans see the current score, the game clock, and the goal feed in real time. The experience for fans watching the live view is identical — they do not see which tracking mode is in use. The difference is only in how much detail the sideline tracker records.

Baseball and Softball Tracking

Baseball and softball are now fully supported as distinct sports in ALL PLAYS. They have their own stat template, formations view, game structure defaults, and practice drill library entries.

Supported Sports and Stat Template

Both Baseball and Softball are available as team sport selections. When a game is created for a baseball or softball team, the stat tracker automatically loads the built-in baseball stat template. This template includes the following pre-configured stat types:

  • AB — At-Bats: plate appearances that do not result in a walk, hit by pitch, or sacrifice.
  • H — Hits: total base hits (singles, doubles, triples, home runs combined for speed of entry).
  • R — Runs: runs scored by the player.
  • RBI — Runs Batted In: credit to the batter when a plate appearance causes a run to score.
  • BB — Walks: base on balls received.
  • FP — Fielding Plays: a general-purpose fielding credit for putouts, assists, and other defensive plays.

These stats are pre-configured and ready to use without any manual stat setup. Coaches do not need to create a custom stat tracker config — the baseball template is applied automatically to any game where the team sport is set to Baseball or Softball.

Formations and Diamond View

Diamond formations are available in game-plan.html for baseball and softball games. The formation view shows a baseball diamond with nine fielding positions. Coaches can assign players to positions (pitcher, catcher, first base, second base, shortstop, third base, left field, center field, right field) and save the formation as part of the game plan. The diamond view also supports DH (designated hitter) assignments for leagues that use the DH rule.

Seven-Inning Default

Baseball and softball games default to seven innings in the game structure configuration. This matches standard high school and youth league formats. Coaches running shorter games (for example, five-inning tournament games) can override the inning count in the game record before tracking begins. The inning structure is reflected in the period selector in the Standard Tracker — periods are labeled "INN 1" through "INN 7" (or however many innings are configured) rather than Q1 through Q4.

Batting Order

Batting order planning is supported in the game plan. Coaches can assign players to batting slots (1 through 9) in advance and save the batting order as part of the pre-game plan. The batting order is visible to any admin viewing the game plan. Players are tracked through lineup rotations — if a pinch hitter is entered, the batting slot is updated accordingly.

Run Scoring

Run scoring follows baseball scoring conventions. Runs are recorded per batter using the R stat button in the tracker. Each run tap increments the team score in the game record and is reflected in the live broadcast if the game is being tracked with a live broadcaster active. RBI credits are entered separately per plate appearance.

Starter Drills

The practice drill library includes baseball and softball starter drills. These cover common scenarios including fielding grounders, outfield fly ball practice, batting tee work, pitching mechanics, and base running drills. Starter drills appear automatically in the drill library when the team sport is set to Baseball or Softball, giving coaches a ready-made set of practice activities without needing to build a custom drill library from scratch.

What Gets Persisted (Resilience Summary)

One of the most important reliability improvements in the Live Tracker is comprehensive state persistence. The following table summarizes what is persisted to Firestore and restored automatically versus what is not saved if the game is abandoned without a proper finish.

Data That Survives Page Reloads and Game Reopens

  • Clock elapsed time and running state — restored on reload. The clock resumes from the correct elapsed time with the correct running or stopped state.
  • Substitution lineup (which players are on court) — written to game.liveLineup after each applied substitution. Restored on reload.
  • Per-player stat aggregates — written to games/{gameId}/aggregatedStats/ on each event. Restored on reload from Firestore.
  • Opponent foul counts — persisted in opponentStats and restored during tracker hydration on load. Previously reset to zero on reload; now correctly persisted.
  • Per-player fouls — persisted as part of each player's game state in Firestore. Restored on load.
  • Playing time elapsed per player — saved to the game record on game finish. Not calculated from memory but from persisted sub event timestamps.
  • Zero-stat participation markers — written explicitly during the Finish flow. Players who appeared but recorded no stats are marked as game participants.
  • Period / quarter state — the current period is persisted and restored on reload. The tracker returns to the correct period after a reload.
  • Stat event log — all events in games/{gameId}/events/ are Firestore documents. They are never lost on reload.

Data That Is Not Preserved Without a Proper Finish

  • Wrap-Up notes — free-text notes entered in the post-game wrap-up screen are not saved until you explicitly submit the wrap-up form. If you navigate away without submitting, notes are lost.
  • Pre-finish summary text — any auto-generated or manually edited summary text shown in the game wrap-up preview is not persisted until saved.
  • Unsaved lineup changes (not yet Applied) — if you select an OUT/IN pair in the sub queue but do not tap Apply Sub before the page reloads, that pending sub is lost. Only applied substitutions are persisted.

Finishing the Game

Properly finishing the game through the Live Tracker is important. Do not simply close the browser when the game ends — use the Finish button to formally close the game record and save all end-of-game data.

  1. Stop the clock. When the final buzzer sounds, tap Stop to halt the game clock. This ensures the final elapsed time is correct in the game record.
  2. Tap Finish. The Finish button is in the clock control area. Tapping Finish opens the game completion confirmation screen.
  3. Confirm final scores. The confirmation screen shows the current home and away scores. Verify these are correct. If a stat entry was missed (for example, the final basket was not tapped in time), update the score here before confirming. This is your last chance to correct the final score before the game record is locked.
  4. Playing time is saved. The Finish flow calculates playing time for all players based on their sub-in and sub-out event timestamps. This includes players with zero stats who were explicitly on the court — they receive an accurate playing time record. Playing time is saved to the game record at this step. Previously, playing time was lost on finish in some edge cases — this is now fixed.
  5. Zero-stat participants are marked. Any player who appeared on the court (starting lineup or substituted in) but recorded no individual stats is explicitly marked as a game participant in the aggregate. This ensures their player profile game history includes this game.
  6. Game record is marked complete. The game's status is set to "finished" in Firestore. The live-game.html broadcast transitions from live to final. Stat aggregates are locked.
  7. Proceed to Wrap-Up or Match Report. After finishing, you are prompted to navigate to the Game Day Wrap-Up (for AI-generated summaries and social sharing) or the match report (for a detailed stat review). The AI summary generation for the game is available from the Wrap-Up screen.

Common Questions

Why did the clock reset when I reloaded?

In the current version, the clock should not reset on reload — the elapsed time and running state are persisted to Firestore continuously. If the clock did reset after a reload, the most likely cause is that the game was not fully initialized (started) before the reload occurred. The clock is persisted from the moment you tap Start. If you navigate to the tracker, configure the lineup, and then reload before tapping Start, the clock will initialize at zero on the next load because no clock state has been written yet. Confirm the game was in a Started state before the reload — if the Start button had been tapped and the clock was visibly running, the clock state should restore correctly.

Can two coaches use the Live Tracker for the same game simultaneously?

This is not recommended. The Live Tracker is designed for single-device operation. If two devices are simultaneously writing stat events, sub changes, and foul counts to the same game record, the writes can interleave in unexpected ways. Stat aggregates may count events twice. Lineup state may conflict between devices. Designate one device as the authoritative tracker for the game. If a second coach wants to watch live data, they can view the Game Day Command Center or live-game.html as a read-only observer without interfering with the tracking device.

What is the difference between the Live Tracker and the Standard Tracker for basketball?

The Live Tracker includes features specifically designed for basketball sideline operation: the quick substitution panel with queued sub support, the opponent foul counter, per-player foul tracking with "FOULED OUT!" alerts, and real-time broadcast of stat events to live-game.html as they are recorded. The Standard Tracker (track.html) provides a full stat grid with manual period and timer entry but does not have the live broadcast sub panel. Both trackers write to the same Firestore game record, but the Live Tracker is the right choice for any basketball game where live broadcast and sideline sub management are priorities.

Can I use the Live Tracker for non-basketball sports?

The Live Tracker is optimized for basketball. For goal sports (soccer, hockey, lacrosse, field hockey, water polo), use Live Broadcast Simple when you want a lightweight live score broadcast, or use the full Live Broadcast Tracker when you also want per-player stat tracking. Baseball and softball should use the Standard Tracker with the built-in baseball stat template, which provides sport-appropriate stat buttons (AB, H, R, RBI, BB, FP) and seven-inning game structure. Using the basketball-optimized Live Tracker for non-basketball sports would give you basketball stat buttons (2PT, 3PT, FT, etc.) that do not match the sport being played.

What does "FOULED OUT!" mean on a player card?

A player card displays "FOULED OUT!" in prominent red text when that player has accumulated five or more fouls. This follows standard basketball rules: a player with five personal fouls is disqualified from further participation. The tracker signals this prominently so the coach cannot miss it during the flow of the game. The "FOULED OUT!" label persists on the card until you use the sub panel to remove the player from the court. The tracker does not automatically substitute the player — you must initiate the sub manually. Once the fouled-out player is subbed out, their card moves to the bench pool and the alert is no longer displayed in the On Court panel.

Can I track opponent stats?

Yes, in a limited way. The opponent quick stats panel tracks opponent team fouls (with a per-tap foul counter) and allows score updates for the opposing team. This gives you a running total of opponent fouls — useful for tracking team foul bonus situations. Opponent foul counts are persisted and restored on reload. Full per-player tracking of individual opponent players is not available in the Live Tracker — that level of detail would require the opponent team to also be using ALL PLAYS, which is a separate feature (linked opponent teams).

What if I accidentally tap the wrong stat?

Use Undo Last immediately after the incorrect tap. Undo Last removes the most recent event from Firestore, recalculates the aggregate stats, and rebroadcasts the corrected numbers to all Game Day consumers. The undo only reverses the single most recent event. If you tap another stat before using Undo, the Undo will reverse that second tap, not the original error. For errors discovered after multiple subsequent stat entries, the stat cannot be corrected through the tracker UI — the event log in Firestore must be edited manually by a global admin or team owner.

How does Live Broadcast Simple differ from the full Live Tracker?

Live Broadcast Simple tracks only three things: game clock, home score, and away score (plus optional goal-scorer identity on each goal). There is no individual player stat grid, no substitution panel, no per-player foul tracking, and no opponent foul counter. It is designed for one-person sideline operation when the goal is purely to give fans a live score feed without the overhead of full stat entry. The full Live Tracker (or full Live Broadcast Tracker) includes all of that — per-player stats, substitution management, foul tracking, and live broadcast — but requires more attention and is harder to operate solo while coaching.

Recovery and Troubleshooting

Most Live Tracker issues fall into one of the categories below. Work through the relevant item before escalating to your admin.

Clock shows wrong time after reload

Verify that the game was in a Started state before the reload. The clock is persisted only after you tap Start — if the game was set up but not yet started, the clock initializes at zero on the next load. If the clock was running and still reset after a reload, confirm you are loading the current version of the tracker (not a cached older version). Force-refresh the page with Ctrl+Shift+R (or Cmd+Shift+R on Mac) to bypass cache and load the latest code. If the issue persists, report it to your admin with the game ID and approximate time of the reload.

Opponent fouls reset to zero

Opponent foul persistence was fixed in the May 2026 update. If opponent fouls are still resetting, confirm you are running the current version of the tracker (check for a cache-busted URL with a ?v= parameter in the script tags). Force-refresh the page. If the reset is still occurring after a force-refresh, this is a bug — report it to your admin with the game ID so the Firestore data can be inspected directly.

Substitution not showing after reload

Confirm that you tapped Apply Sub (or Apply All Subs) before the page reloaded. Substitutions in the sub queue that have not been Applied are staging area selections only — they are not written to Firestore until you tap Apply. If a substitution was in the queue but not applied, it will not appear after a reload. Re-enter the substitution from scratch using the OUT/IN buttons.

Stat undo not reverting on the fan scoreboard

When you tap Undo Last, the tracker rebroadcasts corrected aggregate stats to live-game.html. Fans may see a brief delay of five to thirty seconds before the corrected stats appear, depending on their network connection and how quickly the Firestore snapshot listener fires. If the scoreboard visible to fans still shows incorrect stats after thirty seconds, ask a fan to reload their live-game.html page. A fresh load will pull the current aggregate from Firestore directly.

Fouled-out player still showing active

The "FOULED OUT!" label is a visual alert, not an automatic bench action. You must manually use the substitution panel to sub out the fouled-out player. Tap the OUT button on the fouled-out player in the On Court panel, tap IN on their replacement from the bench pool, and tap Apply Sub. The fouled-out player will move to the bench and their alert will be removed from the On Court panel.

Playing time missing from player profile after game finish

Playing time is saved during the Finish flow — specifically when you tap the Finish button and confirm the final score. If you abandoned the game without using the Finish button (for example, by simply closing the browser), the playing time calculation step was not completed and time data was not saved to the game record. To recover: open the game record as an admin and check if the game status was set to "finished". If the status is still "live" or "in-progress", the game can be re-opened, the final score confirmed, and the Finish button tapped to complete the flow. If the game status is stuck, contact a global admin for a manual Firestore update.

Baseball stat template not appearing

Confirm that the team's sport setting is set to Baseball or Softball in the team settings. Navigate to the team's Edit Team page (accessible from the admin dashboard) and check the Sport field. If the sport is set to a different value, the baseball stat template will not be loaded. Update the sport setting, save the team record, and reopen the game's stat config. The baseball template should now appear automatically. If the game's stat tracker config was manually customized, it may override the default template — in that case, the game's statTrackerConfigId may need to be updated by an admin.

Live Broadcast Simple not showing in Track modal

Live Broadcast Simple only appears for goal-sport games. Verify that the game's sport type is one of the supported goal sports: soccer, hockey, lacrosse, field hockey, or water polo. Basketball, baseball, softball, volleyball, and football do not show the Simple option. If the sport is correct but Simple is still not appearing, check that the game record's sport field is saved correctly — if it was recently changed, try reloading the schedule page before opening the Track modal again.

Zero-stat player not appearing in game history

Zero-stat participation marking was introduced in the May 2026 update. Games tracked and finished after that update will have explicit participation markers for all players who appeared on the court, regardless of stats recorded. Games that were finished before that update may not have these markers — the player's game history for those older games may not show the game even if they played. This is a known limitation for historical data. If accurate historical participation records are critical, contact your admin — a migration script can be run against older game records to back-fill participation markers.

Live broadcast not updating for fans

Check that the game is in an active live state — the tracker must have been started (Start button tapped) and not yet finished. Game Day consumers watching live-game.html receive real-time updates only while the tracker is actively running. If the game is in a pre-game state (not yet started) or a post-game state (finished), the live event feed is not active. If the game is started but fans are still not seeing updates, confirm that the tracker device has a working internet connection — all stat events require a Firestore write to propagate. A brief network interruption will cause stat events to queue locally and sync when connectivity is restored, but fans will see a gap in the live feed during the interruption.

Can't find the Live Tracker option for a game

The Live Tracker is accessible through the Track modal from the schedule. If the Track button is not appearing for a game, confirm that you are logged in with Coach, Admin, or Scorekeeper access for that team. Parent accounts do not have access to the tracker. If you have the correct role and still do not see the Track button, verify that the game's status is not marked as "cancelled" — cancelled games do not show the Track option. If the game is upcoming or in progress, the Track button should be visible.

The Live Tracker is one step in a larger game-day workflow. These related guides cover the steps before and after live tracking.

  • workflow-track-game.html — Tracker mode selection and the game finish flow. Covers how to choose between tracker types, configure stat columns, and properly complete a game record after the final buzzer.
  • workflow-game-day.html — Game Day Command Center, lineup setup, and broadcast configuration. Covers the read-side of a live game: monitoring the live feed, managing the Game Day volunteer access list, and setting up the broadcast for fans before tip-off.
  • workflow-postgame.html — Game report, replay, and AI summary after finish. Covers the wrap-up flow, how to generate an AI-powered game summary, how to review the play-by-play replay, and how to share the final stat sheet with parents and players.
  • workflow-schedule.html — Creating the game event before tracking. Covers how to add a game to the schedule, set up the opponent, configure the stat tracker, and assign Game Day volunteers before the game begins.