Commit Graph
224 Commits
Author SHA1 Message Date
adrianbonpin 09fde413b9 feat: add community suggestions API with CRUD, moderation, and Discord webhook notifications
- POST /api/community-suggestions - submit suggestion (auth required)
- GET /api/community-suggestions/game/:gameId - list suggestions for a game
- GET /api/community-suggestions/pending - moderation view (contributor/admin)
- PATCH /api/community-suggestions/:suggestionId/review - approve/reject
- Discord webhook notification on new suggestions
- Route registered in API index and app router
2026-04-30 19:38:44 +08:00
adrianbonpin f9617bf586 feat: add Steam Reviews display API with caching
- Create lib/api/steam-reviews.ts with in-memory cache (1hr TTL)
- Proxy endpoint for fetching Steam reviews by game ID
- Supports offset/limit/language query params
- Registers route in API index and app router
2026-04-30 19:32:35 +08:00
adrianbonpin 6853c8247b feat: add Steam review fetching to game sync 2026-04-30 19:27:43 +08:00
adrianbonpin 051c5c22df feat: add playability calculation API
- Auto-calculate playability from benchmark data (FPS, anti-cheat, upscaler dependency)
- Manual override by admins/contributors
- Clear override to revert to auto-calculated
- Three endpoints: /calculate/:gameId, /override/:gameId, /clear-override/:gameId
- Calculation logic: great (≥55 FPS, no upscaler), playable (≥30 FPS), needs_tweaks (≥20 FPS), unplayable (<20 FPS or anti-cheat unsupported)
2026-04-30 19:22:27 +08:00
adrianbonpin 4cfd046953 feat: create saved filters table 2026-04-30 19:16:45 +08:00
adrianbonpin 4c0284ef9e fix: add onDelete set null to reviewedBy FK 2026-04-30 19:14:45 +08:00
adrianbonpin 4e324fa6e0 feat: create community suggestions table 2026-04-30 19:07:54 +08:00
adrianbonpin 33b0198506 fix: add notNull constraints to playability fields 2026-04-30 19:04:02 +08:00
adrianbonpin d21e83897f feat: add playability fields to games and platform support schemas 2026-04-30 18:59:38 +08:00
adrianbonpin 09bf8f64d6 fix: use pgEnum for steamReviewSentiment 2026-04-30 18:50:48 +08:00
adrianbonpin 5dfd8db578 feat: add steam review fields to games schema 2026-04-30 18:46:18 +08:00
adrianbonpin d79a2605ed fix: resolve type errors and lint warnings in sync system 2026-04-29 11:46:35 +08:00
adrianbonpin a4cf2636e7 feat: add image validation and SteamGridDB fallback to game stub creation 2026-04-29 11:36:38 +08:00
adrianbonpin 06e811613d fix: add bulk sync limit (100), fix N+1 queries, improve route ordering and responses 2026-04-29 11:19:19 +08:00
adrianbonpin 5d388f6f49 feat: add sync API endpoints (single + bulk) 2026-04-29 10:58:21 +08:00
adrianbonpin 3388d3225a fix: use exponential backoff for sync retry instead of fixed 7-day interval 2026-04-29 10:55:21 +08:00
adrianbonpin 5227b1fd90 feat: enhance sync with error tracking, image validation, and SteamGridDB fallback 2026-04-29 10:44:49 +08:00
adrianbonpin 861ac7dfdc schema: add sync error tracking columns to games table 2026-04-29 10:33:53 +08:00
adrianbonpin 133a4a9cc2 fix: resolve lint warnings - remove unused imports and fix type annotations 2026-04-29 01:47:11 +08:00
adrianbonpin 7903c9fbbd Tasks 12-13: Fix release date input to type=date, add sort direction toggle to games page 2026-04-29 01:45:04 +08:00
adrianbonpin 8a063bfb6c fix: include benchmark games in device filter and exclude soft-deleted entries from search
Task 10: Device filter now combines games with platform support entries
AND games with performance entries for the selected hardware, instead of
only checking gamePlatformSupport. This ensures games that have benchmarks
but no explicit platform support entry still appear in filtered results.

Task 11: The benchmark count query (bCounts) in unified search now filters
out soft-deleted performance entries using isRemoved = false. The pCounts
and perfStats queries already had this filter; only bCounts was missing it.
2026-04-29 01:43:37 +08:00
adrianbonpin b64e55157e fix: add horizontal scroll to benchmarks table, add hard delete functionality
- Wrap table in overflow-x-auto container with min-w-[800px] to prevent overflow on smaller screens
- Add hard delete (purge) button to actions column for each benchmark entry
- Add confirmation dialog for permanent deletion with warning
- Add handleHardDelete handler that calls DELETE /api/admin/performance/:id/hard-delete
- Add DELETE endpoint for hard-deleting performance entries from the database
- Expand confirmAction state type to include 'hardDelete'
2026-04-29 01:38:29 +08:00
adrianbonpin 2101dfef08 feat: compare page with game selector, stats comparison, and charts 2026-04-29 00:45:16 +08:00
adrianbonpin 0f0176ae39 feat: add compare API endpoints for games and presets 2026-04-29 00:36:21 +08:00
adrianbonpin b8173bd8f8 feat: non-Steam game editing API, createdBy tracking, and source badges in search 2026-04-29 00:16:43 +08:00
adrianbonpin c6d4e7b3d1 feat: non-Steam game submission wizard with SteamGridDB integration 2026-04-29 00:00:10 +08:00
adrianbonpin 74fe0447ee feat: add SteamGridDB proxy API for non-Steam game images 2026-04-28 23:36:00 +08:00
adrianbonpin cc34fd17ef feat: add pinned presets with admin pin/unpin and dedicated section 2026-04-28 23:32:32 +08:00
adrianbonpin 799bfbbf31 feat: add system requirements, store stats, and pricing to game schema and steam sync 2026-04-28 23:13:08 +08:00
adrianbonpin 7e2ab978e1 feat: add performance tier and stability scatter charts 2026-04-28 23:08:01 +08:00
adrianbonpin 741c19e840 feat: display 1% low FPS in presets, stats API, and game details 2026-04-28 22:56:43 +08:00
adrianbonpin 4d759160db feat: add 1% low FPS field to benchmark submission wizard 2026-04-28 22:43:46 +08:00
adrianbonpin 943fcff12b feat: add fps_one_percent_low column to performance entries 2026-04-28 22:39:23 +08:00
adrianbonpin ab27ba948f fix: add image fallback chain for missing game covers in search 2026-04-28 22:30:19 +08:00
adrianbonpin d6a9601591 fix: refactor wizard edit mode to use lazy state init instead of effect setState 2026-04-28 09:51:26 +08:00
adrianbonpin 37c5d87baa Add admin benchmarks page with search, filter tabs, pagination, verify/remove/restore actions 2026-04-28 08:31:36 +08:00
adrianbonpin 2ab4ac5ebc feat: add admin comments API route
- GET /admin/comments: list all comments with pagination, removed filter, and author search
- PATCH /admin/comments/:id/remove: admin-only soft delete
- PATCH /admin/comments/:id/restore: admin-only restore
2026-04-28 07:55:57 +08:00
adrianbonpin 6d27ec03ab Task 2: Admin Performance Entries API Route
- GET /admin/performance — paginated listing with removed/verified/search filters,
  joining games, gameVersions, hardware, and user tables
- PATCH /admin/performance/:id/verify — verify entry (contributor or admin)
- PATCH /admin/performance/:id/remove — soft-delete entry (admin only)
- PATCH /admin/performance/:id/restore — restore entry (admin only)
- Registered route in app/api/[[...slugs]]/route.ts and lib/api/index.ts
2026-04-28 07:52:49 +08:00
adrianbonpin 1108264e4c feat: add admin reports API route
- GET /admin/reports with pagination, status filtering, joins, and batch author name lookup
- PATCH /admin/reports/:id/status to review (soft-delete entry) or dismiss
- Register route in lib/api/index.ts and app/api/[[...slugs]]/route.ts
2026-04-28 07:44:39 +08:00
adrianbonpin d375112c8e fix: resolve SQL ambiguity in subquery, remove unused imports, fix lint errors 2026-04-28 02:14:13 +08:00
adrianbonpin 7bcee83d03 feat: add Contact route to navigation 2026-04-28 02:10:28 +08:00
adrianbonpin b1cdfae6b7 feat: add contact form API with Discord webhook, rate limiting, and anti-bot checks 2026-04-28 02:04:25 +08:00
adrianbonpin 3aa8ecd94f fix: resolve benchmark sort alias mismatch and prioritize Steam Deck in deckStatus 2026-04-28 01:55:21 +08:00
adrianbonpin 4f1f654024 feat: add games listing API endpoint with search, genre/device filter, and sort 2026-04-28 01:45:13 +08:00
adrianbonpin f35b6aee1e feat: transfer admin check to middleware and add vertical padding 2026-04-27 23:47:24 +08:00
adrianbonpin 012ad64a0d feat: add admin layout with sidebar, auth guard, and navbar link
- 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
2026-04-27 21:02:28 +08:00
adrianbonpin ab076a92c8 refactor: remove broken Community Trust chart (TrustBar)
- 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
2026-04-27 20:41:28 +08:00
adrianbonpin 599cb024c9 fix: exclude null FPS entries from avgFps calculation in device stats API 2026-04-27 20:36:29 +08:00
adrianbonpin ecd83b1d70 fix: rename device_type enum 'handled' to 'handheld', add image column 2026-04-27 20:33:25 +08:00
adrianbonpin f228800593 feat: change user-delete to soft delete for performance entries 2026-04-27 15:36:12 +08:00