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
adrianbonpin
d8d0e8f826
fix: use vote-based reputation instead of contributions*10
2026-04-28 09:38:38 +08:00
adrianbonpin
a2ff39c1b0
feat: add share and edit links to preset modal, sync URL preset param
2026-04-28 09:32:18 +08:00
adrianbonpin
f502d120a7
refactor: replace preset detail modal layoutId morph with bottom sheet slide-up + category crossfade
...
- Remove layoutId from preset card in game-page-client.tsx and modal in preset-detail-modal.tsx to eliminate text smearing during morph animation.
- Replace modal scale/opacity spring animation with bottom sheet y-slide spring (y: 100% → 0).
- Wrap settings table content in AnimatePresence mode='wait' with keyed motion.div for crossfade when switching categories.
2026-04-28 09:24:08 +08:00
adrianbonpin
1e41531834
fix: improve performance details modal mobile responsiveness
2026-04-28 08:49:14 +08:00
adrianbonpin
45ae0162eb
fix: refresh game page data after benchmark deletion
2026-04-28 08:48:01 +08:00
adrianbonpin
b4db4d8ab8
feat: redesign admin sidebar with grouped sections
...
- Add Management and Moderation sections with labeled groups
- Section labels: muted uppercase micro text
- Section dividers: horizontal on desktop, vertical on mobile
- Active state: bg-primary/10 text-primary rounded-lg
- Widen desktop sidebar from md:w-48 to md:w-56
- Add desktop-only Admin Panel header with LayoutDashboardIcon
- Expand nav to cover all 6 admin pages (users, hardware, games,
reports, benchmarks, comments)
- Update admin layout description to 'Manage your platform'
2026-04-28 08:47:03 +08:00
adrianbonpin
635e9fa46c
feat: add admin comments page with search, filters, pagination, remove/restore
2026-04-28 08:39:55 +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
a109e47f33
feat(admin): add reports admin page with searchable, paginated table
2026-04-28 08:04:17 +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
37e51f4d48
fix: gracefaul fallback + force-dynamic for build
2026-04-28 07:14:25 +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
175a58b9d5
feat: update sitemap with new pages and game images, add robots.txt disallow rules
2026-04-28 02:10:51 +08:00
adrianbonpin
7bcee83d03
feat: add Contact route to navigation
2026-04-28 02:10:28 +08:00
adrianbonpin
e14dafde62
feat: add contact/report page with Discord webhook integration
2026-04-28 02:09:55 +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
a36c5c2510
feat: add games list page with search, filters, and infinite scroll
2026-04-28 02:02:03 +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
35ee0fd308
docs: add implementation plan for games list, contact page, and SEO updates
2026-04-28 01:37:07 +08:00
adrianbonpin
e50eef52e8
docs: add design spec for games list, contact page, and SEO updates
2026-04-28 01:32:40 +08:00
adrianbonpin
f35b6aee1e
feat: transfer admin check to middleware and add vertical padding
2026-04-27 23:47:24 +08:00
adrianbonpin
647a26db94
chore: fix build errors and lint warnings from devices/admin implementation
...
- Fix setRole type error (cast to admin-accepted role type)
- Fix OG image edge runtime → nodejs (Drizzle needs Node.js)
- Fix eslint set-state-in-effect warnings
- Fix img → next/image in admin users client
- Remove unused eslint-disable directives
2026-04-27 22:22:52 +08:00
adrianbonpin
cfb5940f3c
feat: add admin games management page
...
- Game list with search and pagination
- Source and sync status badges
- View on site link and delete action
- Uses existing games CRUD API
2026-04-27 21:31:48 +08:00
adrianbonpin
c0c624c2ae
feat: add admin hardware management page with CRUD
...
- Device list fetched from /api/hardware/stats
- Create/edit devices via modal form
- Delete with confirmation dialog
- Uses existing hardware CRUD API endpoints
2026-04-27 21:20:01 +08:00
adrianbonpin
b6c3070854
feat: add admin users management page
...
- 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
2026-04-27 21:08:40 +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
e4e78cc578
feat: add per-device OG image generator for device detail pages
...
- 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
2026-04-27 20:58:43 +08:00
adrianbonpin
060911e29d
feat: redesign device detail page with fixes and improvements
...
- 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
2026-04-27 20:55:15 +08:00
adrianbonpin
eb944c2b3c
feat: redesign devices list page with filter tabs, image/icon, verified stats
...
- 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
2026-04-27 20:48:15 +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
de858081e0
docs: add implementation plan tasks 7-12 (admin panel + cleanup)
2026-04-27 20:13:14 +08:00
adrianbonpin
cd3c671d14
docs: add implementation plan tasks 4-6 (devices redesign + OG image)
2026-04-27 20:04:35 +08:00
adrianbonpin
2bdcbb0c1f
docs: add implementation plan (tasks 1-3) for devices redesign & admin
2026-04-27 19:47:24 +08:00
adrianbonpin
bce2f1fcd5
docs: add design spec for devices redesign & admin panel
2026-04-27 18:23:02 +08:00
adrianbonpin
421807b56b
fix: remove gradient fade edges from preset scroll — cleaner horizontal list
2026-04-27 16:51:19 +08:00
adrianbonpin
1e42cdd39e
fix: preset UX — gradient fade edges, Tiptap notes renderer, two-column modal layout with stats/settings, upvote/downvote buttons
2026-04-27 16:26:05 +08:00
adrianbonpin
a6eb50a555
fix: use createdAt instead of updatedAt for hardware in sitemap
2026-04-27 16:07:39 +08:00
adrianbonpin
713b309f74
feat: SEO overhaul — expanded sitemap, JSON-LD, canonical URLs, search metadata
2026-04-27 16:05:31 +08:00
adrianbonpin
9a6db98d42
feat: add dynamic OG image generation for game pages
2026-04-27 16:02:20 +08:00
adrianbonpin
d2a4e58b74
feat: horizontal preset layout, detail modal integration, reorder above stats
2026-04-27 15:58:35 +08:00
adrianbonpin
830c14fd3e
feat: add PresetDetailModal component with settings view, delete, and report
2026-04-27 15:49:25 +08:00
adrianbonpin
e40417a02d
feat: add generateMetadata, enriched preset data, and JSON-LD to game page
2026-04-27 15:40:27 +08:00
adrianbonpin
f228800593
feat: change user-delete to soft delete for performance entries
2026-04-27 15:36:12 +08:00