Commit Graph
509 Commits
Author SHA1 Message Date
adrianbonpin f7eda2bfc0 feat: add better-auth api-key plugin, import endpoint, and API key UI 2026-06-28 05:30:48 +08:00
adrianbonpin c4bede20d4 fix: remove duplicate sitemap route
- app/sitemap.ts already generates the sitemap index via generateSitemaps()
- app/sitemap.xml/route.ts was a duplicate manual version at the same path
2026-06-26 22:12:37 +08:00
adrianbonpin 9ee927ce77 fix: prevent scroll capture on card rows with pointer-events
- Wrap card containers in overflow-x-auto with pointer-events: none
- Inner flex div gets pointer-events: auto so cards remain interactive
- Main page scrolling works normally when cursor is over card rows
2026-06-26 22:03:44 +08:00
adrianbonpin 26fc600266 fix: replace horizontal scroll with flex-wrap on card rows
- Remove overflow-x-auto so cards don't capture scroll events
- Cards now wrap naturally into rows with flex-wrap
- Main page scrolling works normally even when cursor is over cards
2026-06-26 22:00:58 +08:00
adrianbonpin 945d0dc96d fix: prevent vertical overflow on card scroll containers
- Add overflow-y-hidden to all three card containers (skeleton, GameSection, SaleSection)
- Keeps horizontal scrolling but prevents any vertical scroll
2026-06-26 21:59:59 +08:00
adrianbonpin b91068ac64 fix: prevent vertical overscroll on card scroll containers 2026-06-26 21:58:20 +08:00
adrianbonpin 38c58cdbd2 style: add rounded corners to card images and hide scrollbars
- Add rounded-xl to card images so corners match the card border radius
- Replace scrollbar-thin with scrollbar-none on horizontal scroll containers
2026-06-26 21:57:13 +08:00
adrianbonpin 236f293879 refactor: redesign landing page card hover behavior
- Remove card-level scale-up animation (whileHover/whileTap)
- Image now scales down slightly on hover instead of scaling up
- Keeps border/background color transitions for hover feedback
2026-06-26 21:54:53 +08:00
adrianbonpin ec5ee7fb18 feat: add Cloudflare Turnstile captcha to auth flow
- Add captcha plugin to Better Auth config (cloudflare-turnstile provider)
- Create reusable TurnstileWidget component with script injection
- Integrate Turnstile into login, signup, and forgot-password forms
- Pass x-captcha-response header on protected endpoints
- Add TURNSTILE_SECRET_KEY and NEXT_PUBLIC_TURNSTILE_SITE_KEY to env
2026-06-26 21:50:45 +08:00
adrianbonpin 7d78f1834d chore: update Rybbit analytics URL from analytics.ranlabs.space to stat.ranio.xyz 2026-05-31 05:13:52 +08:00
adrianbonpin accbfe48c9 test: E2E browser tests for domain block enforcement (Task 10) 2026-05-28 00:27:30 +08:00
adrianbonpin e1ee2c54f2 test: E2E browser tests for auth form placeholder verification (Task 9) 2026-05-28 00:26:09 +08:00
adrianbonpin 893f6356c6 refactor: remove all rate limiting across the application (Task 11) 2026-05-28 00:24:33 +08:00
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 980e16bb97 feat: change email placeholder from you@example.com to you@deckyvault.xyz (web) (Task 5) 2026-05-28 00:14:26 +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 c81f0defb2 feat: add deckyvault.xyz domain block to signupSchema (Task 2) 2026-05-28 00:07:55 +08:00
adrianbonpin 60f25b08f6 feat: add isDeckyVaultEmail domain validation helper (Task 1) 2026-05-28 00:06:16 +08:00
adrianbonpin 05ddb8b4cc fix: resolve module mock conflicts in metadata and sitemap tests
- Add missing drizzle-orm exports (avg, count) to metadata and sitemap test mocks
- Add missing schema exports (steamReviewSentimentEnum) to metadata and sitemap test mocks
- Add missing schema tables (gameVersions, performanceEntries, gameComments, gamePlatformSupport, user, entryScreenshots) to sitemap test mock
- Remove @/lib/steam/sync mock from metadata test to prevent module mock caching conflicts
- Add auth export to @/lib/auth mock

This fixes 7 pre-existing test failures caused by module mock interference
when test files run in the same process.
2026-05-28 00:03:57 +08:00
adrianbonpin 02e82f5b90 fix: use globalThis instead of window to prevent SSR ReferenceError in login form passkey check 2026-05-27 04:19:47 +08:00
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