Reader: monotonic reading progress across devices — saved position only
advances, never rewinds (explicit Mark as read/unread still resets).
Plus the previously uncommitted v0.2.5–v0.2.8 work (FlareSolverr scraping,
Book Info pages, deferred chapter add/delete, scanned/uploaded backup
counters, Dropbox upload tuning, four inline editor formatting buttons,
migration logging, "New view" needs_review fix, consecutive break-image
collapsing, and the related TECHNICAL.md updates).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- IntersectionObserver defers both cover images and placeholder canvas
drawing until cards enter viewport — eliminates 1000+ upfront ops
- ETag on /library/list: browser gets 304 Not Modified when nothing changed
- Single DOM pass in renderBooksGrid/renderDuplicatesView/renderSeriesDetail:
card.querySelector replaces second iteration with 500+ getElementById calls
- book_tags joined via json_agg in main query, removing separate SELECT + Python merge
- loadLibrary: error handling prevents silent failures showing as infinite loading
- Delete TODO-PERF-library-load.md (all four bottlenecks resolved)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Convert: warn when title+author already exists in library (preload check)
- Library: Duplicates sidebar section with grouped view and live counter
- Fix: Duplicates view cover loading now uses same canvas/two-pass pattern as renderBooksGrid
- Docs: add TODO-PERF-library-load.md with four identified bottlenecks
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
All formats now use {publisher}/{author} consistently:
- pdf/{publisher}/{author}/{title}.pdf
- comics/{publisher}/{author}/{title}.cbr|cbz
Previously PDF and comics only had {author}, unlike EPUB.
Updated TECHNICAL.md path table accordingly.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Fix CBZ extension: common.make_rel_path now accepts ext param;
CBZ files are stored as comics/{author}/{title}.cbz instead of .cbr;
library.py import passes actual file suffix
- Add GET /download/{filename} endpoint (was 404, referenced in book.html)
- TECHNICAL.md fully rewritten: File Storage Paths section with exact
path patterns per format, complete endpoint lists for all routers
including settings.py (previously undocumented), metadata save
behaviour table, updated Known Bugs Fixed
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>