Releases: SiDtheTurtle/SleeveNotes
Release list
v1.11.0
Added
- Barcode search for Add Record: enter a barcode to search Discogs and pick the matching pressing, instead of needing the release ID (part 1 of #91 — camera scanner to follow in a later release)
Backend
- New
GET /api/discogs/searchendpoint (?barcode=,?q=,type=release,per_page=25)
v1.10.0
Features
- Full offline image cache + pre-sized covers (#80). SleeveNotes now works fully offline for images: after one healthy visit, every cover in the grid, table, and detail view is cached and available with no network — only the full-size lightbox still needs a connection. On each page load the frontend hands the service worker a manifest of every image so the cache fills itself in the background (per-URL, no all-or-nothing). This is backed by two smaller derivatives generated for every cover at download time — 400px for tiles/detail/carousel, 150px for table thumbnails — so offline pages pull far less data. Existing images are backfilled once on startup and can be rebuilt on demand via Settings → Data → Rebuild Thumbnails.
- Lightbox navigation & set-cover (#78). The full-size image lightbox now has prev/next arrows to page through a release's images, plus a set-cover action so you can promote any image to the cover without leaving the lightbox.
- Wishlist detail navigation (#83). The wishlist detail modal gets the same prev/next arrows the collection detail modal already had — step through wishlist items in place.
- Section is remembered across refresh (#79). Reloading the page now keeps you on Collection or Wishlist (stored in sessionStorage). Opening a fresh tab still starts on Collection.
- Close modals with ESC (#92). Pressing ESC dismisses any open modal dialog.
- Site footer (#90). A footer links out to the project's GitHub repo.
Fixes
- Valuation is read-only in the edit form (#86). The Discogs-sourced valuation field can no longer be hand-edited; it's populated on fetch/refresh only.
- Wishlist tiles respond on first tap (#98). Wishlist tiles now show the selection overlay on the first tap, matching collection tiles.
- Compose project name pinned to
sleevenotes(#88). See upgrade note below.
⚠️ Upgrade note — Docker Compose project name (#88)
compose.yml now pins name: sleevenotes. Previously the project name was inferred from the deployment directory's name, which meant a second Compose stack in the same directory running docker compose up --remove-orphans could delete the SleeveNotes container.
Potential impact depends on where you deploy from:
- You deploy from a directory called
sleevenotes/ a repo clone (SleeveNotes/): no action needed — the pinned name already matches the inferred one. - You deploy from a differently-named directory (e.g.
~/docker/vinyl/): on your firstdocker compose upafter upgrading, the project name changes and you may hit:- A one-time container name conflict (the old container still carries the old project label). Resolve with:
No data is lost — the
docker rm -f sleevenotes && docker compose up -dsleevenotes_datavolume is re-attached by its explicit name. - A harmless cosmetic warning on every subsequent
up: "volume sleevenotes_data was created by a different Compose project". The volume and its data are fine. To silence it, either declare the volume asexternal: truein your localcompose.yml, or create a fresh volume under the new project name and copy the data across.
- A one-time container name conflict (the old container still carries the old project label). Resolve with:
Internal
- API regression test suite — 65 tests (#89). First slice of the automated regression suite (#81); covers the API surface. Full functional/UI regression coverage remains to be built, so #81 stays open.
What's Changed
- fix: make valuation field readonly in edit form by @SiDtheTurtle in #86
- feat: API regression test suite (65 tests) by @SiDtheTurtle in #89
- Add prev/next navigation and set-cover to the lightbox (#78) by @SiDtheTurtle in #93
- feat: persist collection/wishlist section across page refresh (#79) by @SiDtheTurtle in #94
- feat: persist collection/wishlist section across page refresh (#79) by @SiDtheTurtle in #95
- Pre-sized cover derivatives + full offline image cache (#80) by @SiDtheTurtle in #96
- feat: prev/next nav on the wishlist detail modal (#83) by @SiDtheTurtle in #97
- fix: wishlist tiles show overlay on first tap like collection tiles by @SiDtheTurtle in #98
- fix: pin Compose project name to sleevenotes (#88) by @SiDtheTurtle in #99
- feat: site footer linking to the GitHub repo (#90) by @SiDtheTurtle in #100
- feat: close modal dialogs on ESC (#92) by @SiDtheTurtle in #101
Full Changelog: v1.9.2...v1.10.0
v1.9.2
- fix: apply clean artist names setting to wishlist views (#75)
v1.9.1
- Fix wishlist table thumbnail column expanding too wide (#72)
v1.9.0
This release adds API key authentication, configurable currency support, full backup/restore, and a handful of quality-of-life improvements.
New features
-
API key authentication — The app now supports an access key to restrict who can use the instance. Set it in Settings → Danger Zone; once set, all API requests require the key.
-
Configurable currency symbol — Currency is no longer hardcoded to
£. Set any symbol in Settings → Display. The symbol is applied consistently across the KPI bar, record forms, and the Discogs sync diff view. During collection sync, if Discogs prices use a different symbol the diff highlights a currency mismatch rather than silently treating them as equal. -
Database and image backup/restore — Settings → Data now exposes four export buttons: CSV (existing), DB snapshot, image cache ZIP, and an all-in-one archive. Restore equivalents live in Settings → Danger Zone. Handy before upgrades or migrations.
-
Sticky top bar — The toolbar and KPI bar now stay fixed at the top of the page when scrolling through long collections.
Improvements
- Sync diff now shows richer change annotations — the original Discogs value is shown verbatim alongside the proposed SN value, making it clearer what will actually change and in which direction.
- Green colouring removed from the Discogs column in the diff view (it implied Discogs was "more correct").
Bug fixes
- Fixed group-by-artist header row colspan being one column short, causing a misaligned table header.
What's Changed
- feat: simple access key authentication by @SiDtheTurtle in #59
- feat: anchor full top bar when scrolling by @SiDtheTurtle in #60
- fix: correct group-by-artist header row column structure by @SiDtheTurtle in #63
- fix: use apiFetch for record save and Discogs sync preview by @SiDtheTurtle in #65
- feat: improve diff change annotations by @SiDtheTurtle in #66
- feat: data export and backup restore (#57) by @SiDtheTurtle in #67
- feat: configurable currency symbol (#55) by @SiDtheTurtle in #68
- docs: update CLAUDE.md to reflect v1.9.0 changes by @SiDtheTurtle in #69
- docs: remove stale FR todo and version speculation by @SiDtheTurtle in #71
Full Changelog: v1.8.0...v1.9.0
v1.8.0
What's Changed
- docs: README overhaul by @SiDtheTurtle in #33
- feat: show dev environment banner when SN_DEV is set by @SiDtheTurtle in #47
- feat: open full-resolution cover art in lightbox on click by @SiDtheTurtle in #50
- fix: enforce text truncation on artist/title table columns by @SiDtheTurtle in #46
- feat: move purchase condition out of table badge into detail row by @SiDtheTurtle in #51
- fix: add explicit type="text" to all untyped text inputs by @SiDtheTurtle in #45
- fix: strip square brackets from Discogs release ID input by @SiDtheTurtle in #44
- fix: change default record sort from instance_id to id by @SiDtheTurtle in #49
- fix: remove backdrop click-to-close on all modals by @SiDtheTurtle in #43
- fix: hide Discogs push option for core field changes in sync preview by @SiDtheTurtle in #48
- docs: update CLAUDE.md to reflect v1.8.0 changes by @SiDtheTurtle in #53
Full Changelog: v1.7.0...v1.8.0
v1.7.0
A better experience everywhere, including offline. The wishlist now has its own prominent place in the navigation alongside your collection, and both views support the cover art tile layout. Display settings no longer change as you toggle them — they apply when you hit Save.
SleeveNotes also works much more usefully when you're away from home. Your collection and wishlist load from cache even if the server is unreachable. You can search for records on Discogs, add them to your wishlist, and edit wishlist notes and fulfilled status — all offline. Everything syncs automatically when your server comes back online. Pull-to-refresh no longer shows a browser error page.
v1.6.2
Bug Fixes
Custom cover images no longer reset after a sync or refresh (#29)
If you had set a record's cover to a non-default Discogs image, syncing your collection or fetching Discogs metadata in the edit form would silently reset it back to image 1.
All three refresh paths now consistently preserve your cover choice. The manual per-record refresh button was already correct — this release brings the collection sync background task and the Discogs metadata fetch into line.
v1.6.1
Bug Fixes
Tracklist and images now refresh for all synced records (#24)
When syncing your Discogs collection, SleeveNotes now re-fetches tracklists and cover images for all records touched by the sync — not just newly added ones.
Previously, existing records that were updated during a sync would never have their tracklist or images refreshed in the background. Since Discogs tracklists are community-maintained and get filled in after a release ships (positions, durations, track types), this meant records added before tracklist data was available would stay blank indefinitely, even after syncing.
To backfill missing tracklists on your existing collection: open Settings → Discogs → Sync Collection. All records will be queued for a background refresh automatically.
v1.6.0
Adds two-state offline detection. The app now distinguishes between no internet (Read-Only Mode) and server unreachable (Offline Mode), with appropriate banners and write actions disabled in both states. Includes GET /api/health endpoint and event-driven reachability probing with backoff polling.