← Back to App

On this page

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

Getting Started

Two ways to start a team

You can build a roster by hand, or bring one in with a code from your league:

  • Start from scratch. Tap Add your first player on the empty roster screen and add players one at a time.
  • Have a code from your league? Tap Have a LeagueRun code? on the empty roster screen and enter it. Your roster and practice info pull in automatically. See Team Info & Roster — Redeeming a LeagueRun code below for the full walkthrough.

Invited to help as an assistant coach?

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.

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
📣

Coaching Staff

What the coaching staff list is

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.

  • On its own, it's a reference list, not accounts. Adding someone here doesn't create a login for them or give them their own view of the app — it's a name and a role the rest of your coaching staff can see. If you want an assistant coach to actually sign in, invite them separately (see below).
  • It can come in with a LeagueRun import. If your commissioner has set up coaching staff on LeagueRun, redeeming their code fills this list in for you and replaces any coaches you added by hand. See Team Info & Roster — Redeeming a LeagueRun code for the full walkthrough.

Adding and editing coaching staff

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.

Inviting an assistant coach to sign in

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.

Revoking access

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.

If the invite doesn't work

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.

👥

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.

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.

Changing team size

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:

  • The lineup is remembered for the game you are currently on. Starting a new game, or switching to a different one, starts fresh.
  • It is remembered per size, and only the most recent one for each. Going 9v9 to 7v7 and back gives you your 9v9 lineup; going round the houses through several sizes only keeps the latest lineup you had at each.

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.

Redeeming a LeagueRun code

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:

  • Tap Have a LeagueRun code? It's on the empty roster screen if you're starting fresh, or the button below your roster if you already have players.
  • Paste or type the code Bill sent you
  • Tap Import team

Your roster fills in automatically as soon as the code is accepted.

What a code brings in

Redeeming a code pulls in:

  • Your player roster (names)
  • Your full coaching staff, if your commissioner has set one: head coach and every assistant coach, listed by name and role. This replaces whichever coaches you already have.
  • Your team's game schedule, if your commissioner has entered one: a read-only list showing round, opponent, date/time, and location
  • Your practice night, time, and field, if your commissioner has set one
  • Your team name, if included on the LeagueRun side

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 again later

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.

If the code doesn't work

  • "That code doesn't look right, or it's expired." Double-check the code with your commissioner. Codes can expire or get revoked and replaced.
  • "This code needs a newer version of SquadRotate." Update the app and try again.
  • "Something's off with this code's data." Try again, or contact support (below).
  • "Sign in to redeem a code." Create a SquadRotate account or sign in first, then redeem the code.
  • "Your SquadRotate account has no email address, so it can't be matched to a code." Your account is missing an email on file. Contact support (below) to get one added.
  • "You're offline" or "Couldn't reach LeagueRun." Check your connection and try again.

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 — 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

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.

📋

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 (green) — coach is present; their station drill shows normally
  • ✗ Alex (red) — coach is unavailable; 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.

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.

⚽

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.

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

Shift locking — mid-game adjustments

Each shift card has its own Lock button. Lock individual shifts to preserve them while continuing to edit later shifts. This is useful for:

  • Late arrivals — lock shifts 1-2 that already played, then add the late player and re-run Auto-Assign for shifts 3+
  • Mid-game injuries — lock completed shifts, mark the player absent, and Auto-Assign redistributes remaining shifts

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.

Pinning a player to a position

Each player row has a pin button. Pinning tells Auto-Assign to leave that player in that position instead of rotating them.

  • Tap the pin to hold the player in that position for that shift only. Every other shift stays free to rotate.
  • Press and hold the pin (or right-click on a computer) to choose the scope: this shift, or all shifts.
  • A pin that applies to every shift shows with a ring around it, so you can tell the two apart at a glance.

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.

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.

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.

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:

TagMeaning
OFFJordan, Casey — coming off the field
ONAlex, Morgan — coming on from bench
MOVETaylor: 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. 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).

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.

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. For example:

PlayerGKDEFMIDSTRBN
Alex–213–
Jordan5–––1
Casey–1221

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:

  • Yellow — player has been in this position 3 or more shifts; consider rotating them (Alex's 3 STR shifts, above)
  • Red — player has been in this position nearly every shift; rotation is overdue (Jordan's 5 GK shifts, above)
  • – — 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.

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.

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

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.

Switching devices

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.

Clearing data

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.