Group Challenges
Lets a coach create a squad-scoped friendly challenge — either "reach N matching contributions" or "reach N recorded wins" — with a roster and a challenge window, showing every challenge's live standings.
- Route:
/research/cards/group-challenges - Package:
debate-card-search
What it shows
Each persisted GroupChallenge renders as its own card: title, goal,
window, roster, and live standings (best first, 🏆 marking the MVP). A
win_target challenge gets a "Record a win" action.
Data flow
state/groupChallenges.ts (localStorage: groupChallenges)
state/challengeWinEvents.ts (localStorage: challengeWinEvents)
→ buildPersistedGroupChallengeBoard(now)
→ panels/GroupChallengesPanel.tsxBoth stores sync to a signed-in user's account — see Tool Data Sync.
Known gaps
"Record a win" is still free-form text, not a login — a real signed-in session only prefills it.
