You can build a roster by hand, or bring one in with a code from your league:
If a head coach invited you rather than the other way around, you're not starting a team at all — you're joining theirs. Create a SquadRotate account with your own email, then on the empty roster screen tap Have an assistant coach invite code? and enter the code they gave you (or follow the link they emailed you). You'll land in their team with your own read-only view. See Coaching Staff — Inviting an assistant coach to sign in for exactly what that view covers.
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:
The Team Info tab has a Coaching Staff panel where you list everyone helping with your team — head coach, assistant coaches, team parent, whoever you like.
From the Team Info tab, tap + Add Coach. Enter a name and a role — Head Coach, Assistant Coach, or anything you like. Tap any existing entry to edit its name or role, or to delete it.
From the Team Info tab, tap + Invite Assistant Coach. Choose Share code to generate a one-time code, good for 7 days, to text them or read off at practice — this is the most reliable way to get them in. Or choose Send email and enter your assistant's email address to have SquadRotate email them a sign-in link directly; it's more convenient, but if they end up on an empty team instead of yours after signing in, switch to a share code (see "If the invite doesn't work" below).
Your assistant needs their own SquadRotate account, using a different email address than yours. If they don't have one yet, they tap Create an account on the sign-in screen. If you sent them a code rather than an email invite, they create their account, sign in, and land on their own empty roster screen — from there they tap the Have an assistant coach invite code? link and enter it. If they're an existing coach who already has their own roster, that same link sits on the Team Info tab, just below + Invite Assistant Coach. If they're already signed in read-only as an assistant on someone else's team, Team Info isn't in their view at all — they instead open the Account menu at the top of the screen and tap Enter invite code.
Note: An assistant coach can now help out on more than one team, and a head coach with their own team in SquadRotate can redeem someone else's invite too — coaching your own kid's team and assisting a sibling's or a teammate's no longer needs two separate accounts. Redeeming a code from an account with existing access (yours or another team's) adds the new team alongside what you already have — nothing is replaced or refused. A team switcher appears in the header the moment there's more than one place to land: your own team plus each team you assist, one tap to move between them, with the current one highlighted.
An invited assistant coach sees Practice and Game Day exactly as you've set them up — current lineup, rotations, and the live game as it runs — but every control that changes something is disabled for them: no substitutions, no starting or ending a live game, no marking players absent, no editing practice plans. Team Info disappears from their view entirely. A "Read-only — Assistant Coach view" banner reminds them of this whenever they're signed in, and the switcher (if they have one) is how they reach a different team or their own.
Open the invite panel from + Invite Assistant Coach on the Team Info tab to see pending invite codes and any assistant coaches who've already redeemed one. Tap Revoke next to a pending code to cancel it before it's used, or next to an assistant coach's name to remove their access. A revoked assistant coach loses visibility into your team within one refresh cycle. If they still hold access to another team — their own, or one they also assist — they're switched there automatically; otherwise they're signed out.
After redeeming, your assistant should land on your team with the read-only banner showing.
If they end up on an empty team instead — a blank roster, or a team called something like "Team 1" — the invite hasn't attached, even though signing in appeared to work. Don't keep generating new codes. Email support@gizmobuild.io with your team name and your assistant's email address and we'll link them up directly.
Worth checking first: they're signed in with their own email address rather than yours, and the code hasn't expired (codes last 7 days and work once) or been revoked and replaced. If your assistant sees a "code already used" error on a code you know is fresh, someone else likely redeemed it first — testing it themselves, or opening a shared link on a coach's own device.
Questions about the invite flow, or need something it doesn't cover? Email support@gizmobuild.io.
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.
Tip: 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.
The size pills (4v4 through 11v11) set how many players are on the field at once. Changing size clears the shift assignments for the game you have open, because a lineup built for 9v9 has no meaning in 7v7.
Your old lineup is kept. Switch back to the size you came from and the assignments come back exactly as they were, pins included. SquadRotate tells you before it clears anything, and says how many shifts are affected.
Two limits worth knowing:
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.
If your league runs on LeagueRun, your commissioner (for GORC, that's Bill) can send you a share code by email. The code pulls your team straight into SquadRotate. No manual typing of the roster.
Before you redeem a code, you need a SquadRotate account. Signing up takes an email address and a password. Tap Create an account on the sign-in screen if you haven't already.
To redeem a code:
Your roster fills in automatically as soon as the code is accepted.
Redeeming a code pulls in:
Note: Once a roster is imported, it's your ordinary SquadRotate roster. Edit power ratings, positions, and notes the same way you would with a hand-built team. There's no live connection back to LeagueRun. Edits you make here don't sync back, and changes on the league side don't push to you automatically. If your roster changes upstream, redeem a fresh code to pull in the update. See below.
Redeeming a code always replaces your current roster, coaching staff, game schedule, and practice info. It never merges with what's already there: every field above gets swapped for whatever LeagueRun sends, including coaches you added by hand.
Any manual edits you've made to players are lost when you re-redeem: power ratings, positions, and notes. Coaches you added by hand are replaced too. SquadRotate only stores a name and role for each coach, so there's no phone number or notes to lose.
Redeem a new code when your commissioner tells you the team changed upstream, for example after a league does a mid-season rebalance. Otherwise, keep managing your roster in SquadRotate as usual. You don't need to re-redeem just to make routine changes.
Warning: Double-check with your commissioner before redeeming a second time if you've already made changes you want to keep, including any coaches you've added by hand. There's no undo once the new import replaces the old data.
Still stuck? Go to your commissioner first. They can check the code, mint you a fresh one, or set your account up by hand if signup itself is the problem. For GORC, that's Bill. Give them your name, email, and team, and the exact error message if you have one.
If your commissioner can't get you sorted, they'll escalate it from there. Email support@gizmobuild.io only if you don't have a commissioner to go through.
Power ratings are used by the auto-assign algorithm to balance shift strength. A rough guide:
Tip: 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.
Changes save automatically. If you're signed in, the practice schedule is part of your team data and syncs to your account — see Your Data & Storage for details.
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.
Tip: Lock a game after it's over to preserve the rotation history without accidentally editing it.
Each shift card has its own Lock button. Lock individual shifts to preserve them while continuing to edit later shifts. This is useful for:
Locked shifts show an amber border and are skipped by Auto-Assign and Clear. Players who were active in locked shifts but later marked absent show as Injured in later shifts.
Shift locks belong to the game you set them in. Start a new game and it opens with nothing locked, no matter what you locked in the last one. Switch back to an earlier game and its locks are exactly where you left them.
If you shorten a game after locking shifts (by changing the half length or the shift length), any lock on a shift that no longer exists is dropped.
Note: Need to correct a locked shift? Tap the shift's Lock button to unlock it, make your edits, then re-lock. Pins are preserved when you Clear with locked shifts, so your GK pin (for example) will still apply on re-Auto-Assign.
Each player row has a pin button. Pinning tells Auto-Assign to leave that player in that position instead of rotating them.
This is how you give the same keeper two shifts in goal and still let Auto-Assign shuffle everyone else. Pin them in shifts 1 and 2, leave the rest unpinned, and run Auto-Assign. Rotation fairness still counts those two shifts, so the other keeper picks up the rest of the game.
Changing a player's position by hand, or swapping them on the chalkboard, clears their pin for that shift. The pins you set on other shifts stay put.
Pinning to all shifts skips any shift you have locked, since Auto-Assign never touches a locked shift anyway.
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.
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.
Warning: 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:
| Tag | Meaning |
|---|---|
| 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.
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).
Note: 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. For example:
| Player | GK | DEF | MID | STR | BN |
|---|---|---|---|---|---|
| Alex | – | 2 | 1 | 3 | – |
| Jordan | 5 | – | – | – | 1 |
| Casey | – | 1 | 2 | 2 | 1 |
In the app, high counts are highlighted right in the cell — in the example above, Alex's STR count and Jordan's GK count would both be called out:
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:
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.
Note: 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).
SquadRotate uses two storage layers depending on whether you're signed in.
Signed in: Your team data — roster, team names, formation, practice schedule (weekly agenda and coaches), shift locks, and pinned assignments — is saved to your SquadRotate account and synced to the server (user_teams in Supabase). This data follows your account, not your device.
Game sessions and shift assignments are currently stored in your browser's localStorage only, even when signed in. Clearing your browser's site data or switching browsers will clear your game history.
Not signed in: All data lives in localStorage on the current device and browser only. Nothing is synced. Signing in later will migrate your existing local team data up to your account.
Signed in: Your roster, formation, practice schedule, and team settings are available on any device you sign in to. Open SquadRotate on a new phone, sign in with the same account, and your teams load automatically.
Game history (sessions and shifts) does not sync — it stays on the device where the game was run. There is no cross-device game history yet.
Not signed in: Each device is independent. Signing in is the only way to access your data across devices.
Warning — signed in: Clearing your browser's site data removes your local game sessions and shifts permanently (no cloud backup for those), but your roster, formation, and practice schedule remain safe in your account. Sign in again on any device to restore your team data.
Warning — not signed in: Clearing your browser's site data erases all SquadRotate data permanently — roster, sessions, shifts — with no recovery option.