Feature: Leagues
Tied to journey: Create / join league.
Product acceptance criteria
- Commissioner can create a league
- League can be discoverable (browse) or unlisted (default TBD — see open decisions)
- Guests and signed-in users can browse discoverable league metadata
- Gated join: request-to-join (commissioner approve/decline) or invite code
- No one-tap open public join
- League settings editable by commissioner within defined bounds
- Clear membership list and role display
Implementation notes
- (invite token / deep link TBD)
- (Discover listing policy / feed TBD)