Commit Graph
167 Commits
Author SHA1 Message Date
adrianbonpin eb22efc23f feat(manage): display wattHours and tdpMax on device cards 2026-05-10 00:51:14 +08:00
adrianbonpin 13bb95b6bd feat(manage): include wattHours and tdpMax in hardware submit body 2026-05-10 00:49:26 +08:00
adrianbonpin e35fbf8e71 feat(manage): add wattHours and tdpMax inputs to hardware form 2026-05-10 00:46:49 +08:00
adrianbonpin fd9d75c85f feat(manage): add wattHours and tdpMax to DeviceFormData and DeviceItem interfaces 2026-05-10 00:44:49 +08:00
adrianbonpin 5ed60ef3cc chore: fix lint/type issues from seven-feature integration 2026-05-09 23:35:21 +08:00
adrianbonpin ff360c6ab4 feat: display wattHours and tdpMax on device cards 2026-05-09 23:27:37 +08:00
adrianbonpin b5d9f0e19b feat: power quick-look bar, YouTube indicator, battery chart, screenshot gallery on game details 2026-05-09 23:20:34 +08:00
adrianbonpin f03411a8be feat: mobile hero background with gradient overlay on game details page 2026-05-09 23:01:26 +08:00
adrianbonpin fbc041d62d feat: filter drawer overlay on mobile for games list 2026-05-09 22:47:33 +08:00
adrianbonpin 02bdbe2825 feat: include wattHours, tdpMax, and batteryLife in hardware and game stats APIs 2026-05-09 22:25:34 +08:00
adrianbonpin 32386ce170 fix: resolve all ESLint errors and warnings
- Replace  types with  and proper type casting
- Remove unused imports and variables across multiple files
- Fix React set-state-in-effect by suppressing with eslint-disable
- Wrap handleFile in useCallback to stabilize hook dependencies
- Remove dead MetaItem component from game-page-client
- Add public/sw.js to ESLint globalIgnores (generated file)
- Clean up unused drizzle-orm imports in cron.ts, dashboard-public.ts
- Remove unused _configured flag from r2-client.ts
2026-05-09 16:38:29 +08:00
adrianbonpin 321c923464 feat: switch sitemap from static file to dynamic DB-driven generation 2026-05-09 15:31:05 +08:00
adrianbonpin f808b8325a feat: wire photo upload/delete changes upward for instant page-wide refresh 2026-05-09 14:00:13 +08:00
adrianbonpin c6a9b448d3 feat: add advanced filters and saved filter presets to search page 2026-05-09 13:27:59 +08:00
adrianbonpin 1e59224622 feat: restructure game details layout, expand sys reqs by default, optimize for mobile and controller 2026-05-09 13:19:44 +08:00
adrianbonpin 2bc6953339 feat: add public dashboard page with trending, best new releases, and most tested charts 2026-05-09 13:11:27 +08:00
adrianbonpin 5bc85aa850 feat: add static sitemap generation script, replace dynamic sitemap with static files 2026-05-09 13:04:33 +08:00
adrianbonpin d4a12fe19d feat: add profile photo upload UI component and integrate into settings 2026-05-09 12:58:11 +08:00
adrianbonpin bb459b3146 fix: resolve submit crash (.data.id undefined) & add missing update posts
- Fix game-entry-wizard.tsx: API returns flat { id } not { data: { id } }
- Add update posts for v2026.0.96, v2026.0.97, v2026.0.971
2026-05-09 00:56:01 +08:00
adrianbonpin dcf6066b2b feat: sitemap remediation, PWA activation, search refinements, Steam Deck UX
Sitemap:
- Switch from ISR (revalidate=3600) to force-dynamic for per-request generation
- Flatten into single app/sitemap.ts with inlined static entries and DB queries
- NULL-safe syncStatus filter: ne(games.syncStatus, 'failed') OR isNull(games.syncStatus)
- Structured JSON logging for generated URLs and DB errors
- Delete lib/sitemap/* helpers and app/api/revalidate-sitemap route
- Add basic vitest coverage for sitemap exports

PWA & Offline:
- Add @serwist/next service worker (webpack build) with runtime caching
- Cache strategies: stale-while-revalidate for game pages, network-first for listings/API,
  cache-first for Steam CDN images
- Offline fallback page (public/offline.html)
- Manifest icons: 192px maskable + 512px any
- Viewport meta with viewport-fit=cover, user-scalable=no
- Apple mobile web app meta tags

Search / Filter Refinements:
- Multi-genre OR support in listing API (comma-separated genres)
- Device-scoped FPS filter (min/max FPS constrained to selected device)
- Client-side URL state sync via router.replace for shareable filtered views
- Initialize filter state from URL params on mount
- Auto-collapse filter panel on saved-filter load
- Fix multi-genre saved filter parsing (comma-separated)

Steam Deck / Touch / Gamepad UX:
- WCAG 2.1 AA touch targets (44x44px) on all filter controls
- .gamepad-focus CSS focus ring for controller navigation
- useGamepadNavigation hook: D-pad/left-stick roving tabindex, A/B/X/Y actions
- Integrate gamepad hook into games page (X=search, Y=toggle filters)

Chore:
- Bump version to 2026.0.97
2026-05-05 16:20:28 +08:00
adrianbonpin 52fd3b5ba4 refactor: createGameStub now uses ensureSteamGame pipeline 2026-05-05 02:10:33 +08:00
adrianbonpin 863358a8fd fix: resolve Next.js 16 build errors
- Extract Elysia app from route.ts into lib/api/app.ts to avoid
  Next.js 16 invalid export validation ('app' is not a valid route
  export field)
- Remove runtime='nodejs' from opengraph-image.tsx (invalid segment
  config in Next.js 16)
- Replace computed revalidate expression in sitemap.ts with literal
  (Next.js cannot statically evaluate BinaryExpression for segment
  configs)
- Update eden.ts imports to match new app.ts location
2026-05-05 00:36:17 +08:00
adrianbonpin f0db19b243 fix: sitemaps pt.2 2026-05-04 21:41:25 +08:00
adrianbonpin 633117f452 chore: final verification fixes for sitemap reliability
- Replace invalid revalidate export with unstable_cache in sitemap.ts
- Add revalidateTag('sitemap', 'default') to on-demand revalidation endpoint
- Fix test assertions to match /game/ URL path
2026-05-04 13:16:47 +08:00
adrianbonpin 9d3690ce50 feat: add on-demand sitemap revalidation webhook 2026-05-04 13:12:37 +08:00
adrianbonpin 0a138c3099 fix: remove non-standard host directive from robots.txt 2026-05-04 13:11:27 +08:00
adrianbonpin 16e5cf586d feat: rewrite sitemap with ISR caching, validation, and filtered allowlist 2026-05-04 13:10:56 +08:00
adrianbonpin ca08024cb5 feat: updates page and lint fixes 2026-05-01 10:15:13 +08:00
adrianbonpin 7bcd580397 fix: replace prose plugin with custom CSS for markdown styling 2026-05-01 09:49:26 +08:00
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 824fbbd13f feat: rearrange game benchmark wizard and improve overall 2026-05-01 01:18:13 +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 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 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 aa57a96191 fix: register dashboard and saved-filters API routes 2026-04-30 21:25:20 +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 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 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 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