adrianbonpin
15ebb64d8f
test: E2E browser tests for password reset + proxy guard (Task 19)
2026-05-27 04:16:40 +08:00
adrianbonpin
86575923b0
test: E2E browser tests for login + signup (Task 18)
2026-05-27 04:15:39 +08:00
adrianbonpin
eb9a185818
test: add rate limiter integration tests (Task 16)
2026-05-27 03:12:47 +08:00
adrianbonpin
559791a790
refactor: remove mobile-callback bridge page (Task 13)
2026-05-27 03:02:33 +08:00
adrianbonpin
8e9b16349c
fix: update API version and restrict set-password to JSON body (Task 7)
2026-05-27 02:52:09 +08:00
adrianbonpin
f059b00f4b
refactor: consolidate check-email into Elysia rate limiter (Task 6)
2026-05-27 02:50:55 +08:00
adrianbonpin
5db12dfe1c
fix: validate session for signup wizard steps (Task 5)
2026-05-27 02:50:00 +08:00
adrianbonpin
079df570c5
test: add auth guard tests (Task 4)
2026-05-27 02:48:46 +08:00
adrianbonpin
34e66de8b3
test: add password strength tests (Task 2)
2026-05-27 02:42:34 +08:00
adrianbonpin
d9be0510cc
test: add validation schema tests (Task 1)
2026-05-27 02:41:17 +08:00
adrianbonpin
7ce607fa9b
fix: add sitemap index route at /sitemap.xml for Next.js 16 generateSitemaps
2026-05-25 21:47:08 +08:00
adrianbonpin
535836b6ba
test: add sitemap integration constraint verification (Task 3)
2026-05-25 21:29:10 +08:00
adrianbonpin
bad8d55cf4
fix: convert game count to number for type-safe comparison (build fix)
2026-05-25 21:26:01 +08:00
adrianbonpin
5083255654
feat: rewrite sitemap with generateSitemaps pattern — 4 isolated child sitemaps (Task 2)
2026-05-25 21:24:11 +08:00
adrianbonpin
1ed90bb222
feat: extract sitemap utilities to lib/sitemap-utils.ts (Task 1)
2026-05-25 21:16:17 +08:00
adrianbonpin
bc1fe0b72b
chore: bump version to 2026.2.1, add changelog entry for SEO improvements (Task 13)
2026-05-25 19:43:58 +08:00
adrianbonpin
49800c3cc2
test: final metadata integration sweep — verify all page titles (Task 11)
2026-05-25 19:42:05 +08:00
adrianbonpin
ad7c361d0d
feat: add AggregateRating JSON-LD to game detail pages (Task 10)
2026-05-25 19:40:52 +08:00
adrianbonpin
d4ff5a26a6
feat: add BreadcrumbList JSON-LD to game, games, and devices pages (Task 9)
2026-05-25 19:39:43 +08:00
adrianbonpin
183bdc96c0
feat: add Organization JSON-LD to homepage (Task 8)
2026-05-25 19:38:02 +08:00
adrianbonpin
6b25e5918b
fix: use smartTruncate for game meta descriptions, prevent mid-word cutoff (Task 7)
2026-05-25 19:36:27 +08:00
adrianbonpin
6cd0fc6b6f
fix: verify H1 uniqueness on game detail pages - no duplicate found (Task 6)
2026-05-25 19:35:12 +08:00
adrianbonpin
2976a34b46
fix: add canonical URL, preconnect hints, remove user-scalable=no (Task 5)
2026-05-25 19:33:21 +08:00
adrianbonpin
a2e94ca328
fix: add metadata exports for /compare and /profile pages (Task 4)
2026-05-25 19:31:38 +08:00
adrianbonpin
b14f03e2b7
fix: correct title duplication on /games and /devices pages (Task 3)
2026-05-25 19:30:19 +08:00
adrianbonpin
db9a9150e8
test: add metadata integration test scaffold for SEO fixes (Task 2)
2026-05-25 19:28:43 +08:00
adrianbonpin
beae61a117
feat: add SEO utility functions smartTruncate and buildBreadcrumbList (Task 1)
2026-05-25 19:26:22 +08:00
adrianbonpin
2afee33fb0
fix: update vitest config (exclude .worktrees, revert package.json test scripts to vitest)
2026-05-25 19:24:41 +08:00
adrianbonpin
86fc0c2999
fix: resolve pre-existing test failures in auth, steam, and auto-pin tests
2026-05-25 19:20:54 +08:00
adrianbonpin
e44a85fe94
chore: merge dev -> prod - robust sitemap + error handling
2026-05-23 15:37:30 +08:00
adrianbonpin
8948113c0f
feat: robust sitemap with error handling, missing pages, and full test coverage
...
- Add querySafe() wrapper with 15s timeout so DB failures don't crash the sitemap
- Add missing pages: /compare, /search, /updates/[slug] (from markdown)
- Bump game page priority to 0.8; add lastModified where available
- Expand test suite from 4 to 10 tests covering all data sources
- All 10 tests passing
2026-05-23 15:37:17 +08:00
adrianbonpin
6d3f72d6c1
chore: cleanup whitespace
2026-05-20 02:30:13 +08:00
adrianbonpin
c808747b9d
fix: correct sitemap test count and steamdb version extraction
2026-05-20 02:27:56 +08:00
adrianbonpin
8da0dce723
chore: bump version to 2026.2.0 with CHANGELOG and update news
2026-05-20 02:25:04 +08:00
adrianbonpin
249b8bc7e9
feat: generate slug on non-Steam game creation
2026-05-20 02:24:05 +08:00
adrianbonpin
e61071007e
feat: share button uses steamAppId/slug instead of UUID
2026-05-20 02:23:09 +08:00
adrianbonpin
1929572060
feat: add /app/[steamid] → /game/[steamid] ProtonDB redirect
2026-05-20 02:21:53 +08:00
adrianbonpin
d8ff20f3b1
feat: extend resolveGame() with slug fallback lookup
2026-05-20 02:21:17 +08:00
adrianbonpin
61d516f1b1
feat(db): backfill slugs for existing non-Steam games
2026-05-20 02:19:42 +08:00
adrianbonpin
b835ac678f
feat(db): add slug column to games table
2026-05-20 02:17:15 +08:00
adrianbonpin
e5f671a992
feat: add multi-strategy version fetchers, disable auto-fetch by default
...
- Add 4 version-fetch strategies (UpToDateCheck API, Store Page Scrape,
Community Hub Scrape, Store API Heuristic) — no Steam API key needed
- Create orchestrator that tries all strategies, prefers named version
over build ID
- Add test page at /test-version-fetchers for comparing strategies
- Add standalone /api/version-test endpoint (direct Steam App ID, no DB)
- Update /api/games/:id/steamdb-version to use new strategies
- Disable auto-fetch on submit page by default (NEXT_PUBLIC_VERSION_AUTO_FETCH=true to enable)
- SteamDB scraping blocked by Cloudflare; strategies preserved for later enablement
2026-05-16 20:13:23 +08:00
adrianbonpin
88a098f387
fix: enforce max screenshot limit (2) on upload area and existing remove button
2026-05-16 19:13:16 +08:00
adrianbonpin
f4eab9c8e0
fix: show existing screenshots in edit mode, fix drag reorder jank, bump version to 2026.1.102
2026-05-16 18:33:56 +08:00
adrianbonpin
0ff27b613d
chore: remove public community dashboard page
2026-05-16 18:10:29 +08:00
adrianbonpin
3363b9161d
chore: bump version to 2026.1.0 and write changelog
2026-05-16 17:40:42 +08:00
adrianbonpin
8e88d6f759
test: add auto-pin threshold edge case tests
2026-05-16 17:37:51 +08:00
adrianbonpin
1b7600a2f6
feat: support removing screenshots during entry edit
2026-05-16 17:36:06 +08:00
adrianbonpin
99b89347d0
feat: show existing screenshots when editing entries with remove support
2026-05-16 17:33:36 +08:00
adrianbonpin
29a8ec667f
fix: prevent text selection and touch interference on drag handles
2026-05-16 17:31:30 +08:00
adrianbonpin
fb892265c4
fix: scope games listing performance tags to handheld devices
2026-05-16 17:29:47 +08:00
adrianbonpin
4465eb3a87
fix: scope performance tags (Raw Performer/Poor Performance) to handheld devices only
2026-05-16 17:27:24 +08:00
adrianbonpin
aef9802263
feat: add Steam sale section to landing page
2026-05-16 17:24:43 +08:00
adrianbonpin
719e3f1c4a
feat: add /api/dashboard/on-sale endpoint for Steam sale games
2026-05-16 17:22:08 +08:00
adrianbonpin
d71cb27f54
feat: make public dashboard full-width matching game details styling
2026-05-16 17:20:38 +08:00
adrianbonpin
5fe527552b
feat: add ban reason, expiry, and filter tabs to user management
2026-05-16 17:18:57 +08:00
adrianbonpin
9e98af1053
feat: add analytics page with time-series charts to manage panel
2026-05-16 17:16:51 +08:00
adrianbonpin
0450946107
feat: add admin analytics API endpoint with time-series data
2026-05-16 17:14:53 +08:00
adrianbonpin
e089fb2cf7
feat: add server-side role guard to manage layout (moderator+)
2026-05-16 17:13:03 +08:00
adrianbonpin
4ec97a92ab
feat: conditionally hide admin-only nav items for moderator role
2026-05-16 17:11:35 +08:00
adrianbonpin
92d16273d7
feat: gate destructive moderation endpoints to moderator+ role
2026-05-16 17:09:07 +08:00
adrianbonpin
23bbfc0317
feat: register moderator role in auth config and add guard
2026-05-16 17:06:24 +08:00
adrianbonpin
0f018b376e
feat: add moderator role to permissions model
2026-05-16 17:04:27 +08:00
adrianbonpin
64b026386d
feat: add 5-min in-memory cache to dashboard stats endpoint
2026-05-16 17:02:48 +08:00
adrianbonpin
e7a48d4e6f
feat: add performance and moderation index migration
2026-05-16 17:00:41 +08:00
adrianbonpin
3388bf42b5
feat: add database indexes for frequent query patterns
2026-05-16 16:57:23 +08:00
adrianbonpin
6737761151
docs: add OpenAPI descriptions and response schemas for all routes
2026-05-16 16:03:52 +08:00
adrianbonpin
c22c1842d0
feat: add GET /api/mobile/benchmark/:entryId and GET /api/mobile/dashboard
2026-05-16 16:00:10 +08:00
adrianbonpin
fda5c4d60e
feat: add GET /api/mobile/search endpoint (DB-only, performance tags)
2026-05-16 15:57:28 +08:00
adrianbonpin
33f5aa8ec6
feat: add GET /api/mobile/game/:gameId consolidated endpoint
2026-05-16 15:55:22 +08:00
adrianbonpin
1ad216b9ff
fix(api): fix Response.clone body consumed error on /api/openapi
...
Add embedSpec: true to openapi config to prevent cached Response
body from being consumed on subsequent requests. Also add
games-performance routes export and mobile-callback route.
2026-05-16 05:33:20 +08:00
adrianbonpin
c17ce403dd
docs: mark all plan tasks as complete in implementation plan
2026-05-15 01:39:45 +08:00
adrianbonpin
58c2e81366
docs: update changelog and update news with landing page section changes and performance badges
2026-05-15 01:37:57 +08:00
adrianbonpin
4ace385a6e
feat(landing): add recently added benchmarks section, reorder sections, add PlayabilityBadge and performance tags to cards
2026-05-15 01:37:06 +08:00
adrianbonpin
1e546ca007
feat(api): add /recent-benchmarks endpoint and avg_fps to most-tested
2026-05-15 01:35:06 +08:00
adrianbonpin
45d4570665
chore: bump version to 2026.0.101, update changelog and update news
2026-05-15 01:07:42 +08:00
adrianbonpin
23700b00ae
feat(landing): trending, new releases, most tested/reported sections with peek hero layout
2026-05-15 01:05:55 +08:00
adrianbonpin
dbb0caa7e7
feat(steamdb): integrate version auto-fetch into submit wizard UI
2026-05-15 01:02:13 +08:00
adrianbonpin
1ba6335ea1
feat(steamdb): register steamdb-version route in app.ts read group
2026-05-15 00:57:10 +08:00
adrianbonpin
9f8a92206c
feat(steamdb): export steamdbVersionRoutes from barrel index
2026-05-15 00:56:19 +08:00
adrianbonpin
5404d52bfe
feat(steamdb): create API endpoint GET /api/games/:gameId/steamdb-version
2026-05-15 00:55:30 +08:00
adrianbonpin
3eb4a49151
feat(steamdb): add unit tests for SteamDB HTML parser (5 tests)
2026-05-15 00:54:28 +08:00
adrianbonpin
cdc4ed7889
feat(steamdb): create HTML scraper to extract version and build ID from SteamDB
2026-05-15 00:53:03 +08:00
adrianbonpin
7e6bab9bad
feat(steamdb): create in-memory cache module with 6h TTL and cooldown tracking
2026-05-15 00:52:02 +08:00
adrianbonpin
75c38341c4
feat(security): add submission validation hardening (cooldown, FPS bounds, settings limits, notes cap)
2026-05-15 00:50:23 +08:00
adrianbonpin
d0b69892ea
feat(security): add input sanitization to strip script tags and javascript: URLs from comments
2026-05-15 00:48:27 +08:00
adrianbonpin
470e374656
feat(security): add comment anti-spam (content length cap, duplicate detection, hourly limit)
2026-05-15 00:47:33 +08:00
adrianbonpin
b895e8714d
feat(security): apply tiered rate limits with scoped .group() blocks in app.ts
2026-05-15 00:45:12 +08:00
adrianbonpin
e908880834
feat(security): extend rateLimit to support named categories with 5 tiers
2026-05-15 00:39:35 +08:00
adrianbonpin
0cda534825
docs: implementation plan for landing page, SteamDB, security, and changelog
2026-05-14 23:55:21 +08:00
adrianbonpin
b2139fd444
docs: architectural spec for landing page, SteamDB integration, API security, and changelog
2026-05-14 23:08:43 +08:00
adrianbonpin
fbfc43832e
feat: add OpenAPI support and in-process cron scheduler
...
- Install @elysia/openapi to auto-generate API docs at /api/openapi
- Install @elysia/cron for in-process scheduled jobs (orphan detection at 2am, storage cleanup at 3am)
- Add Scalar UI docs with 14 tag groups and Bearer JWT security scheme
- Add route-level detail annotations (tags, summaries) to all 30+ route files
- Upgrade crud-builder to accept optional tags config
- Keep HTTP cron endpoint as manual/admin fallback
2026-05-14 21:43:33 +08:00
adrianbonpin
20f010cef1
feat: Update to nextjs 16.2.4
2026-05-11 13:10:26 +08:00
adrianbonpin
f11c8343d4
refactor: overhaul settings editor, review step, and preset detail modal
...
- Refactored settings-editor.tsx with improved structure
- Refactored review-step.tsx for better readability
- Refactored preset-detail-modal.tsx
- Minor fix in game-page-client.tsx
2026-05-10 16:38:27 +08:00
adrianbonpin
9b1e428bc7
feat: YouTube preview in review step, phase-aware submit button (Task 7)
2026-05-10 15:37:42 +08:00
adrianbonpin
9dc7013fbf
feat: atomic FormData submit, back button on review, submit phase state (Task 6)
2026-05-10 15:36:05 +08:00
adrianbonpin
6f64f1d89a
feat: convert PATCH /:id/edit to multipart with atomic screenshot replacement (Task 5)
2026-05-10 15:32:09 +08:00
adrianbonpin
285213acdc
feat: convert POST /submit to multipart with atomic screenshot processing and R2 cleanup (Task 4)
2026-05-10 15:27:35 +08:00
adrianbonpin
3e50b0f6bb
refactor: rename Community Presets to Performance Entries in game page UI (Task 3)
2026-05-10 15:21:51 +08:00
adrianbonpin
6211683c70
feat: refactor preset modal — tabbed layout, metadata groups, screenshot lightbox, remove v prefix (Task 2.1)
2026-05-10 15:20:14 +08:00
adrianbonpin
303971424d
feat: create ScreenshotLightbox component with zoom/pan and navigation (Task 1.1)
2026-05-10 15:11:33 +08:00