From 1d7831ac10365b8aa42b56b60ab1452a6590aaf0 Mon Sep 17 00:00:00 2001 From: mithral Date: Fri, 9 Oct 2026 21:57:40 -0400 Subject: [PATCH] docs: six media types complete; game detail says Play MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 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". --- README.md | 29 ++++++++++++++---------- web/src/lib/components/ItemDetail.svelte | 1 + 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 4847bfe..45b5677 100644 --- a/README.md +++ b/README.md @@ -18,23 +18,26 @@ The full plan lives in `~/.opencode/plan/vellum.md`. | **2b** | FTS5 search | **done** | | **3** | EPUB reader + progress | **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** | | **6c** | Photos + thumbnails | **done** | -| **UI** | Svelte app | **done** | -| 6b | Music metadata, smart playlists | not started | -| 7 | Games (EmulatorJS, IGDB) | not started | -| — | Video (stays on Jellyfin for now) | deferred | +| **7** | Games: ROM scanning, platforms, cloud saves, EmulatorJS | **done** | +| **UI** | Svelte app: home, browse, item pages, readers | **done** | +| 6b | Music smart playlists | not started | +| — | Video (stays on Jellyfin) | deferred | What works today: an administrator adds libraries pointing at server folders, -scans them, and optionally enriches metadata from Open Library. Users sign in -and read EPUBs, read CBZ comics, listen to audiobooks track-by-track, and -browse photos — with position saved per account, per file. PDF, RAR comics, -games, and video are not implemented. +scans them, and optionally enriches metadata. Users sign in and read EPUBs and +PDFs, read CBZ comics, listen to audiobooks track-by-track, browse photos, and +play emulated games in the browser with their own cloud saves — with position +saved per account, per file. -Five of the six services in the existing stack are covered: **Stump, Kavita, -Audiobookshelf, Navidrome (playback), and RomM** are the intended -replacements. RomM is not yet covered; video stays on Jellyfin. +**Six media types work: ebooks, comics, audiobooks, music, photos, games.** +Video is the only one not implemented, and it stays on Jellyfin on purpose. + +Of the services in the existing stack, this covers **Stump, Kavita, +Audiobookshelf, Navidrome, and RomM**. Only Jellyfin (video) is left. ## 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_COOKIE_SECURE` | `false` | Set `true` when serving over TLS | | `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_FORMAT` | `text` | `text` or `json` | | `VELLUM_SESSION_TTL` | `720h` | Login session lifetime | diff --git a/web/src/lib/components/ItemDetail.svelte b/web/src/lib/components/ItemDetail.svelte index 38d6e28..066c0b7 100644 --- a/web/src/lib/components/ItemDetail.svelte +++ b/web/src/lib/components/ItemDetail.svelte @@ -43,6 +43,7 @@ switch (detail?.item.kind) { case 'audiobooks': case 'music': + case 'games': return 'Play' case 'photos': return 'View'