adrianbonpin
ea4907cf4b
fix: resolve TypeScript errors in domain-block-api test (Task 8)
2026-05-28 00:21:04 +08:00
adrianbonpin
99d6572a3d
chore: bump version to 2026.2.2, add changelog and update news (Task 7)
2026-05-28 00:18:20 +08:00
adrianbonpin
542b855555
test: add check-email regression guard for deckyvault.xyz login (Task 4)
2026-05-28 00:13:10 +08:00
adrianbonpin
aa39fda696
feat: add server-side deckyvault.xyz domain block middleware (Task 3)
2026-05-28 00:12:17 +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
86fc0c2999
fix: resolve pre-existing test failures in auth, steam, and auto-pin tests
2026-05-25 19:20:54 +08:00
adrianbonpin
249b8bc7e9
feat: generate slug on non-Steam game creation
2026-05-20 02:24:05 +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
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
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
4465eb3a87
fix: scope performance tags (Raw Performer/Poor Performance) to handheld devices only
2026-05-16 17:27:24 +08:00
adrianbonpin
719e3f1c4a
feat: add /api/dashboard/on-sale endpoint for Steam sale games
2026-05-16 17:22:08 +08:00
adrianbonpin
0450946107
feat: add admin analytics API endpoint with time-series data
2026-05-16 17:14:53 +08:00
adrianbonpin
92d16273d7
feat: gate destructive moderation endpoints to moderator+ role
2026-05-16 17:09:07 +08:00
adrianbonpin
64b026386d
feat: add 5-min in-memory cache to dashboard stats endpoint
2026-05-16 17:02:48 +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
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
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
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
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
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
5875595219
feat: enrich game cards with bestFps, raw/poor performer badges, and battery estimates (Tasks 5.1-5.6)
2026-05-10 05:17:55 +08:00
adrianbonpin
c704f35f51
feat: add computed battery estimate to ReviewStep via hardware wattHours + tdpWatts (Tasks 4.1-4.3)
2026-05-10 05:11:46 +08:00
adrianbonpin
6d906f0bbf
feat: remove estimatedBatteryMin references from 11 files (Tasks 3.1-3.14)
2026-05-10 05:07:25 +08:00
adrianbonpin
bcf2d540b8
chore: format components, switch to CDN hostname, and improve error handling in game stats
...
- Format long lines and union types in game page, preset modal, games page, and filter drawer
- Replace **.r2.dev with cdn.deckyvault.xyz in next.config image hostnames
- Replace sql ANY with drizzle inArray for hardware query in game stats
- Add try/catch error handler in game stats route
- Add post.md to .gitignore
2026-05-10 04:15:38 +08:00
adrianbonpin
814a5c3d7c
feat(api): register admin storage routes and export from index
2026-05-10 01:22:33 +08:00
adrianbonpin
0772b61de8
feat(api): add admin storage management endpoints (stats, list, delete, cleanup)
2026-05-10 01:20:12 +08:00
adrianbonpin
55e5028b09
feat(api): add admin paginated suggestions endpoint
2026-05-10 01:07:24 +08:00
adrianbonpin
5ed60ef3cc
chore: fix lint/type issues from seven-feature integration
2026-05-09 23:35:21 +08:00
adrianbonpin
3cbb3538da
feat: add screenshot upload/list/delete API routes
2026-05-09 22:40:05 +08:00
adrianbonpin
027d3ac8fc
feat: auto-pin entries with ≥10 votes and ≥80% approval
2026-05-09 22:32:19 +08:00
adrianbonpin
8ea160bd05
feat: accept tdpWatts and youtubeVideoId in performance submit/edit APIs
2026-05-09 22:29:34 +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
03428bdd0b
feat: add admin sitemap regeneration endpoint and cron task
2026-05-09 13:30:38 +08:00