Added
- Added right-click context menus to book card view items, with actions for reading, viewing detail, opening the book folder (desktop only), downloading, editing, and deleting.
- Added Zoom In, Zoom Out, and Reset Zoom commands to the desktop app View menu (⌘=, ⌘-, ⌘0), with zoom level persisted across sessions.
- Added an experimental Android mobile app (a Capacitor shell around the existing frontend) that connects to a self-hosted PlainShelf server: first-run connection setup (server URL, optional access token, shelf selection) with a Settings entry to edit the connection later, persistent on-device caching of downloaded books and reading progress for offline reading (stored as app-private files via the Capacitor Filesystem plugin, exempt from WebView storage eviction), and native HTTP requests so plain-HTTP LAN servers work without CORS configuration.
- Added the native Android project under
frontend/android/,justrecipes for building it (mobile-add-android,mobile-sync,build-mobile-android,open-mobile-android), and a README section covering prerequisites and server reachability. - Added PlainShelf launcher icons and splash screens (light and dark) for the Android app, generated from the brand images in
frontend/assets/via@capacitor/assets. - Added a dashboard home page (now the default landing route, with a sidebar entry) with stats cards (total books, added this month, star distribution, total characters), a tag cloud, a random book pick, and a reading heatmap driven by live daily reading-time data.
- Added server-side daily reading-time tracking (
POST/GET /api/shelves/:id/reading_activity) backing the dashboard heatmap, plus an opt-inchar_countfield on the book list endpoint. - Added a mobile-friendly book detail layout on narrow viewports: centered hero cover, centered title, a full-width Read button with secondary actions in a two-column grid, and single-column metadata rows.
- Added foldable sidebar sections (Layers, Reading, Maintenance, Admin) that collapse and expand independently.
- Added first/last page buttons and numbered page buttons with ellipsis to the pagination controls, alongside the existing prev/next controls.
Changed
- Changed the main layout sidebar to an off-canvas drawer with a topbar menu button on viewports up to 768px wide (phones and narrow windows); it closes on backdrop tap or navigation, and wide-viewport splitter behavior is unchanged.
- Changed the book star rating input in the metadata editor to use reka-ui
RatingRootandRatingItemIndicator, aligning with the reka-ui component migration started in v0.7.0. - Removed the inline Edit button from book card view items; edit access is now exclusively through the right-click context menu.
- Changed library search to pure frontend filtering instead of a backend query parameter, unifying case-insensitive title/author/tag/comment matching across desktop, mobile offline mode, and mock dev data.
- Changed release archives to also include the README preview image and a version-matched copy of
docs/, so the README's relative documentation links work from the extracted archive as well as online.
Fixed
- Fixed the mobile app showing errors instead of downloaded books when the device has connectivity but the PlainShelf server is unreachable (e.g. on mobile data away from the home LAN); book listing, metadata, sources, covers, and reading progress now fall back to the on-device offline cache on transport failures and timeouts, while real server error responses are still surfaced.
- Fixed resizable panel drag handles leaving all panel interactions unresponsive after a drag gesture; moved
hitAreaMarginsfrom an inline template literal to a module-level constant to prevent reka-ui drag-state corruption mid-drag. - Fixed scrollable content areas in the sidebar and main content panel after the reka-ui Splitter migration; added inner wrapper elements to work around
SplitterPanel'soverflow: hiddeninline style enforcement. - Fixed mobile book covers failing to load (showing as NO COVER) because Android WebView blocks mixed-content
<img>requests against the app'shttps://localhostorigin; covers are now fetched and rendered viablob:object URLs on mobile. - Fixed the library page landing on the wrong page number when committing or clearing a search with client-side filtering active.
- Fixed the desktop app's Settings repository link opening inside the app window instead of the system browser.
- Fixed the compiled server binary silently dropping underscore-prefixed frontend asset files (e.g. the shared Vue export-helper chunk) from the embedded build, which blanked most pages when served from the binary.
What's Changed
- fix(cask): update deprecated depends_on macos string format by @mudream4869 with @Copilot in #191
- Replace layer action buttons with context menu by @mudream4869 in #192
- fix(VOI-44): fix desktop Download button via native save dialog by @mudream4869 with @Copilot in #194
- VOI-42: Add desktop “Open folder” action for layer context menu by @mudream4869 with @Copilot in #196
- Desktop: Add 'Open Folder' action for book detail by @mudream4869 in #197
- Extract book actions into reusable composable by @mudream4869 in #199
- Add Markdown (.md) file support for book imports by @mudream4869 in #193
- Render Markdown books in the reader by @mudream4869 in #201
- Add zoom controls to desktop app with CSS-based scaling by @mudream4869 in #200
- Migrate published_at from timestamp to date-only format by @mudream4869 in #202
- Add update-docs skill for syncing project documentation by @mudream4869 in #204
- Code-split routes and vendor chunks to reduce bundle size by @mudream4869 in #203
- Add book identifiers support (ISBN, ASIN, etc.) by @mudream4869 in #206
- Add native mobile support with IndexedDB persistence by @mudream4869 in #207
- fix(reader): stop clipping text and hide titles on mobile by @mudream4869 in #208
- fix(mobile): fall back to persisted shelf when shelf list is unreachable by @mudream4869 in #209
- Add filesystem-backed mobile book cache (no wiring change) by @mudream4869 in #211
- Switch mobile offline cache to filesystem storage by @mudream4869 in #212
- Add mobile saved-books UI: downloads page, size accounting, cover cache by @mudream4869 in #210
- Handle server unreachable while device online in mobile app by @mudream4869 in #213
- build(deps): bump golang.org/x/crypto from 0.51.0 to 0.52.0 in /desktop by @dependabot[bot] in #214
- docs: add Homebrew install option by @mudream4869 in #215
- Add About modal to Settings page by @mudream4869 in #216
- Add 'Shelf Cache and Disk I/O' documentation and link from SMB/known-issues by @mudream4869 in #217
- Add collapsible (foldable) sidebar sections to MainLayout by @mudream4869 in #218
- Move book search filtering to client-side by @mudream4869 in #221
- Extract book cover handling into useCoverSrc composable by @mudream4869 in #220
- Enhance Pagination component with full page list, first/last buttons and styles by @mudream4869 in #222
- Refactor responsive design for mobile book detail view by @mudream4869 in #223
- Add reading activity tracking and dashboard page by @mudream4869 in #224
- Update go.mod by @mudream4869 in #225
- Update documentation for PlainShelf by @mudream4869 in #227
- Improve readability and performance of loops and date handling by @mudream4869 in #226
- Add comprehensive tests for shelf functionality and cover management by @mudream4869 in #228
- refactor by @mudream4869 in #229
- Refine CI/version/script by @mudream4869 in #230
- Release v0.8.0 by @mudream4869 in #231
Full Changelog: v0.7.0...v0.8.0