Skip to content

v0.44.0

Choose a tag to compare

@iuliandita iuliandita released this 25 Apr 22:05
· 19 commits to main since this release
v0.44.0
ce2ebc4

UX release. Rejecting a recommendation now opens a structured picker with six fixed reasons plus a "Don't show again" checkbox that promotes the rejection to a permanent per-user blacklist. Settings gets a new Blocked tab to view, search, and unblock entries. The blocklist filters the pipeline, subscriptions, and quick-discover independent of the existing rejection cooldown, so unblocking does not bypass the cooldown.

Added

  • Permanent per-user artist blacklist (artist_blocks table) with (user_id, artist_id) unique upsert
  • Structured rejection reasons (6 fixed + freeform "Other") via a bottom-sheet/modal picker
  • Settings > Blocked tab with debounced search, cursor pagination, and unblock-with-undo toast
  • New REST routes: POST/GET /api/v1/artist-blocks, DELETE /api/v1/artist-blocks/:artistId
  • rejection_reason and rejection_reason_text columns on recommendations
  • Pipeline filter, subscription runner, and quick-discover all honour the blocklist as an independent layer
  • 28 new i18n keys translated across all 15 shipped locales
  • Backup/restore round-trips include artist_blocks
  • Server-side Zod validation enforces the UI invariants (not_right_nowpermanent; reasonText only valid when reason='other')

Changed

  • PATCH /api/v1/recommendations/:id with status: 'rejected' accepts optional reason, reasonText, and permanent fields; legacy callers continue to work unchanged
  • StoreDb interface gains getBlockedMbids(userId)
  • New Digarr signature theme added to the theme picker