Admin review and standings still use a 5x5 card after card-size generalization
- Dominant language
- TypeScript
- Stars
- 0
- Forks
- 0
- PR merge metrics
- No merged PRs in 30d
Description
## Problem
The player card calculates `cardSize` from `effectivePoolSize(tiles)` and passes it to `shuffleTilesForUser` and `detectBingo`. The admin review page and `loadStandings` do not: both call the functions with their 5x5 defaults. The admin Svelte view also hard-codes `GRID_SIZE`.
## Reproduction
1. Configure at least 49 effective tiles, so the player card becomes 7x7.
2. Have a player complete a row on the displayed 7x7 card.
3. Open that player in `/admin/users/:id`, or view the leaderboard.
The player sees a bingo, but the admin and standings calculation only evaluates a 5x5 subset and can report no bingo, blocking verification. The leaderboard also advertises a 24-tile maximum even for larger cards.
## Suggested fix
Compute the effective pool size and card size once in each consumer (or centralize board-state construction), then pass that size through `shuffleTilesForUser`, `detectBingo`, and the admin grid and leaderboard maximum.
## Affected code
- `src/routes/admin/users/[id]/+page.server.ts`
- `src/routes/admin/users/[id]/+page.svelte`
- `src/lib/server/standings.ts`
- `src/routes/leaderboard/+page.server.ts`
- `src/routes/bingo/+page.server.ts` (the correct reference implementation)
Contributor guide
No contributing guide indexed for this repository
Research direction
Start with src/routes/bingo/+page.server.ts as the correct reference implementation, then compare how card size and effective pool size flow through the affected admin, standings, leaderboard, and Svelte files. Done means admin review and standings detect bingo on larger cards, the admin grid uses the displayed size, and the leaderboard maximum reflects that size.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- full-stack
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Active
- Clarity
- Clearly specified
- Newbie friendliness
- 78/100