- Device list fetched from /api/hardware/stats
- Create/edit devices via modal form
- Delete with confirmation dialog
- Uses existing hardware CRUD API endpoints
- User list with search by name/email
- Change role (user/contributor/admin) via dropdown
- Ban/unban users with status indicators
- Uses better-auth admin plugin client methods
- Admin layout with server-side auth guard (redirects non-admins)
- Reusable sidebar component with active state detection
- Navbar profile dropdown shows admin link for admin users
- Admin routes are noindexed (robots: false)
- /admin redirects to /admin/users
- Renders device name, type badge, and stats on branded dark background
- Uses Edge runtime for fast generation
- References OG image in device detail page metadata
- Fix upscalerBreakdown/fsrBreakdown property name mismatch
- Fix deviceTypeLabel map (handled → handheld)
- Fix device color to use per-device colorIndex instead of hardcoded 0
- Add image/icon hero section with device color accent
- Add error state with retry button
- Add generateStaticParams with ISR (1-hour revalidation)
- Enhanced SEO metadata with keywords, OG, Twitter cards
- Fix JSON-LD to use 'Handheld' label instead of raw enum value
- Server component fetches data and passes as props (RSC pattern)
- Add device-type filter pills (All/Handheld/Console)
- Add device image with icon fallback
- Add verified count to stats row
- Fix deviceTypeLabel to use 'handheld' key
- Cap stagger animation delay at 0.5s
- Enhanced SEO metadata with keywords and OpenGraph
- Remove TrustBar component and chart
- Remove trust data from game-stats API response
- Remove trust section from game detail page
- DB columns and vote endpoints preserved for future voting system
- login-form.tsx: suppress unused-vars warning for emailChecked state
- bookmark-button.tsx: use function initializer for isLoading to avoid sync setState in effect
- saved-games.ts: remove unused 'set' parameter from check endpoint
- Replace fsrVersion with upscalerType/upscalerVersion in Preset interface
- Update StatsResponse to use upscalerType/upscalerVersion
- Replace FSR_OPTIONS with UPSCALER_OPTIONS (FSR, DLSS, XeSS, LSFG, Other)
- Update FRAMEGEN_OPTIONS to include LSFG and Other
- Update filter state from fsr to upscaler
- Update isRawPerformerPreset and getFpsColor to use upscalerType
- Update UpscalerBarChart interface and formatCombo function
- Update preset card technology tags to display upscaler version
- Replace FSR Version with flexible Upscaler Type + Version
- Add new upscaler options: AMD FSR, NVIDIA DLSS, Intel XeSS, Lossless Scaling FG, Other
- Expand Frame Gen options: lsfg, other
- Add Estimated Battery Life field (minutes)
- Add Custom / Modified System toggle
- Update review step with new summary rows
- Update submit body with new fields
- Add 'Create custom' button alongside 'Load defaults' when empty
- Add setting type selector (text/number/boolean) when adding new settings
- Add reorder controls for categories (up/down arrows)
- Add reorder controls for settings within each category
- Replace raw fetch calls with authClient.listAccounts(), linkSocial(), unlinkAccount()
- Accept authMethods, isLoadingAuthMethods, onRefreshAuthMethods as props
- Add error/retry states for failed account fetches
- Detect OAuth callback return (?linked=true) and show success message
- Show single auth method warning only when isLoadingAuthMethods is false