- Detect Windows (.zip), Linux (.tar.gz), and macOS (.dmg / .app bundle) game archives during scan
- Store GameFile[] with platform metadata in DB instead of plain zipFiles[]
- Stream .app bundles as on-the-fly zip archives via archiver
- Show WIN/LIN/MAC platform badge pills on GameCard and SeriesCard
- Auto-select the download matching the user's OS in GameDetailModal
- Persist cover URL to DB immediately on upload (no re-scan needed)
- Backward-compatible: legacy zipFiles entries map to platform 'windows'
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add `movies` type: per-movie folders with video files, poster/backdrop
images, and optional Jellyfin NFO metadata (title, year, plot, rating,
genres, runtime). Grid view with 2:3 poster art, detail modal with play
and two-click delete of the movie folder.
- Add `tv` type: Series -> Season -> Episode hierarchy with lazy loading at
each level. Reads tvshow.nfo and episodedetails NFO files for metadata.
Episode grid with video thumbnails, streams via existing video player.
Delete is limited to the entire series folder to avoid breaking Jellyfin.
- Add fast-xml-parser dependency for Kodi/Jellyfin NFO parsing (lib/nfo.ts)
- Migrate existing DB to expand the libraries CHECK constraint to include
the two new types; migration is idempotent and preserves existing data.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Introduces user-defined tag categories and tags with a many-to-many
relationship to media items. Tags are stored in a SQLite database
(medialore.db via better-sqlite3) with ON DELETE CASCADE for automatic
cleanup. Users can manage categories and tags at /manage/tags, assign
tags to games in the detail modal, and tag mixed media files via a
hover button on each tile.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>