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.
The three tabs follow the natural coaching workflow:
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:
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.
Tap + Add Player at the bottom of the Team Info tab. Fill in:
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 are used by the auto-assign algorithm to balance shift strength. A rough guide:
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.
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.
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:
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.
Tap the Edit button on any week card to update its date, strategy, and station drills. Tap Save when done.
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.
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.
Lock a game after it's over to preserve the rotation history without accidentally editing it.
The number of shifts is calculated automatically from the session's half length and shift length:
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.
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.
Tap Auto-Assign to let SquadRotate fill all shifts automatically. The algorithm balances:
See Under the Hood for the full scoring breakdown.
Between consecutive shift cards (2 through N), SquadRotate shows a compact subs summary banner describing what changes between that shift and the previous one:
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.
Each shift card includes a chalkboard — a green-pitch diagram showing where each player is positioned for that shift:
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.
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.
The dropdown options are: GK DEF MID STR Bench
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.
Each shift card header shows a small colored dot — the quality indicator for that shift's power balance:
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.
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.
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.
| Player | GK | DEF | MID | STR | BN |
|---|---|---|---|---|---|
| Alex | – | 2 | 1 | 3 | – |
| Jordan | 5 | – | – | – | 1 |
| Casey | – | 1 | 2 | 2 | 1 |
Cell highlighting:
The matrix updates live every time you change a role dropdown.
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.
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:
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.
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:
Three consecutive attacking shifts produce two warnings (shifts 2 and 3 in the sequence).
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:
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).
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).
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 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.