Second release — a big round of library, notes, and profile features on top of v0.1.0, plus a nasty navigation bug fixed.
Library & notes
- Select all matching items in a profile's library (respects the active filter), with bulk Delete and Free up space (delete the video, keep the note).
- Note-only items: a freed video stays as a readable note — the curated note + transcript survive. The tile is dimmed with a "media freed" marker, and a Re-download video button restores it (ignores the archive).
- Live progress on note generation (elapsed timer) instead of a static "1–2 min", plus a guard so the same note can't be generated twice at once.
- Honest counts: freed videos show under a note badge instead of the video count, and an empty profile no longer reads as "all noted".
Profiles
- Per-profile categories (presets + custom) and a category filter to narrow the profile list.
- Delete media, profiles, and accounts — individual + bulk, with opt-in file deletion.
- Copy the download path, clickable profile links, library/disk polish.
Fixes
- Navigation could hang from a network view: every account card opened a persistent SSE connection, so six idle cards exhausted the browser's per-host connection limit and blocked opening a library. Streams now open only while a job is active.
- Freed notes stay readable in the UI; re-download restores the original file.
Quality
- Expanded test suite: component tests (Testing Library), integration against real SQLite (no mocks), and e2e; strict lint, typecheck, build, Docker image, and Python ruff all green in CI.
🤖 Generated with Claude Code