A personal video game tracker: what you are playing now, what you want to finish, what you have already finished, and what you would rather watch as a playthrough or a game movie on YouTube and Twitch. The library is stored on the device; no account required.
Try it: web app (installs as a PWA on Android, iPhone and desktop) | iOS beta on TestFlight
One codebase ships three ways: the PWA on the web, and iOS and Android shells via Capacitor. The iOS shell adds a native home-screen widget (SwiftUI, WidgetKit) fed from the web app through an App Group store. Shared UI and storage code lives in tables-core, the same package behind FilmTable.
A free fan project. Not affiliated with RAWG, IGDB, Valve, YouTube or Twitch.
- Two status tracks: playing (want to play → playing → played) and watching (want to watch → watching → watched), plus "dropped".
- Library with PLAYING / BACKLOG / PLAYED / WATCH tabs; the watch tab is split into "watching", "want to watch" and "watched" sections and can be filtered by each of them.
- Game page: cover, year, platforms, genres, Metacritic score, your own 1–10 rating, hours, a note, and the platform you played or watched it on.
- "For you" recommendations — computed on the device from your own library, and every card explains why it is there.
- Watch links: YouTube (longplay, game movie, walkthrough, review) and Twitch — one tap, no embedded players and no third-party tracking.
- Profile: statistics by status, platform and genre, backup export and import, a feedback form and contacts, and a way to support the project.
- Hidden
/#/insightspage — usage counters for this device plus diagnostics: it shows which source is responding and whether the app is running on Steam alone. - Theme: system, light or dark, remembered independently of the device.
| Source | What it provides | Key |
|---|---|---|
| RAWG | all platforms, covers, ratings; the primary catalogue | free, required |
| IGDB | console games with cover art; the second catalogue | free, via a Twitch app; optional |
| Steam | PC games without a key; the fallback path | not required |
All three go through a thin serverless proxy: the RAWG key and the IGDB client secret cannot live in the browser, and Steam does not send CORS headers at all. Without IGDB credentials the proxy answers 503 and search moves on to the next source. Details and measurements are in docs/DATA-SOURCES.md.
npm install
npm run devSearch only works with the proxy running, since none of the sources is reachable from the browser directly:
echo 'RAWG_API_KEY=<key>' > .env.local # the file is in .gitignore
echo 'IGDB_CLIENT_ID=<id>' >> .env.local # optional, for console games
echo 'IGDB_CLIENT_SECRET=<secret>' >> .env.local
node --env-file=.env.local scripts/dev-api.mjs # proxy on :3001
npm run dev # Vite proxies /api to itThe native shells are built from the same source: npm run build:native, then
npx cap sync and open ios/App or android/ in Xcode or Android Studio.
docs/RELEASE-IOS.md covers the TestFlight upload.
| File | What it covers |
|---|---|
| CLAUDE.md | brief context, principles, how to verify |
| docs/PLAN.md | the concept, statuses, screens |
| docs/ARCHITECTURE.md | code structure and data model |
| docs/DATA-SOURCES.md | the APIs and their quirks, with measurements |
| docs/DECISIONS.md | why it is built this way, and the pitfalls from FilmTable |
| docs/DEPLOY.md | deployment, environment variables, production checks |
| docs/RELEASE-IOS.md | building the iOS shell and releasing to TestFlight |
| docs/STORE.md | store listing draft and screenshots |
