docs: six media types complete; game detail says Play

- README status: PDF, music metadata, comic metadata, and games are done.
  Six media types work; video remains deferred by design. The stack now covers
  Stump, Kavita, Audiobookshelf, Navidrome, and RomM — only Jellyfin is left.
- IGDB environment variables documented.
- Item detail labels the primary action "Play" for games, not "Read".
This commit is contained in:
mithral 2026-10-09 21:57:40 -04:00
parent b82090ed29
commit 1d7831ac10
2 changed files with 18 additions and 12 deletions

View file

@ -18,23 +18,26 @@ The full plan lives in `~/.opencode/plan/vellum.md`.
| **2b** | FTS5 search | **done** | | **2b** | FTS5 search | **done** |
| **3** | EPUB reader + progress | **done** | | **3** | EPUB reader + progress | **done** |
| **4** | CBZ comic reader | **done** | | **4** | CBZ comic reader | **done** |
| **5** | Job queue, metadata (Open Library, Google Books) | **done** | | **PDF** | PDF reading (pdf.js) | **done** |
| **5** | Job queue, metadata (Open Library, Google Books, MusicBrainz, ComicVine, IGDB) | **done** |
| **6a** | Audiobooks + music playback | **done** | | **6a** | Audiobooks + music playback | **done** |
| **6c** | Photos + thumbnails | **done** | | **6c** | Photos + thumbnails | **done** |
| **UI** | Svelte app | **done** | | **7** | Games: ROM scanning, platforms, cloud saves, EmulatorJS | **done** |
| 6b | Music metadata, smart playlists | not started | | **UI** | Svelte app: home, browse, item pages, readers | **done** |
| 7 | Games (EmulatorJS, IGDB) | not started | | 6b | Music smart playlists | not started |
| — | Video (stays on Jellyfin for now) | deferred | | — | Video (stays on Jellyfin) | deferred |
What works today: an administrator adds libraries pointing at server folders, What works today: an administrator adds libraries pointing at server folders,
scans them, and optionally enriches metadata from Open Library. Users sign in scans them, and optionally enriches metadata. Users sign in and read EPUBs and
and read EPUBs, read CBZ comics, listen to audiobooks track-by-track, and PDFs, read CBZ comics, listen to audiobooks track-by-track, browse photos, and
browse photos — with position saved per account, per file. PDF, RAR comics, play emulated games in the browser with their own cloud saves — with position
games, and video are not implemented. saved per account, per file.
Five of the six services in the existing stack are covered: **Stump, Kavita, **Six media types work: ebooks, comics, audiobooks, music, photos, games.**
Audiobookshelf, Navidrome (playback), and RomM** are the intended Video is the only one not implemented, and it stays on Jellyfin on purpose.
replacements. RomM is not yet covered; video stays on Jellyfin.
Of the services in the existing stack, this covers **Stump, Kavita,
Audiobookshelf, Navidrome, and RomM**. Only Jellyfin (video) is left.
## Quick start ## Quick start
@ -66,6 +69,8 @@ binary runs with no configuration at all.
| `VELLUM_ADMIN_PASSWORD` | *(none)* | Password for that first admin (min 8 chars) | | `VELLUM_ADMIN_PASSWORD` | *(none)* | Password for that first admin (min 8 chars) |
| `VELLUM_COOKIE_SECURE` | `false` | Set `true` when serving over TLS | | `VELLUM_COOKIE_SECURE` | `false` | Set `true` when serving over TLS |
| `VELLUM_COMICVINE_API_KEY` | *(none)* | Enables comic metadata via ComicVine | | `VELLUM_COMICVINE_API_KEY` | *(none)* | Enables comic metadata via ComicVine |
| `VELLUM_IGDB_CLIENT_ID` | *(none)* | Enables game metadata via IGDB |
| `VELLUM_IGDB_CLIENT_SECRET` | *(none)* | IGDB client secret (both required) |
| `VELLUM_LOG_LEVEL` | `info` | `debug`, `info`, `warn`, `error` | | `VELLUM_LOG_LEVEL` | `info` | `debug`, `info`, `warn`, `error` |
| `VELLUM_LOG_FORMAT` | `text` | `text` or `json` | | `VELLUM_LOG_FORMAT` | `text` | `text` or `json` |
| `VELLUM_SESSION_TTL` | `720h` | Login session lifetime | | `VELLUM_SESSION_TTL` | `720h` | Login session lifetime |

View file

@ -43,6 +43,7 @@
switch (detail?.item.kind) { switch (detail?.item.kind) {
case 'audiobooks': case 'audiobooks':
case 'music': case 'music':
case 'games':
return 'Play' return 'Play'
case 'photos': case 'photos':
return 'View' return 'View'