Jonathan
46164c9eab
feat(preview): GET /api/discover/preview/[mbid] annotated discography
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-12 01:39:35 +02:00
Jonathan
f3cb306a19
feat(preview): GET /api/mb/release-groups/[rgMbid]/tracks
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-12 01:36:28 +02:00
Jonathan
b9ebd18c2c
feat(discovery): Discovery settings section (enable + tuning knobs)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-12 00:47:18 +02:00
Jonathan
3de7461245
feat(discovery): /discover feed page + seed search UI + nav link
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-12 00:44:11 +02:00
Jonathan
10262f053a
feat(discovery): GET/PATCH /api/discover/config
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-12 00:41:13 +02:00
Jonathan
c7aeab5176
feat(discovery): POST /api/discover/[id] follow/want/dismiss actions
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-12 00:38:06 +02:00
Jonathan
bf868829d8
feat(discovery): GET /api/discover/search interactive seed search
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-12 00:34:28 +02:00
Jonathan
be59862dfc
feat(discovery): POST/GET /api/discover/run trigger + status
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-12 00:32:01 +02:00
Jonathan
f750b815d2
feat(discovery): GET /api/discover feed
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-12 00:29:28 +02:00
Jonathan
d65230ddfb
feat: artist page toggle to show all release types (default studio-only)
2026-07-11 18:07:38 +02:00
Jonathan
560fdaa4b0
feat: filter artist discography + counts to core releases unless showAllTypes
2026-07-11 18:05:46 +02:00
Jonathan
28fc1ee1a8
fix: artists search marks already-followed artists instead of a Follow button
2026-07-11 17:50:53 +02:00
Jonathan
2fb825140f
feat: auto-refresh the scan button until the worker finishes
2026-07-11 17:40:27 +02:00
Jonathan
612cd02b15
feat: Settings 'Scan library' button + last-result status
2026-07-11 17:14:37 +02:00
Jonathan
7cb99361a5
feat: /api/scan — request a library scan + read its result
...
Type the POST request param (_request: Request) to match the test's
call signature and keep tsc --noEmit clean, per Next.js route handler
convention already used elsewhere in the codebase.
2026-07-11 17:11:42 +02:00
Jonathan
9f895cfc10
fix: search-now dedupes against an active job (match worker enqueue invariant)
...
The worker's enqueue_due refuses to enqueue when a non-terminal job
already exists for a release. The search-now route enqueued
unconditionally, so two clicks (or a click racing the worker sweep)
could create two concurrent pipelines for the same album, both
importing and colliding on LibraryItem's @@unique([artist,album]).
Mirror the worker's guard: no-op if a job in a non-terminal state
(anything other than imported/needs_attention) already exists for the
release.
2026-07-11 14:19:31 +02:00
Jonathan
7087b2780e
feat: artist discography page + wanted page
2026-07-11 14:11:53 +02:00
Jonathan
f7135b9046
feat: artists page with live-search follow picker
2026-07-11 14:08:10 +02:00
Jonathan
cd652c7285
feat: wanted list API — list + standalone add
2026-07-11 14:04:35 +02:00
Jonathan
6615ecf3a7
feat: releases API — monitor toggle + search-now enqueue
2026-07-11 14:00:49 +02:00
Jonathan
f5ceea8fde
fix: narrow artist PATCH/DELETE 404 catch to Prisma P2025 (rethrow real errors)
2026-07-11 13:58:40 +02:00
Jonathan
1e39c74b16
feat: artist item API — detail, auto-monitor toggle, unfollow
2026-07-11 13:55:36 +02:00
Jonathan
7f0ac68657
feat: artists API — follow (persist discography) + list
2026-07-11 13:51:14 +02:00
Jonathan
8e97796bad
feat: MusicBrainz proxy API routes (artist search + discography browse)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-11 13:45:24 +02:00
Jonathan
00b3dddca6
feat: Qobuz auth-token (user_id + token) login as a reliable alternative to email/password
...
Qobuz's email/password API login returns 401 even with valid credentials
(a known Qobuz limitation, unaffected by streamrip version). Add settings
fields for a Qobuz user ID + auth token (token stored encrypted); when both
are present StreamripClient uses use_auth_token=True, else falls back to
email/password.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-11 00:46:17 +02:00
Jonathan
69a8835c86
feat: add settings page for credentials
2026-07-10 19:58:46 +02:00
Jonathan
1b11fa37bd
feat: add config API with encrypted secret storage
2026-07-10 19:54:27 +02:00
Jonathan
8085ed719f
feat: add request form and live queue UI
2026-07-10 16:53:07 +02:00
Jonathan
fd9969ae17
test: cover 400 validation branches in request API
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-10 16:51:24 +02:00
Jonathan
15bb68bc49
feat: add request create/list API
2026-07-10 16:47:54 +02:00
Jonathan
599cc76404
chore: scaffold web, worker, and compose stack
...
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com >
2026-07-10 16:33:22 +02:00