Each user in the leaderboard links to a profile page showing stat cards,
a line chart (requests / storage / watch hours, 1W–1Y timeframes, raw or
normalized, plus a Storage Load mode), and a full request history sorted
newest-first. Includes Overseerr media status codes (1–5), Tautulli watch
history aggregation, and a server-side raw cache so the user API route can
enrich requests without re-fetching everything.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Settings modal (gear icon) lets you configure all service URLs and API
keys from the dashboard; values persist to data/settings.json with
process.env as fallback so existing .env.local setups keep working
- Per-service Test button hits each service's status endpoint and reports
the version on success
- Discord webhook support: structured embeds per alert category (requesters,
approval age, episode progress, watch-rate stats) sent on new/reopened
alerts only — already-open alerts don't re-notify
- Alert detail page restructured: prose descriptions replaced with labelled
fields, episode progress bar for partial TV, watch-rate stat block,
View in Radarr/Sonarr/Seerr action buttons, requester names link to
Overseerr profiles, timestamps moved inline with status
- Tab state is pure client state (no ?tab= in URL); router.back() used
on alert detail for clean browser history
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Full implementation on top of the Next.js scaffold:
- Leaderboard with per-user request count, storage, avg GB/req, and
optional Tautulli watch stats (plays, watch hours), each with dense
per-metric rank (#N/total)
- SWR cache on /api/stats (5-min stale, force-refresh via button);
client-side localStorage seed so the UI is instant on return visits
- Alerting system: content-centric alerts (unfulfilled downloads,
partial TV downloads, stale pending requests) and user-behavior
alerts (ghost requester, low watch rate, declined streak)
- Partial TV detection: flags ended series with <90% of episodes on disk
- Alert persistence in data/alerts.json with open/closed state,
auto-resolve when condition clears, manual close with per-category
cooldown, and per-alert notes
- Alert detail page rendered as a server component for instant load
- Dark UI with Tailwind v4, severity-colored left borders, summary
cards with icons, sortable leaderboard table
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>