Commit Graph
100 Commits
Author SHA1 Message Date
adrianbonpin fbc0085e9e feat: add typography plugin and prose styles for update viewer 2026-05-01 09:37:43 +08:00
adrianbonpin 695c3fbedf feat: add updates route and sitemap entry 2026-05-01 09:36:44 +08:00
adrianbonpin 42cf4652dd feat: add update viewer page with static generation 2026-05-01 09:36:03 +08:00
adrianbonpin db36ef01e1 feat: add updates list page 2026-05-01 09:35:26 +08:00
adrianbonpin c204c30eb9 feat: add UpdateViewer component with chapter nav and progress bar 2026-05-01 09:34:45 +08:00
adrianbonpin cd98d6637f feat: add ChapterNav component with mobile support 2026-05-01 09:34:04 +08:00
adrianbonpin f8ba2d0370 feat: add ReadingProgressBar component 2026-05-01 09:33:12 +08:00
adrianbonpin 7e06dec5c0 feat: add UpdateCard component for updates list 2026-05-01 09:32:39 +08:00
adrianbonpin edbd352b34 content: add first update post from changelog v2026.0.95 2026-05-01 09:31:57 +08:00
adrianbonpin 19c2515437 feat: add content loading utilities for updates 2026-05-01 09:31:04 +08:00
adrianbonpin 04da5d6210 chore: add markdown parsing dependencies for updates page 2026-05-01 09:29:25 +08:00
adrianbonpin 824fbbd13f feat: rearrange game benchmark wizard and improve overall 2026-05-01 01:18:13 +08:00
adrianbonpin 293aadbff0 fix: sequential sync with 1.5s delay to avoid Steam rate limiting 2026-04-30 23:13:28 +08:00
adrianbonpin 583486de1a feat: streaming progress for bulk sync - real-time updates 2026-04-30 23:09:35 +08:00
adrianbonpin e38a2fabe7 fix: better error handling for bulk sync, fix NaN% progress display 2026-04-30 23:04:51 +08:00
adrianbonpin 5f037481ec perf: parallel bulk sync with 5 concurrent requests, remove 100-game limit 2026-04-30 22:59:28 +08:00
adrianbonpin 0461beca4e feat: review score prominent display, improved sync logic, changelog update 2026-04-30 22:24:40 +08:00
adrianbonpin ea01438935 Fix Steam sync logic: extract retry helper, add 429/rate-limit handling, game type validation, set syncStatus on errors
- Extract recordSyncFailure() helper to deduplicate 3 identical retry/backoff blocks
- Set syncStatus: 'error' on all failure paths (was missing before)
- Handle HTTP 429 (rate limiting) with Retry-After header support
- Reject non-game Steam app types (DLC, soundtrack, demo) during sync
- Add type field to SteamAppDetails interface
2026-04-30 22:23:04 +08:00
adrianbonpin 730793d6b6 feat: add star icon and styled steam review score to game cards
- Show steamReviewScore on games list cards in compact badge row with star icon
- Update search result right panel to use blue-400 styling with star icon
- Include "Positive" label on search results for clarity
2026-04-30 22:15:09 +08:00
adrianbonpin 99766d3b4b feat: add Steam review score badge to game details hero section 2026-04-30 22:11:13 +08:00
adrianbonpin 9df2677fd5 docs: update changelog with steam reviews fix 2026-04-30 22:06:01 +08:00
adrianbonpin 2620023a96 fix: steam reviews pagination - fetch more and slice instead of broken cursor 2026-04-30 22:05:42 +08:00
adrianbonpin d2e40a2696 fix: add missing preset fields to serialization 2026-04-30 21:59:00 +08:00
adrianbonpin 976b918397 fix: suggest edit only for non-Steam games, improve preset modal, improve steam reviews error handling, update changelog 2026-04-30 21:55:38 +08:00
adrianbonpin 2286f0793c fix: anti-cheat is game-level, not per-device 2026-04-30 21:40:25 +08:00
adrianbonpin 90acde90b6 fix: add null safety to SteamReviews component 2026-04-30 21:38:47 +08:00
adrianbonpin fccef57d43 fix: auto-recalculate playability on benchmark submit and sync, fix anti-cheat logic for games without anti-cheat 2026-04-30 21:35:38 +08:00
adrianbonpin a9f78ef74c fix: remove duplicate /api prefix from new routes 2026-04-30 21:27:07 +08:00
adrianbonpin aa57a96191 fix: register dashboard and saved-filters API routes 2026-04-30 21:25:20 +08:00
adrianbonpin 6b6893a201 docs: add CHANGELOG.md tracking all new features 2026-04-30 20:50:14 +08:00
adrianbonpin 5fba98cd3d feat(manage): add dashboard as manage landing page
- Add Dashboard as first sidebar nav item under Overview section
- Update /manage page to render DashboardOverview instead of redirecting
- Remove redirect to /manage/users
2026-04-30 20:49:32 +08:00
adrianbonpin ce3c88ec54 feat(manage): add dashboard overview and charts components
- DashboardOverview: stat cards, top contributors, playability distribution,
  and Steam sync health sections
- DashboardCharts: placeholder for future ECharts integration
2026-04-30 20:48:28 +08:00
adrianbonpin 244a29bd1b feat: create dashboard overview API endpoint
Add /api/dashboard/stats route that provides admin dashboard statistics:
- Total counts (games, benchmarks, users)
- Pending moderation items (reports, suggestions)
- 30-day activity metrics (recent benchmarks, recent games)
- Top 10 contributors by entry count
- Sync health breakdown by status
- Games by source distribution
- Playability distribution

Auth: requireContributorOrAdmin guard
Route registered in lib/api/index.ts
2026-04-30 20:44:27 +08:00
adrianbonpin 1bfddafde4 feat: add anti-cheat awareness step to benchmark wizard 2026-04-30 20:40:45 +08:00
adrianbonpin 5f4d618d85 Task 18: Add playability, anti-cheat, and steam review badges to search results 2026-04-30 20:32:04 +08:00
adrianbonpin 32d52cf3ba Task 17: Revamp Games List with New Filters & Badges
- Add new filter state variables (min/max FPS, FSR, Proton/Native, anti-cheat,
  playability, Steam review score, free-to-play, multiplayer)
- Expand sort options to include performance, popularity, release_date, steam_reviews
- Add Performance, Compatibility, and Other filter UI sections with inputs
- Integrate SavedFilters component for saving/loading filter presets
- Add PlayabilityBadge and AntiCheatBadge to game cards
- Update API listing to return antiCheatRelevant/antiCheatStatus per game
- Update server-side games page to include new fields in initialGames
- Update clear-filters logic across filter panel and empty state
2026-04-30 20:25:57 +08:00
adrianbonpin 0bb8c205f9 feat: add anti-cheat, playability, steam reviews, and community suggestions to game details page 2026-04-30 20:13:08 +08:00
adrianbonpin fa613dd1c3 Create saved filters component 2026-04-30 20:00:23 +08:00
adrianbonpin bf58394cf0 feat(components): create CommunitySuggestionForm component 2026-04-30 19:58:49 +08:00
adrianbonpin 89cf09d771 feat: Create Steam Reviews embed component 2026-04-30 19:56:50 +08:00
adrianbonpin 7ca90d8fe2 feat: add PlayabilityBadge component 2026-04-30 19:55:10 +08:00
adrianbonpin ec47be0c2b fix: add cn utility and fix import path in AntiCheatBadge 2026-04-30 19:53:58 +08:00
adrianbonpin 971173a3a6 feat: add AntiCheatBadge component 2026-04-30 19:52:26 +08:00
adrianbonpin 32d197113e feat: extend games listing API with new filters and sort options
Add 8 new filter parameters to GET /api/games/listing:
- minFps/maxFps: filter games with benchmarks in FPS range
- fsrSupport: filter games that have FSR entries
- protonNative: filter by proton status (proton/native/both)
- antiCheatStatus: filter by anti-cheat support status
- playabilityStatus: filter by playability (great/playable/needs_tweaks/unplayable)
- steamReviewScore: minimum Steam review score threshold
- isFree: filter free-to-play games
- hasMultiplayer: filter games with multiplayer support

Add 4 new sort options:
- performance: sort by average FPS (subquery)
- popularity: sort by recommendationsTotal
- release_date: sort by releaseDate
- steam_reviews: sort by steamReviewScore

Also returns additional fields in response: isFree, releaseDate,
steamReviewScore, recommendationsTotal, playabilityStatus,
onlineMultiplayerStatus.
2026-04-30 19:50:38 +08:00
adrianbonpin e7cc4d6a2e feat: add Saved Filters CRUD API
- Create lib/api/saved-filters.ts with GET, POST, PATCH, DELETE endpoints
- All endpoints require authentication via requireAuth guard
- Users can only access their own saved filters
- Register savedFilterRoutes in lib/api/index.ts
2026-04-30 19:42:55 +08:00
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 bce1e812b5 chore: bump version to 2026.0.9 2026-04-29 13:02:26 +08:00
adrianbonpin b435712b9c docs: overhaul README with architecture overview, badges, and complete setup guide 2026-04-29 12:59:42 +08:00
adrianbonpin c54e332a9e feat: enable recursive comment threading up to 3 levels deep 2026-04-29 12:52:26 +08:00
adrianbonpin 171cbaaeee feat: enable recursive comment threading up to 3 levels deep 2026-04-29 12:46:57 +08:00
adrianbonpin 5db88b25cb fix: add syncCompleted reset, Escape key handler, and a11y attributes to sync overlay 2026-04-29 12:44:02 +08:00
adrianbonpin b2be929f63 fix: sync modal now fills viewport via portal and persists after completion 2026-04-29 12:26:08 +08:00
adrianbonpin e49908cd73 feat: add sync progress visualization with real-time status updates 2026-04-29 12:01:29 +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 caae92ca4f fix: clear selection on pagination/search, add error handling for bulk sync 2026-04-29 11:32:25 +08:00
adrianbonpin 1215aca41a feat: add checkbox selection and bulk sync to manage games page 2026-04-29 11:25:00 +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 dfae540fd4 feat(manage): add manual resync button for games 2026-04-29 01:39:58 +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 2fed5a3964 feat: improve users management UI with card-based layout 2026-04-29 01:34:59 +08:00
adrianbonpin f7d825f5b3 tasks 5 & 6: update /admin UI refs to /manage, full-width manage layout 2026-04-29 01:33:07 +08:00
adrianbonpin 6642501b91 refactor: rename admin to manage in layout, sidebar, and redirects 2026-04-29 01:31:44 +08:00
adrianbonpin b68bf36bff refactor: rename admin route group to manage 2026-04-29 01:25:00 +08:00
adrianbonpin fcfcce614a chore: fix lint and type errors from feature bundle implementation 2026-04-29 00:54:39 +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 0a6f5ac8d2 feat: non-Steam game edit page and edit button on game details 2026-04-29 00:32:44 +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 23fa7be89f feat: display system requirements and store stats on game details page 2026-04-28 23:24:33 +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 59e3ca338b fix(search): correct PriceTag logic for free pricing
- Return null when price is missing instead of showing 'Free'
- Show green 'Free' badge only when initial === 0 && final === 0
- Show emerald 'Free*' badge with tooltip for promotional free (final === 0, initial > 0)
- Fixes incorrect 'Free' label for games like Days Gone during free weekends
2026-04-28 22:28:01 +08:00
adrianbonpin c91433958b fix: remove SteamOS prefix doubling on osVersion display 2026-04-28 22:26:04 +08:00
adrianbonpin 748a9fa8c8 fix: tiptap duplicate link extension warning + settings editor number inputs to text+inputMode 2026-04-28 10:07:03 +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