Background & current state
Lists (campaigns, leaderboard CampaignLeaderboard.jsx, participants) render all rows. At thousands of rows this will jank and bloat the DOM. No virtualization is used.
Goal
Virtualize large lists (campaign list, leaderboard, participants) so large datasets scroll smoothly.
Technical design
Edge cases
- Variable row heights → measured/estimated sizes.
- Sticky headers + virtualization.
- Accessibility (screen readers) with windowed rows.
- Combined with filters/sort (NEW-110).
Task breakdown
Acceptance criteria
Testing & verification
- Perf profiling test; a11y check.
Out of scope
- Server pagination (exists).
Dependencies / related
Difficulty: medium · Effort: M · performance
Background & current state
Lists (campaigns, leaderboard
CampaignLeaderboard.jsx, participants) render all rows. At thousands of rows this will jank and bloat the DOM. No virtualization is used.Goal
Virtualize large lists (campaign list, leaderboard, participants) so large datasets scroll smoothly.
Technical design
Pagination.tsx).Edge cases
Task breakdown
Acceptance criteria
Testing & verification
Out of scope
Dependencies / related
Difficulty: medium · Effort: M · performance