Four ideas explain almost every screen in the product.

1. One rider, one team per competition

A rider doesn't belong to a club — they belong to one team per race type. ZRL, ladder, events are tracked separately, each with its own captain and calendar. Assigning someone to a new ZRL team replaces their old ZRL team and leaves the others alone.

2. Status is the vocabulary

Every rider carries a status, and it drives what everyone else can do.

Available · Active · Unavailable · On Loan · Inactive · Unverified · Free Agent · Prospect

Status Meaning
Available Can be picked — and can be borrowed by another club
Active Set into a line-up. Locked, and no longer borrowable
Unavailable Can't race this one
On Loan Racing for another club this week
Inactive On a break, still a club member, takes no roster spot
Unverified Height/weight not confirmed — can't be selected
Free Agent No team, claimable by any captain
Prospect Signed up via a club link, not yet assigned

3. Races carry their own rules

Roster size isn't a property of your team — it belongs to the race. Each race sets minimum starters, maximum starters and maximum bench. Step to a different round and your available spots can change.

4. The chain everything hangs off

The core mechanism

A race demands a minimum number of starters → a captain doesn't have enough available riders → the line-up won't save → they request a rider from another club → that club's captain approves → the rider joins as Active → the line-up saves → after the race, the rider returns automatically.

Once that chain makes sense, statuses, borrowing rules and roster settings stop being separate features and become one mechanism.