Drop-folder Calibre mode removed, OpenLibrary series schema fixed, and a batch of UX and deployment polish.
Removed
- Calibre drop-folder mode (#207) — the drop-folder integration has been removed entirely. It depended on the Calibre GUI application's auto-add watcher, which never fires in containerised / headless deployments. Books silently timed out with no feedback. The
calibredbmode achieves the same result — mirroring every successful import into Calibre — without any of these constraints: it only requires that Bindery and Calibre share the library directory via a volume mount, which is already required for the library import/sync feature. Existingcalibre.mode = drop_foldersettings are treated asoff; operators should switch tocalibredbmode. Thecalibre.drop_folder_pathsetting and the/api/v1/calibre/test-pathsendpoint are gone.
Fixed
- OpenLibrary object-typed series entries (#206, closes #201) — some OpenLibrary work records encode
seriesas[{"key": "...", "title": "..."}](object array) rather than["..."](string array). Bindery previously crashed with an unmarshal error on these records, silently skipping all books for authors like Pierce Brown, J.K. Rowling, and Cornelia Funke. A newflexStringSlicedecoder accepts both forms transparently. - Calibre settings save errors (#202, closes #175) — validation errors on
PUT /api/v1/setting/calibre.*were returned as 400 but the UI silently discarded the response body; the error message now surfaces in the Settings page. Also fixes a case-sensitivity bug where NFS paths with uppercase letters were rejected. - Search "no indexers" message (#203) — when a search returns no results and no indexers are configured, the UI now shows "No indexers configured — add one in Settings" instead of the generic "No results" empty state.
- Login form method (#195) — login form missing
method="POST"caused browsers to silently submit via GET, leaking credentials in the URL bar and query-string logs. - Auth visibility refresh (#199) — auth status was not rechecked when a browser tab regained focus after a session expiry, leaving users on a page that appeared authenticated but returned 401 on the next action.
- Books empty state (#197) — Books page showed a bare spinner when the library was empty; now shows instructional copy pointing to the "Add author" flow.
- Version badge and footer links (#196) — version badge in the header now links to the corresponding GitHub release; footer links to the repo.
- Calendar aria-labels (#198) — previous/next month buttons on the calendar lacked
aria-labelattributes, failing screen-reader and accessibility audits.
Changed
- Per-page document titles (#200) — each page sets
document.titleto reflect the current view (e.g. "Authors — Bindery", "Settings — Bindery") for browser tab identification and history navigation. - Helm chart: corrected
BINDERY_DOWNLOAD_PATH_REMAP(#204) — default remap was/downloads:/downloads; corrected to/downloads:/mediato match the NFS-mount convention documented in the reference deployment. - ArgoCD reference application (#205) — updated NFS volume configuration and container entrypoints in the reference ArgoCD application manifest.
Upgrade notes
- No schema migrations — this is a pure-logic and UI release. Drop-in binary or image replacement is safe.
- Drop-folder users: if
calibre.modeis set todrop_folder, Bindery will treat it asoffon startup. Switch tocalibredbmode in Settings → Calibre to restore automatic mirroring. Thecalibre.library_pathandcalibre.binary_pathsettings are unchanged.