Tracking issue for the overall Collectify project. See /.claude/plans/i-would-like-to-rosy-marshmallow.md (in PRs) for the full design doc.
Goal
A self-hostable web app for tracking personal collections of:
Movies (DVD, Blu-ray, UHD Blu-ray)
Music (CDs, Vinyl)
Videogames (physical + digital)
Stack
ASP.NET Core 10 (Minimal APIs) + EF Core + SQLite
React 18 + Vite + TypeScript + Tailwind + TanStack Query
ASP.NET Identity (single-user now, multi-user later)
Docker + docker-compose
Phases
Phase 1 — Foundation: project scaffolding, auth, CRUD + manual entry/edit/search for all 3 types, Docker packaging
Phase 2 — Internet metadata lookup: TMDB / MusicBrainz / IGDB providers, lookup cache, cover image caching, "search & import" UI (closed: Phase 2: Internet metadata lookup (TMDB, MusicBrainz, IGDB) #3 )
Phase 3 — Barcode camera scanning: @zxing/browser scanner, /api/lookup/barcode, mobile-friendly Scan tab (closed: Phase 3: UPC / barcode camera scanning #4 )
Phase 4 — Multi-user: registration, scoped ownership, per-user settings (partly done — opt-in registration shipped in feat: toast notifications + opt-in user registration (closes #29) #33 ; admin user list / per-user API key overrides / password reset still deferred)
Phase 5 — Photo-snap visual lookup: capture image → vision/reverse-image search → import (future / nice-to-have)
Each phase has its own issue and PR.
Notable polish landed alongside
Tracking issue for the overall Collectify project. See
/.claude/plans/i-would-like-to-rosy-marshmallow.md(in PRs) for the full design doc.Goal
A self-hostable web app for tracking personal collections of:
Stack
Phases
@zxing/browserscanner,/api/lookup/barcode, mobile-friendly Scan tab (closed: Phase 3: UPC / barcode camera scanning #4)Each phase has its own issue and PR.
Notable polish landed alongside
Platformfree-text → curated enum (Gameplatformfield: free-text → enum (single value per entry) #26, PR feat(games): Platform free-text → enum (closes #26) #30)PlatformdropdownETag+ immutable cache + startup GC + dashboard endpoint (PR feat: covers ETag + immutable cache, cover GC, dashboard endpoint #31)