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>
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>
- 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>
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>
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>
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>