Commit Graph

104 Commits

Author SHA1 Message Date
neon ed6c7428ec feat: add save-as-lens from HomeView filter panel
- add SaveAsLensDialog component that takes current filter and sort as props
- wire Save as Lens button in HomeView filter panel header
- on save, creates lens with the active filter/sort and navigates to it
2026-03-02 11:02:24 -06:00
neon 58ef757ccd feat(metadata): add FB2 cover extraction and fix stale staging cover
- add cover-fb2.ts: extract cover from <coverpage>/<binary> in FB2 XML
- add fb2-parser.ts: extract title, authors, series, language, year, genres from FB2 title-info
- wire FB2 into cover.ts extractor switch and metadata.service.ts extractMetadata
- wire FB2 into staging-metadata.service.ts for staging ingestion
- add fb2 to METADATA_FORMATS in scanner.service.ts and upload-processor.service.ts
- add MetadataService.saveExtractedCoverBytes() for saving cover bytes directly
- fix staging finalize: copy staging cover to book cover dir on finalize, overwriting stale covers
- add Regenerate Cover button to CoverEditorPanel with permission gate and cache busting
2026-03-01 21:44:57 -06:00
neon 9350fe12d2 feat: add user-configurable card overlays and regenerate cover action
- add CardOverlayKey type and cardOverlays preference to useDisplaySettings, persisted in localStorage
- add series badge, progress bar, progress pill, format badge, rating dots, and new-book indicator overlays to BookCoverCard
- add format-colors.ts with per-format color map (epub, mobi, azw3, azw, fb2, txt, pdf, cbz, cbr, cb7)
- add Card Overlays toggle section to AppearanceSettings
- fix card click handling via handleCardClick to prevent button clicks from triggering book navigation
- add pointer-events-none to all decorative overlay elements
- add POST /api/books/:id/re-extract-cover endpoint delegating to bulkReExtractCover
- add Regenerate Cover dropdown item with loading state and live cover bump via bumpVersion
2026-03-01 20:49:06 -06:00
neon 911dc27467 fix(server): add trigram indexes for search and fix header z-index
- enable pg_trgm extension in db module on startup
- add GIN trigram indexes on book_metadata title, series_name and authors name
- refactor book search query to use LEFT JOIN instead of correlated EXISTS subquery
- fix jwt-auth guard to use /api/v1/ prefix for password-change allowlist
- regenerate baseline migration to incorporate schema index changes
- fix AppHeader sticky z-index from z-10 to z-30 so search dropdown renders above book card series badges
2026-03-01 18:53:22 -06:00
neon 43d0f5017c feat(client): overhaul global search with keyboard nav and highlights
- widen search input on focus (max-w-xs -> max-w-lg) with smooth transition
- fix result click to navigate to book detail page instead of library
- add keyboard navigation (arrow keys, enter, esc) with visual selection
- add Cmd+K / Ctrl+K shortcut to focus search from anywhere
- highlight matched text in title, author, and series fields
- show format badges (epub, pdf, mobi, etc.) per result row
- add row separators and larger cover thumbnails
- show "No results" only after debounce settles, not during typing
- extend search to match author names and series in addition to title
- add settled ref to useGlobalSearch to track fetch completion
- fix v-if -> v-show for grid/list view toggles in Home/Lens/CollectionView
2026-03-01 18:42:59 -06:00
neon 6c51441215 feat(metadata): add provider reservoir and drag-to-assign for fields 2026-03-01 14:41:28 -06:00
neon f60584cf16 feat(books): add icon tooltips, book export, and bulk book actions
- add tooltips to all header icons (search, upload, appearance, settings, theme toggle, sidebar trigger)
- fix appearance popover by moving Tooltip outside Popover
- add POST /api/books/export endpoint to zip and download books
- add POST /api/books/bulk-refresh-metadata and bulk-re-extract-cover endpoints
- add BulkBookIdsDto and ExportBooksDto
- add archiver dependency for zip streaming
- update theme CSS variables and component styles across client
2026-03-01 10:55:31 -06:00
neon 02a5b46768 feat: add email delivery feature
- full email provider management (SMTP, test connection, share, default)
- recipient and recipient group management
- email templates with variable interpolation and system default
- user email preferences (provider, recipient, template defaults)
- send book via email from book list and cover card
- send log with pagination, resend on failure, delete entries
- admin email relay settings (SMTP relay, domain allow/blocklist)
- partial unique index to prevent duplicate system templates
- fix load-more pagination to append rather than replace entries
2026-03-01 04:00:39 -06:00
neon b8ddadef5d style(books): redesign book files tab with icon and improved formatting
- replace format badge with a styled file icon (dog-ear clip-path, document lines, corner fold)
- reformat server files with prettier
2026-02-28 21:06:16 -06:00
neon 9c1b57c72b chore: env validation, shutdown hooks, logger noise reduction
- add Zod-based env validation schema; fail fast on missing/invalid vars
- suppress NestJS framework boot logs (InstanceLoader, RouterExplorer, RoutesResolver)
- enable graceful shutdown hooks
2026-02-28 19:51:06 -06:00
neon 51dd3d30f3 chore: backend infrastructure improvements
- add URI versioning: global prefix changed to api/v1, all frontend call sites updated
- add AbortSignal.timeout to all outbound fetch calls (10s API, 15s scrapers)
- add X-Request-Id response header and requestId field in error payloads
- add response compression via @fastify/compress (gzip + brotli)
- add security headers via @fastify/helmet with CSP for the Vite SPA
- tune pg pool: max 20, idle/connection/statement timeouts on app and migration pools
- add GET /api/v1/health endpoint via @nestjs/terminus with DB connectivity check
2026-02-28 16:02:15 -06:00
neon f66bb0358f feat: add staging area for file ingestion and metadata management
- add staging DB schema, migrations, and repository
- add staging module with ingest, metadata, finalize, and watcher services
- add staging WebSocket gateway for real-time file status updates
- add staging REST controller with file list, detail, bulk edit, and finalize endpoints
- add StagingView with file list, toolbar, file sheet, bulk edit, and finalize dialogs
- add StagingSettings panel for auto-fetch and auto-finalize configuration
- add staging widget for dashboard and sidebar integration
- update metadata-fetch pipeline to support staging context
- add shared staging types package
2026-02-28 01:31:51 -06:00
neon f3aa1a05ad feat(metadata): add preferences, provider priority, and cover updates 2026-02-26 11:42:47 -06:00
neon 6cbd6dd32d style(stats): adjust borders, icons, and card gap in dashboard scrollers 2026-02-25 23:06:19 -06:00
neon ede3bd926a feat: file upload with configurable naming patterns 2026-02-25 17:17:43 -06:00
neon a6ef586dbe feat(stats): add dashboard with horizontal scrollers and settings panel 2026-02-25 04:40:56 -06:00
neon bc90fc0eda feat: swap genre pills and file path order on book detail page 2026-02-22 12:18:47 -06:00
neon 5018e910bb fix(metadata): improve Amazon genre extraction and diff panel UX 2026-02-22 11:42:29 -06:00
neon d625a9df60 feat: polish book edit form layout and fix isDirty reactivity 2026-02-20 14:21:18 -06:00
neon cbab45aff4 feat: pgvector ANN + rescore recommendation engine with admin rebuild UI 2026-02-20 00:16:43 -06:00
neon 3eff3616fc feat(books): rename tags to genres and add user tags 2026-02-19 05:08:21 -06:00
neon 1c97403379 feat: wire provider IDs full stack and polish metadata search UI
- Add providerIds (google/goodreads/amazon/hardcover/openLibrary) to BookDetail type, DTO, service save/load
- Expose provider ID fields in edit metadata form with editable inputs
- Auto-save provider ID on metadata apply from search drawer
- Polished metadata search: skeleton loaders, provider-colored pills/badges, result cards, diff panel
- Fix: provider ID only injected in patch when user has selected fields
2026-02-19 03:37:14 -06:00
neon ed3c36e35d fix(metadata): fix Amazon and Goodreads scraper bugs 2026-02-19 02:17:50 -06:00
neon d4850dc6d7 feat(metadata): add search drawer with Google Books and Goodreads 2026-02-19 02:03:33 -06:00
neon 1dd6381325 feat(metadata): introduce provider architecture for book metadata 2026-02-19 01:55:40 -06:00
neon 3ff1cd5882 feat(client): add glass sidebar/header and surface brightness control 2026-02-17 13:05:37 -06:00
neon c7f488e88f feat(books): separate edit metadata and files into dedicated pages 2026-02-17 11:07:04 -06:00
neon 832ee8d464 fix(opds): fix author feed query and add rate limiting 2026-02-16 19:10:31 -06:00
neon 6721e99831 fix(kobo): fix device controller and service errors 2026-02-15 23:41:00 -06:00
neon 6865b07c79 fix: prevent filter rule from disappearing when value is fully erased 2026-02-15 23:24:11 -06:00
neon 6be97680a6 feat(books): add status, rating, progress, and ISBN filter fields 2026-02-15 01:31:54 -06:00
neon 5b84fc9e19 chore: bump dependencies 2026-02-14 04:37:08 -06:00
neon 964115655b feat(library): apply format settings during scan and add creator 2026-02-12 12:24:39 -06:00
neon f3a52302ca fix(kobo): correct sync header, state array, and ReadingStates protocol 2026-02-10 23:53:20 -06:00
neon 55c104f173 fix: resolve all ESLint errors across server and client 2026-02-10 23:06:44 -06:00
neon 6de870a0b5 feat(kobo): add Kobo device sync with kepubify and collection support 2026-02-10 05:46:34 -06:00
neon d44d68cd12 feat(opds): implement OPDS catalog with cover token auth 2026-02-08 22:57:09 -06:00
neon e232c44d88 docs: add developer onboarding guide and replace boilerplate READMEs 2026-02-07 10:28:00 -06:00
neon 9923d3871f fix(cover): improve epub cover extraction with HTML and sidecar fallback 2026-02-07 08:59:25 -06:00
neon 448c6b05bb feat: implement bulk book delete with inline confirmation 2026-02-06 18:07:22 -06:00
neon 00a333d4f1 feat(client): add horizon background and remove legacy patterns 2026-02-06 00:19:40 -06:00
neon 68a51e52c0 feat(client): add background picker to appearance popover 2026-02-05 19:25:55 -06:00
neon 1c3c8139c9 fix(books): fix rating persistence and overhaul BookListRow UX 2026-02-05 18:11:01 -06:00
neon d0b54beb95 feat(books): add year, progress, rating, and fields to book list row 2026-02-05 15:39:35 -06:00
neon 068359727d feat(books): highlight primary format and add inline open in list row 2026-02-05 13:51:19 -06:00
neon a8191d9cf6 fix(books): prevent filter builder rows disappearing in lens dialog 2026-02-03 15:33:29 -06:00
neon 734df9a83d feat: add collections - icon support, edit dialog, full CRUD 2026-02-03 14:39:52 -06:00
neon aec4af18a5 chore(client): remove placeholder Scanner settings and Browse section 2026-02-03 11:13:10 -06:00
neon 7c9663118b fix: enforce library access check on CBZ endpoints 2026-02-02 11:02:14 -06:00
neon 676ca4c1a7 feat(collections): add full CRUD with multi-collection assignment 2026-02-01 20:25:16 -06:00