Bug
PR #1039 moved the participant count from CampaignHero to Leaderboard, but changed the data source from `totalParticipants` (status API) to `data.entries.length` (leaderboard entries). The leaderboard only returns top 50 entries, so this will underreport once there are more than 50 participants.
File: `src/components/airdrop/Leaderboard.tsx`
Current (buggy):
```tsx
{data.entries.length} {data.entries.length === 1 ? "participant" : "participants"}
\`\`\`
Fix
Option A: Add `totalParticipants` to the leaderboard API response (it already computes `pointsByAddress.size` — just include it).
Option B: Fetch `/api/airdrop/status` in the Leaderboard component and use `totalParticipants`.
Option A is cleaner since the data is already available in the leaderboard endpoint.
API change (leaderboard/route.ts)
Return `totalParticipants: pointsByAddress.size` alongside `entries` and `userRank`.
Component change (Leaderboard.tsx)
Use `data.totalParticipants` instead of `data.entries.length`.
Acceptance Criteria
Bug
PR #1039 moved the participant count from CampaignHero to Leaderboard, but changed the data source from `totalParticipants` (status API) to `data.entries.length` (leaderboard entries). The leaderboard only returns top 50 entries, so this will underreport once there are more than 50 participants.
File: `src/components/airdrop/Leaderboard.tsx`
Current (buggy):
```tsx
Fix
Option A: Add `totalParticipants` to the leaderboard API response (it already computes `pointsByAddress.size` — just include it).
Option B: Fetch `/api/airdrop/status` in the Leaderboard component and use `totalParticipants`.
Option A is cleaner since the data is already available in the leaderboard endpoint.
API change (leaderboard/route.ts)
Return `totalParticipants: pointsByAddress.size` alongside `entries` and `userRank`.
Component change (Leaderboard.tsx)
Use `data.totalParticipants` instead of `data.entries.length`.
Acceptance Criteria