Rotations

The rotation engine watches how much time every player has spent in each zone — both in the current game and across the whole season — and suggests swaps that balance things out. You never have to do the maths yourself.

How the algorithm works

Every time the clock ticks, the app tracks which zone each player is in. When the sub timer is due, it ranks all possible field ↔ bench swaps by how much they would improve overall fairness — considering:

  • Season zone minutes — time in each zone across all completed games this year
  • Current-game minutes — time accrued so far in this game
  • Recent arrival pinning — players who only just came on are not immediately swapped back off (pinned for ~3 minutes)
  • Player locks — field-locked players never leave; zone-locked players stay in their assigned zone

The algorithm produces a set of swap pairs — typically one or two at a time — targeting the zone where the imbalance is greatest.

The SwapCard

Suggested swaps appear in the dark SwapCard above the field. It has two states:

  • Collapsed — shows a sparkle icon (or countdown ring), the number of suggested swaps, and a one-line summary (e.g. Alex→Sam · Jordan→Blake). Tap to expand.
  • Expanded — shows each pair in a row with the zone label colour-coded, a Do button per pair, and a Do all N swaps button at the bottom.

After you commit a swap (via Do or Do all), the card collapses automatically and the sub timer resets.

The SwapCard expanded showing two swap pairs with zone labels, Do buttons, and a Do all 2 swaps button
The SwapCard expanded. Zone labels are colour-coded: orange = Forward, purple = Centre, blue = Back.

The countdown ring and NOW badge

The SwapCard header includes a circular progress ring that fills as the sub interval counts down. When it reaches zero:

  • The ring turns orange and the counter displays NOW with a pulse animation.
  • The card gets an orange ring highlight.
  • The card expands automatically to show the suggestions.
💡
You can make a swap at any time — not just when the timer fires. Tapping any field + bench player pair opens the confirmation dialog and resets the timer on commit.

Player tiles and badges

Each player tile on the field shows:

  • Jersey number in a small green circle
  • First name and last initial
  • Zone label (FWD / H-FWD / CEN / H-BCK / BCK) in small caps at the top
  • A zone-minute bar at the bottom — a thin horizontal bar colour-coded by zone showing how much time this player has spent where (blue = back, purple = centre, orange = forward)

When a player is part of a pending swap suggestion:

  • A badge marks the player coming off the field
  • A badge marks the player coming on from the bench
  • Both tiles show a pair number so you can match them up
A player tile showing jersey number, name, zone label, up/down badges, and a zone-minute bar at the bottom
Player tile anatomy: jersey number, zone label, swap badges, and zone-minute bar.

Zone colour coding

Colours are consistent across every zone indicator in the app:

  • Orange — Forward / H-Forward
  • Purple — Centre
  • Blue — Back / H-Back
Zone-minute bars on several player tiles showing the orange, purple, and blue colour coding
Zone bars use the same colours across the field and the Stats tab.

Player locks

Long-press any player to open the Player actions sheet. Two lock options are available:

  • Lock to field — the player is excluded from all rotation suggestions and never leaves the field for the rest of the game.
  • Lock to zone — the player can rotate off temporarily (e.g. for water) but the algorithm will always put them back into the same zone. Tap Unlock player to remove the lock.
ℹ️
Field-locked and zone-locked players are pinned in the quarter-break reshuffle too — the algorithm keeps them in their current zone.

The fairness score

The quarter-break screen shows a Fairness score from 0 to 100. It measures how evenly zone minutes are spread across the whole squad — 100 is perfectly equal; lower means some kids have had noticeably more or less time in certain positions.

Aim for a high score by the end of the season, not every single game. Individual games often sit lower — that's normal and expected.

The Stats tab shows per-player zone minute breakdowns for the full season.