Commit Graph

59 Commits

Author SHA1 Message Date
c6512d0153 add missing biome platform binary for darwin-arm64
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 14:39:57 +01:00
2a2ccced90 add one-time migration script for JSON cache → PostgreSQL
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 14:39:30 +01:00
bd5df81f37 replace IGDB file caches with Drizzle/PostgreSQL, add combined /resolve endpoint
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 14:29:27 +01:00
63219afc10 add PostgreSQL + Drizzle schema for IGDB resolution and metadata caching
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 14:19:47 +01:00
ff98d7e64f fix canonical_id reset: stop wiping enrichment data on re-sync
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 14:09:32 +01:00
2d50198782 cache shuffled game order in zustand store to prevent card flicker
the discover tab re-shuffled on every mount because useGames() returns
a new array reference each time. now the shuffled ID order is stored in
zustand, only recomputed when game count or seen count actually changes.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 23:59:30 +01:00
2c8141660c fix IGDB resolution: drop broken category filter, match by URL prefix
the IGDB external_games category filter returns empty for all values.
filter steam/gog entries by URL prefix instead (store.steampowered.com,
gog.com). reduce batch size to 50 to stay within 500-result API limit
since each uid can return multiple platform entries.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 23:40:00 +01:00
109a9f383b add IGDB metadata enrichment, image proxy, rich game UI
server: metadata cache + fetch service, image proxy with disk cache,
POST /igdb/metadata + GET /igdb/image/:id/:size routes.
client: 002-metadata migration, enrichment wired into sync pipeline,
extracted SyncProgress component, square cover icons in list items,
genres/rating/summary on discover cards, tap-to-navigate on card stack,
rich game detail with screenshots, trailer embed, developer info.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 22:51:58 +01:00
0f8c9f331f fix default sort direction so most-played game is first
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 22:13:29 +01:00
32b9740854 default library sort to playtime desc, use GameListItem in playlists
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 22:11:40 +01:00
0ccfe16a67 full-height discover layout, info button on cards, game state dot
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 21:57:52 +01:00
28d8959c5c wire game detail navigation from library, playlists
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 21:56:16 +01:00
ac5ac570e2 add game detail component, route at /games/$gameId
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 21:52:16 +01:00
7f16657a84 refactor useGame to return { game, loading, reload }, add game detail i18n keys
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 21:50:33 +01:00
7337f38710 add app versioning, state-aware update button, disable pinch zoom
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 21:31:14 +01:00
b50fde1af5 improve discover: seeded shuffle, reusable swipe gesture hook, optimistic swipes
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 21:30:50 +01:00
ee8b9aa77f refine playlists UI
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 21:30:18 +01:00
5f5d163021 improve library: game-list-item, fix sort mutation, input zoom, startTransition
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 21:24:35 +01:00
05d05ed05e overhaul settings UI, move sync logic to sync store
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 21:23:15 +01:00
db1f66ced2 add list-item component, sync store, refine layout, styles
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 21:21:15 +01:00
ee32bfd206 refine server setup, deploy script, steam icon cache
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 21:21:07 +01:00
399e7d5b89 add pwa setup, deploy script, fix build configuration
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 14:44:41 +01:00
c9c69a3265 add discover feature: tinder swipe cards, progress, like/skip
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 14:36:30 +01:00
7e71098658 add playlists feature: static + custom playlists, CRUD, add/remove games
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 14:34:25 +01:00
e51a01123e add library feature: search, sort, deduplication, progressive rendering
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 14:32:18 +01:00
9577087930 add games feature: star rating, game state, favorites, game card
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 13:59:06 +01:00
d907f26683 add settings feature: steam, gog providers, data management
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 13:57:49 +01:00
1d444e6e4e add shared frontend: router, i18n, ui store, api client
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 13:52:49 +01:00
2fdaf870b6 add pglite database layer: schema, migrations, hooks
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 13:48:42 +01:00
5ebd9dba16 add hono backend: steam, gog, igdb api proxy, fix gitignore overrides
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 13:40:43 +01:00
17b52173c7 scaffold project: vite, react 19, tailwind v4, shadcn/ui, tanstack router
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 13:32:05 +01:00
de812a0fd1 archive legacy code, begin clean rewrite
legacy branch preserves all prior code.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 12:58:11 +01:00
086572dfcc sync current state 2026-03-01 12:03:42 +01:00
831ed42b7e snapshot current state before gitea sync 2026-02-18 10:50:36 +01:00
bc22a6b5a0 add favorites, add tinder playlists 2026-02-06 23:38:34 +01:00
11c3f141d5 clean up code 2026-02-06 23:18:13 +01:00
3cac486f6f fix Steam API: transform response format and add comprehensive logging
- Backend: transform Steam API response to match frontend expectations (games/count structure)
- Frontend: map Steam game fields (appid, name, playtime_forever) to database schema (id, title, playtimeHours)
- Add detailed logging throughout request lifecycle for debugging
- Add 60-second timeout with AbortController to prevent indefinite hanging
- Fix IndexedDB constraint violation by properly transforming game data before save

Co-Authored-By: Claude <noreply@anthropic.com>
2026-02-06 22:25:04 +01:00
cfe6384f75 implement proper Steam API endpoint for /steam/refresh
Fixed issue where backend was forwarding /steam/refresh to
store.steampowered.com instead of calling the actual Steam Web API.

Now properly calls:
https://api.steampowered.com/IPlayerService/GetOwnedGames/v1/

With parameters from request body (apiKey, steamId).

Fixes 'the string did not match the expected pattern' error.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-02-06 21:53:04 +01:00
6a6fe467e1 fix API routing: remove /api prefix in Express routes
Uberspace web backend removes /api prefix before forwarding to Express,
so routes must not include /api. Changed from app.all('/api/*') to
app.all('/*').

/health route is defined first, so it takes precedence.

Fixes 404 errors when calling Steam API from production.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-02-06 21:50:51 +01:00
c2f819bdf9 remove Worker URL field from Steam settings
Removed Cloudflare Worker URL input field and info text from
SettingsDetailPage. Backend URL is now configured via environment
variable VITE_API_URL, not in UI.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-02-06 21:41:42 +01:00
c48878b86c remove all Cloudflare Workers references and cleanup
Removed:
- workers/ directory (Cloudflare Worker scripts)
- public/workers/ (Worker scripts in public)
- Cloudflare setup documentation
- workerUrl from Database and ConfigService interfaces
- Outdated documentation files (ARCHITECTURE, IMPLEMENTATION-SUMMARY, QUICK-START)
- IOS-WEB-STRATEGY.md

Updated:
- README.md - now focuses on Uberspace deployment only
- ConfigService.getApiUrl() - removed workerUrl parameter
- SettingsDetailPage - removed config.workerUrl usage
- Database.DbConfig - removed workerUrl and cloudflare fields

The app now uses only Uberspace for both frontend and backend.
No more multi-deployment complexity.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-02-06 21:34:38 +01:00
86da0feb1b add .htaccess for SPA routing support
Fix 404 errors on page refresh by redirecting all non-file/non-API
requests to index.html for client-side routing.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-02-06 21:30:49 +01:00
576c171a98 clean up: remove GitHub Pages & Cloudflare Workers, deploy to Uberspace
All-in-one Uberspace deployment:
- Backend: Node.js Express on port 3000 (/api/*)
- Frontend: Static files served by Apache (/)
- URL: https://wtp.uber.space

Removed:
- GitHub Actions workflow
- Cloudflare Worker setup service
- CloudflareSetupPage component
- CloudflareService
- 404.html (GitHub Pages redirect)
- Cloudflare menu item from Settings

Simplified:
- Use VITE_BASE_PATH and VITE_API_URL for config
- Single deployment target (no multi-env complexity)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-02-06 21:24:42 +01:00
0fe09f01f8 add simple Uberspace deployment option (simpler than Cloudflare)
Instead of the complex Cloudflare Worker setup with CORS proxy,
you can now deploy both PWA and backend on Uberspace (~5€/month).

Changes:
- Add Express.js backend server (server/index.js)
- Update ConfigService to support VITE_API_URL env variable
- Make base path configurable via VITE_BASE_PATH
- Add comprehensive Uberspace deployment guide
- Add .env.production.example for configuration

Deployment options:
1. Uberspace (recommended): Simple, all-in-one hosting
2. GitHub Pages + Cloudflare Workers: Free but complex setup

Co-Authored-By: Claude <noreply@anthropic.com>
2026-02-06 20:50:56 +01:00
985c61ed74 add Cloudflare Setup Service to bypass CORS restrictions
The Cloudflare API blocks direct browser requests due to CORS.
This setup service acts as a proxy, allowing browser-based
worker deployment.

Changes:
- Create cf-setup-service.js worker for CORS proxy
- Update CloudflareService to use setup service API
- Add deployment instructions in workers/README.md
- Improve token creation guide with Zone field explanation

Next steps:
1. Deploy setup service: npx wrangler deploy workers/cf-setup-service.js --name whattoplay-setup
2. Update CF_SETUP_SERVICE_URL in CloudflareService.ts with your URL
3. Commit and push

Co-Authored-By: Claude <noreply@anthropic.com>
2026-02-06 20:44:53 +01:00
493072c3ff improve Cloudflare API token creation instructions
Added detailed 7-step guide with specific button locations and
actions to make the token creation process clearer for users.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-02-06 20:12:56 +01:00
bbaf629907 fix Cloudflare setup route matching by wrapping routes in Switch
The specific route /settings/cloudflare was being matched by the dynamic
route /settings/:serviceId despite being defined first. IonRouterOutlet
doesn't always respect route ordering for exact matches. Wrapping routes
in Switch ensures the specific route is matched before the dynamic one.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-02-06 19:59:24 +01:00
ceabfa4848 add automatic Cloudflare Worker deployment via in-app wizard 2026-02-06 19:25:14 +01:00
247410226d add cloudflare worker for Steam API proxy 2026-02-06 18:30:26 +01:00
2dc91ef111 fix routing, add PWA support for standalone mode 2026-02-06 18:05:20 +01:00