You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Independent personal-library categories, two-level category tree navigation, and personal archive retention with explicit cleanup choice on removal.
Added
Reflowable EPUBs offer clean reading with basic typography and hidden images and media. It supports reading presets and per-book overrides, and keeps your reading position when switched on or off.
Personal-library categories are now independent of shelves, with two-level paths and optional recommendations created only when you save a selection.
The reading-data API provides category breakdowns, including uncategorized reading history.
Personal highlights, bookmarks, ideas and private reviews now stay in your archive after the original book file is deleted.
Retained books keep their title, author, format and cover in the archive, shown as source unavailable instead of failing to open.
Removing a book from your library, or deleting it, now offers to clear your personal data for that book: reading records, notes and more.
Changed
Reorganized the reader settings "Display" panel into three semantic groups: Reading Method, Text Display, and Reading Aids. Secondary options for headers, footers, and peer idea styling collapse cleanly when their toggles are off without occupying layout space or entering keyboard tab order, and secondary option buttons use a more compact style.
Jumping to an annotation in the reader always aligns the passage near the top of the page, instead of leaving it where it happens to be.
The personal-library sidebar separates shelves, categories and tags. Books without a shelf appear under Not on a shelf, independently of Uncategorized books.
Book details display and edit categories and tags; shelf organization remains available from the library and batch organizer.
Redesigned book detail category and tag pickers into compact popover attributes: category picker supports two-level hierarchy with viewport-aware auto-flip, inline category creation, and collapsible template suggestions; tag picker uses removable selected pills paired with a searchable multi-select popover and inline creation.
Batch organization uses consistent shelf, category and tag choices, explicit keep-unchanged options, compact category trees, and fixed dialog actions.
Collecting a shared book copies its category path and merges tags by name into your library, without copying hidden or pinned settings or following later source changes.
Archived notes, reviews and reading statistics leave out a book as soon as you choose personal-data cleanup, and come back when you restore it from the trash.
Permanent deletion, emptying the trash and automatic cleanup honor that choice and remove only your own data for the book.
Batch deletion applies the personal-data choice to owned books as well as collected ones.
Enhanced backend performance and response aggregation across core modules: BookDetailRes now includes shelf name, tags, and reading position directly in book details to eliminate sequential request waterfalls and layout shifting; session validation is cached in-memory with write-invalidation; SQLite connections use busy_timeout, synchronous = NORMAL, and a 20MB cache size; unread notification counts are cached with event-driven invalidation; and book search and list queries push JSON extraction inside the subquery to minimize payload evaluation overhead.
Modal dialogs remove non-passive wheel blockers and full-screen backdrop blurs to restore native compositor-thread smooth scrolling; broad scrollbar hover pseudo-selectors are confined to dedicated scroll containers to reduce style recalculation churn.
Manual timing confirms that the reading record was saved only after the server accepts it, and reading times below one minute are shown in seconds.
Fixed
Clicking actions on the reader selection toolbar (such as highlighting, restyling, or note creation) no longer misidentifies clicks as outside events that unintentionally close open popovers or dismiss the top header.
Clearing reader selection or dismissing selection menus synchronously clears native browser text selection, highlights, and note editor ranges.
Annotation mutations add in-flight deduplication, guard against stale response race conditions overwriting current selection state, and roll back optimistic cache updates if the request fails.
Opening a book keeps the reader theme, font size and spacing applied even when external fonts load slowly or time out, preventing a temporary white page with the book's original formatting.
Reader immediately clears and suppresses header and footer summon states while any fullscreen modal or overlay is active, preventing accidental toolbar reveal when moving the mouse near top or bottom edges.
Opening replacement rules from reader settings no longer leaves the reader header stuck open.
Switching between shelf, category and tag navigation clears the previous dimension and pagination while retaining additional filters and existing link meanings.
Category and tag reading totals use one authorized library entry per version, respect private-library metadata and visibility, and avoid counting duplicate links. Retained history without a current library entry remains included.
Empty shelf, category and tag views use consistent hints; empty shared tags are labeled correctly, and failed category loads show retry instead of appearing empty.
The archive no longer labels a note's position as unavailable when the book itself is gone; only the jump back to the original text is disabled.
Unread notification counts refresh immediately when source access or target visibility changes, including when access is restored.
Fixed page transition delay and two-phase loading waterfalls by setting TanStack Router's pending threshold to zero, enabling intent preloading on hover, adding matching pending skeletons for the reading archive and notification center, and hooking sidebar and account navigation into router preloading.
Upgrade notes
Back up the complete DATA_DIR before upgrading. Migration 0053 keeps your notes, reviews, comments and likes, and stops deleting them when a book is removed. Downgrading requires the pre-upgrade data with the matching previous release.
Migration 0054 preserves existing personal shelf IDs, settings and book assignments in a separate shelf table, and copies category paths and tags from valid shared sources for previously collected books. Recommended categories are not pre-created.