← Back to App

On this page

  1. Getting Started
  2. Team Info & Roster
  3. Practice Schedule
  4. Game Day
  5. Statistics & Tracking
  6. Under the Hood — How the Logic Works
  7. Your Data & Storage

Getting Started

Switching teams

SquadRotate supports two independent team slots — one for U7–U8 and one for U9–U12. Use the buttons at the top of the page to switch between them. Each team has its own roster, formation, practice schedule, and game history, stored separately.

Team names can be edited directly from the Team Info tab. Tap the name to change it — it updates everywhere, including the switcher buttons.

Tab order

The three tabs follow the natural coaching workflow:

  • Team Info — build your roster and configure your formation
  • Practice — plan your weekly sessions and track coach availability
  • Game Day — run your in-game rotation across multiple saved sessions
👥

Team Info & Roster

Formation selector

At the top of the Team Info tab is the Formation panel. Set how many players you want in each position for a typical field shift:

  • GK — goalkeepers (almost always 1)
  • DEF — defenders
  • MID — midfielders
  • STR — strikers

The counts must add up to your team size (the number of players on the field at once). SquadRotate shows a running total and highlights in red if the sum is off. The auto-assign algorithm and shift validation both use these formation numbers — change them here before running auto-assign if your league uses a different shape.

💡

The default formation is 1 GK / 3 DEF / 1 MID / 2 STR (3-1-2 for 7v7). For 9v9 you might use 1 GK / 3 DEF / 2 MID / 2 STR instead.

Adding a player

Tap + Add Player at the bottom of the Team Info tab. Fill in:

  • Name — how they'll appear on shift cards
  • Kit number — displayed on their roster card
  • Power rating — your assessment of the player's current ability level: 1 Developing 2 Solid 3 Strong
  • Preferred positions — check all positions they're comfortable playing; this guides the auto-assign algorithm
  • Notes — any coaching notes (attendance patterns, skill areas to develop, etc.); shows as a truncated preview on the roster card

Editing or removing a player

Tap any player card to open the edit modal. Make your changes and tap Save, or tap Delete to remove the player from the roster.

Power ratings — how to assign them

Power ratings are used by the auto-assign algorithm to balance shift strength. A rough guide:

  • 1 — still learning the basics; needs easier matchups or more rest
  • 2 — solid contributor; holds their own in most positions
  • 3 — one of your stronger players; can anchor a shift
💡

You don't need to be precise. The goal is rough balance across shifts — a mix of 1s, 2s, and 3s per shift is better than all your 3s in shift 1 and all your 1s in shift 6.

📋

Practice Schedule

Reading the weekly agenda

The Practice tab shows weekly agenda cards — one per session. Each card lists the date, the overall strategy/objective for that session, and the drill assigned to each coach's station.

U7–U8 teams have three coach stations; U9–U12 teams have two.

Coach availability

Each week card shows a row of coach name chips at the top. Tap any chip to toggle that coach's availability for the week:

  • ✓ Alex — coach is present (green); their station drill shows normally
  • ✗ Alex — coach is unavailable (red); their station row is dimmed and marked Unavailable

Availability is saved per week, so you can pre-mark coaches as absent before practice day and have the plan reflect the real situation at the field.

Editing a week

Tap the Edit button on any week card to update its date, strategy, and station drills. Tap Save when done.

Adding and removing weeks

Use + Add Week at the top of the Practice tab to create a new entry. Tap Edit on any week and use the Delete button (with confirmation) to remove it.

All changes persist automatically in your browser's local storage.

Game Day

Game sessions — managing multiple games

Each game is saved as a named session. The session bar at the top of the Game Day tab shows the current session and lets you switch between past games or create a new one.

  • Tap + New Game to open the new game form — set the opponent name, date, half length (minutes), and shift length (minutes).
  • The session dropdown lists all saved games, newest first. Switching sessions loads that game's shifts and absent list.
  • Tap 🔓 Lock to lock the current session — locked sessions are read-only; role dropdowns and auto-assign are disabled. A red banner appears to confirm the game is locked. Tap again to unlock.
💡

Lock a game after it's over to preserve the rotation history without accidentally editing it.

Dynamic shift count

The number of shifts is calculated automatically from the session's half length and shift length:

Shifts per half = floor(halfLength ÷ minsPerShift)
Example: 48-min half ÷ 8-min shifts = 6 shifts
Example: 30-min half ÷ 8-min shifts = 3 shifts

The shift cards update immediately when you change these values. Any remainder minutes (e.g. 2 min left over from a 26-min half at 8 min/shift) are shown as a note — you can use that time for a final quick burst or ignore it.

Marking players absent

At the top of the Game Day tab is the Absent panel — a row of chips, one per player. Tap a chip to mark that player absent (shown with strikethrough and red highlight). Absent players are excluded from auto-assign and appear faded in the statistics.

⚠️

Mark absences before running Auto-Assign. If you run auto-assign and then mark someone absent, you'll need to re-run it or manually adjust the affected shifts.

Running Auto-Assign

Tap Auto-Assign to let SquadRotate fill all shifts automatically. The algorithm balances:

  • Power ratings — no shift should be stacked all 3s or all 1s
  • Position preferences — players go where they prefer when possible
  • Prior shift counts — players who've sat the bench more get prioritized for field time
  • Goalkeeper rotation — the GK role rotates among players who have it as a preference

See Under the Hood for the full scoring breakdown.

Shift change summary

Between consecutive shift cards (2 through N), SquadRotate shows a compact subs summary banner describing what changes between that shift and the previous one:

OFF Jordan, Casey — coming off the field
ON Alex, Morgan — coming on from bench
MOVE Taylor: DEF → MID

This gives you a quick at-a-glance view of the substitutions to make at each shift change, without having to compare two full cards side by side.

Chalkboard view

Each shift card includes a chalkboard — a green-pitch diagram showing where each player is positioned for that shift:

AlexJordan
Casey
MorganTaylorSam
Riley

Player chips are color-coded by position (purple = GK, blue = DEF, amber = MID, red = STR). Bench players are listed below the pitch. The chalkboard updates live as you change role dropdowns.

Manual adjustments & swap suggestions

Each player in a shift card has a position dropdown. When you change a player's role to a field position, SquadRotate opens a swap modal — a ranked list of other players you might want to trade positions with to keep the shift balanced.

  • Candidates are ranked by how well their position preferences match the vacated role
  • Field players (non-bench) appear above bench players since a swap has more tactical impact
  • Tap any candidate to execute the swap — both players switch roles in one action
  • Tap outside the modal or the X button to dismiss without swapping

The dropdown options are: GK DEF MID STR Bench

Shift validation — red and green outlines

Once you start assigning players to a shift, SquadRotate checks that the formation is correct against your configured formation counts. A green outline means the shift is valid. A red outline means something is off — the error message tells you exactly what to fix (e.g. "2 goalkeepers assigned — only 1 is allowed.").

Validation only fires once at least one role has been assigned. Empty shift cards stay neutral.

Traffic light quality indicator

Each shift card header shows a small colored dot — the quality indicator for that shift's power balance:

Good balance — power ratings are well distributed
Acceptable — slight imbalance, but workable
Imbalanced — consider swapping players between shifts
📊

Statistics & Tracking

Shift count tracker

Below the shift cards, the stats table shows each player's total field shifts and goalkeeper appearances for the current game. The bar next to the shift count fills relative to the player with the most shifts — use it to spot anyone who has had significantly more or fewer turns than the rest.

Fatigue warnings

SquadRotate watches for players assigned to two consecutive attacking shifts (Striker or Midfield back-to-back). These are the most physically demanding positions and repeated consecutive exposure can tire young players quickly.

When a player is flagged, their name chip in the affected shift card shows a ⚠ yellow badge. The flag clears as soon as the consecutive chain is broken by any non-attacking role (Goalkeeper, Defense, or Bench).

ℹ️

Fatigue warnings are advisory only — they don't block any assignment. Use them as a nudge to rotate attacking players more frequently, especially in warm weather.

Position rotation matrix

Below the shift count tracker is the rotation matrix — a table showing how many times each player has played each position across all shifts in the current game.

PlayerGKDEFMIDSTRBN
Alex213
Jordan51
Casey1221

Cell highlighting:

  • Yellow — player has been in this position 3 or more shifts; consider rotating them
  • Red — player has been in this position nearly every shift; rotation is overdue
  • — zero appearances in this position this game

The matrix updates live every time you change a role dropdown.

⚙️

Under the Hood — How the Logic Works

Formation rules

SquadRotate's formation is configurable from the Team Info tab. The default is 1-3-1-2 (GK / DEF / MID / STR) for 7v7. You can change it to match your league's format — for example, 1-3-2-2 for 8v8 or 1-3-2-3 for 9v9. The validation rules and auto-assign algorithm both read your configured formation at runtime.

Any roster size above your team size will have players rotating through the bench each shift — the algorithm accounts for this automatically.

Auto-assign scoring formula

When you tap Auto-Assign, the algorithm scores every possible player-to-position assignment and picks the combination that minimizes the total cost across all shifts. The key factors in that score:

Position preference match — large bonus if the player listed this position as a preference. Players always go where they want first when possible.

Power balance — each shift's average power rating is compared to the team average. Assignments that keep all shifts near the mean are preferred over ones that pile strong players into one shift.

Bench equity — players who have already sat the bench more times this game are deprioritized for bench assignments, so bench time spreads evenly.

GK rotation — among players with GK as a preference, goalkeeper duty rotates so no one player is stuck in goal every shift.
ℹ️

Auto-assign produces a good starting point — not a perfect solution. You know your kids better than any algorithm does. Use manual adjustments freely after the initial auto-assign.

Fatigue detection logic

The fatigue warning system scans every player's shift sequence and looks for consecutive pairs where both roles are attacking (Striker or Midfield). It flags the second shift in the consecutive pair:

  • STR → STR — flagged
  • MID → MID — flagged
  • STR → MID or MID → STR — flagged
  • STR → DEF → STR — not flagged (DEF breaks the chain)
  • STR → Bench → STR — not flagged (Bench breaks the chain)

Three consecutive attacking shifts produce two warnings (shifts 2 and 3 in the sequence).

Traffic light scoring

The quality dot on each shift header is based on the sum of power ratings for field players (non-bench) in that shift, compared to the ideal average across all shifts:

  • Within ~10% of average → green
  • 10–25% off → yellow
  • More than 25% off → red

Validation thresholds

Shift validation fires as soon as one or more players have been assigned a non-bench role. It checks exact counts against your configured formation and generates a specific corrective message for each violation (e.g. wrong goalkeeper count, too many strikers, wrong total field count).

💾

Your Data & Storage

Where your data lives

Everything in SquadRotate — rosters, team names, practice schedules, game sessions, shift assignments — is stored in your browser's localStorage. No account, no server, no syncing. The data lives on the device and browser you're using.

Each team uses three localStorage keys: the main team state (roster, formation), a sessions store (game history), and a shifts store (per-session shift data).

Switching devices

If you open SquadRotate on a different phone or browser, you'll start with the default empty rosters. There is currently no export or sync feature — the app is designed for one coach, one device.

Clearing data

⚠️

Clearing your browser's site data or using "Clear browsing data" will erase all SquadRotate data permanently. There is no recovery option. If you need to wipe and start fresh, this is how to do it — but do it intentionally.