Summary
Upstream: pickleball-shuffler#25 (part 1 of 3)
Support skill-level groups (e.g. Standard vs Advanced) so groups can play separately or combined. This issue covers data model, enablement, and player assignment UI.
Use case
Beginner vs advanced players at one venue — usually separate schedules, occasionally combined.
Feature toggle
- Off by default (backward compatible).
- Toggle on
/new: "Enable skill groups".
- Can also enable mid-session — applies from next round onward (past rounds unchanged).
- When enabled: default groups Standard and Advanced; all players start in Standard.
Groups
- Unlimited named groups (not just two).
- Default when enabled:
Standard, Advanced.
- Manual priority order (drag list) — top = highest skill; used for edge-case swing-player assignment.
- Everyone must belong to at least one group when feature is on.
Player assignment
- Assign on
/new and in-game (Players modal or dedicated groups UI).
- Player may belong to multiple groups — show visible warning (⚠️) for multi-group / swing players.
- Fixed pairs must stay within the same group when groups enabled.
- If one fixed-pair member is a swing player, pair is leveled to the higher-priority group.
Session defaults
Acceptance criteria
Files likely touched
src/useShuffler.tsx
pages/new.tsx
src/PlayersModal.tsx (or new Groups modal)
- New:
src/groups.ts (or similar)
Dependencies
none
Upstream reference
Summary
Upstream: pickleball-shuffler#25 (part 1 of 3)
Support skill-level groups (e.g. Standard vs Advanced) so groups can play separately or combined. This issue covers data model, enablement, and player assignment UI.
Use case
Beginner vs advanced players at one venue — usually separate schedules, occasionally combined.
Feature toggle
/new: "Enable skill groups".Groups
Standard,Advanced.Player assignment
/newand in-game (Players modal or dedicated groups UI).Session defaults
Acceptance criteria
groupsdata model in app state + localStorage/new; enable mid-session from next round/newand in-gameyarn test:ciandyarn buildpassFiles likely touched
src/useShuffler.tsxpages/new.tsxsrc/PlayersModal.tsx(or new Groups modal)src/groups.ts(or similar)Dependencies
none
Upstream reference