-
446a4bc2d2
fix(web): address auth review findings (open redirect, dead code, HMAC per-req)
Jonathan
2026-07-14 10:25:37 +02:00
-
8cd5392ec3
fix(security): fail fast on a missing/placeholder/public LYRA_SECRET_KEY
Jonathan
2026-07-14 10:19:46 +02:00
-
190e0ef4b6
feat(web): minimal shared-password auth gate
Jonathan
2026-07-14 10:12:51 +02:00
-
851f725a98
feat(ops): scheduled Postgres backups via db-backup sidecar
Jonathan
2026-07-14 10:02:17 +02:00
-
f74fd5ab88
fix(worker): retrieve Soulseek downloads from slskd's dir into staging
Jonathan
2026-07-14 09:59:16 +02:00
-
c918cba654
docs: note generalizing the MB cache table to a shared ApiCache
Jonathan
2026-07-14 00:37:31 +02:00
-
2158d988f8
docs: add MusicBrainz Postgres cache implementation plan
Jonathan
2026-07-14 00:33:03 +02:00
-
8922af757c
docs: update README for Last.fm, redesign, progress/retry, and pages
Jonathan
2026-07-13 23:53:30 +02:00
-
9561e6e196
feat(web): three-phase progress with live download % on The Floor
Jonathan
2026-07-13 23:29:33 +02:00
-
9d5e1ff58a
feat: track download progress on Job (migration + worker poller + API)
Jonathan
2026-07-13 23:23:15 +02:00
-
52e74f7709
feat(web): retry a needs-attention job from The Floor
Jonathan
2026-07-13 23:12:03 +02:00
-
53c0dcc256
fix(worker): run streamrip on one persistent event loop (fixes Qobuz download failures)
Jonathan
2026-07-13 23:04:25 +02:00
-
fdca692bb5
fix(worker): mark the chosen candidate at download-start, not after success
Jonathan
2026-07-13 22:17:18 +02:00
-
381426082e
feat(web): richer active-job rows on The Floor (source/format/tracks, stage, elapsed, error)
Jonathan
2026-07-13 22:05:07 +02:00
-
3ec1547e10
fix(web): artistPlays via user.getTop{Tracks,Albums} (getArtistTracks deprecated)
Jonathan
2026-07-13 21:38:22 +02:00
-
2291308b90
feat(web): Last.fm most-played songs + albums in the artist modal
Jonathan
2026-07-13 21:27:18 +02:00
-
5816a17952
feat(web): artistPlays lib + /api/lastfm/artist-plays (personal per-artist tally)
Jonathan
2026-07-13 21:20:47 +02:00
-
b6623944ff
docs: plan for Last.fm artist modal (personal most-played songs + albums)
Jonathan
2026-07-13 21:17:31 +02:00
-
13126addbc
fix(web): resolve album names to the studio Album, not a same-title Single
Jonathan
2026-07-13 21:06:15 +02:00
-
146bf32f23
feat(worker): Last.fm artist.getSimilar as a second discovery SimilaritySource
Jonathan
2026-07-13 19:23:18 +02:00
-
284872b307
style(web): theme the .field select (Last.fm period dropdown) to match inputs
Jonathan
2026-07-13 19:13:05 +02:00
-
7e1515fa99
feat(web): /lastfm browse page (artists/albums tabs, hide-in-library, follow/want)
Jonathan
2026-07-13 19:08:12 +02:00
-
ecdad88973
feat(web): Last.fm client lib + top-artists/albums + mb release-group routes
Jonathan
2026-07-13 19:01:04 +02:00
-
5eb4fbfd55
feat(web): Last.fm credentials (api key + username) + Settings tab
Jonathan
2026-07-13 18:53:58 +02:00
-
5315b240f0
docs: implementation plan for Last.fm integration (3 slices)
Jonathan
2026-07-13 18:51:03 +02:00
-
6f325d30b9
fix(worker): evict removed-seed contributions + clear scan worklist on abandon
Jonathan
2026-07-13 15:39:38 +02:00
-
0115b82867
feat(worker): persisted scan worklist (O(N) scan, robust to mid-scan changes)
Jonathan
2026-07-13 15:26:44 +02:00
-
de052a4ef7
feat(worker): per-seed discovery contributions so score sums across chunks/sweeps
Jonathan
2026-07-13 15:18:30 +02:00
-
bdd8fe72e9
feat: add DiscoverySeedContribution + ScanWorkItem tables
Jonathan
2026-07-13 15:14:58 +02:00
-
db72cab99b
fix(web): label Monitor toggle for a11y + correct Settings eyebrow
Jonathan
2026-07-13 15:11:09 +02:00
-
bbe1616ed2
fix(web): harden config PATCH allowlists against prototype-chain keys
Jonathan
2026-07-13 15:06:49 +02:00
-
6decdc7fc9
docs: implementation plan for cleanup batch (Tier A + B)
Jonathan
2026-07-13 15:04:19 +02:00
-
785385f0a2
docs: spec for cleanup batch (Tier A loose ends + Tier B design fixes)
Jonathan
2026-07-13 14:27:51 +02:00
-
e008ee8d13
fix(web): remove inert global autoMonitorFuture checkbox from Monitor tab
Jonathan
2026-07-13 01:08:05 +02:00
-
a67c552f29
feat(worker): chunk the discovery sweep (one chunk per loop iteration)
Jonathan
2026-07-13 00:57:00 +02:00
-
5351cd029d
feat(worker): discovery chunk_size + seed-count in result (retire max_seeds)
Jonathan
2026-07-13 00:52:08 +02:00
-
df7bf2fcf8
fix(worker): import_album recovers orphaned .old/.importing from an interrupted swap
Jonathan
2026-07-13 00:46:40 +02:00
-
44c1b1a62a
fix(web): wanted POST converges on P2002 unique race instead of 500
Jonathan
2026-07-13 00:40:29 +02:00
-
9c793f42d1
fix(web): escape Lucene quotes in searchReleaseGroup query
Jonathan
2026-07-13 00:37:00 +02:00
-
fd0bb6aaa0
feat(web): surface discover.listenBrainzUrl; swap maxSeeds->chunkSize in Discovery tab
Jonathan
2026-07-13 00:33:49 +02:00
-
98735b5353
feat(web): clear-credential buttons on Settings
Jonathan
2026-07-13 00:30:35 +02:00
-
011852d091
fix(web): close prototype-chain bypass in DELETE /api/config allowlist
Jonathan
2026-07-13 00:27:22 +02:00
-
789eb2c76a
feat(web): DELETE /api/config?field= to clear a credential
Jonathan
2026-07-13 00:23:21 +02:00
-
e048c68f40
feat(web): Monitor settings tab
Jonathan
2026-07-13 00:20:18 +02:00
-
2a50c1f518
feat(web): monitor config API route
Jonathan
2026-07-13 00:16:43 +02:00
-
34ebe39dd7
docs: implementation plan for deferred-items batch
Jonathan
2026-07-13 00:12:56 +02:00
-
ab94945f9f
docs: spec for deferred-items batch (settings, correctness, chunk discovery)
Jonathan
2026-07-13 00:07:15 +02:00
-
05b7090b60
chore: gitignore local ./staging download dir
Jonathan
2026-07-12 23:46:06 +02:00
-
e825e3d7ad
feat(worker): separate download staging volume (STAGING_DIR)
Jonathan
2026-07-12 23:44:27 +02:00
-
891793953f
feat(web): artists page — add-artist modal + filter watched list
Jonathan
2026-07-12 23:22:37 +02:00
-
606ea82b70
feat: real worker status, covers on Recently Pressed, library counter
Jonathan
2026-07-12 17:58:23 +02:00
-
e624d12089
feat(web): rework preview page onto tabs + covers + album modal
Jonathan
2026-07-12 17:58:23 +02:00
-
92d1345503
feat(web): favicon + toast feedback (polish)
Jonathan
2026-07-12 15:44:24 +02:00
-
c027945191
feat(web): cover art on Wanted + Discover album rows
Jonathan
2026-07-12 15:37:02 +02:00
-
76eab9e703
feat(web): Settings tabs per service (Qobuz/Soulseek/Library/Discovery)
Jonathan
2026-07-12 15:33:20 +02:00
-
1fbe58013f
feat(web): discovery modals — artist + album, not preview navigation
Jonathan
2026-07-12 15:29:46 +02:00
-
4f6c5995f8
feat(web): Library page — owned-albums grid with cover art
Jonathan
2026-07-12 15:24:16 +02:00
-
d05d092d53
feat(web): artist detail — category tabs, cover thumbs, album modal
Jonathan
2026-07-12 15:20:06 +02:00
-
34235a2355
feat(web): CoverArt + reusable AlbumModal
Jonathan
2026-07-12 15:14:34 +02:00
-
3284059aba
feat(web): reusable accessible Modal (portal, focus trap, scroll lock)
Jonathan
2026-07-12 15:12:36 +02:00
-
3f29ac1930
feat(web): widen app container 900px -> 1120px
Jonathan
2026-07-12 15:11:19 +02:00
-
082365005c
fix(worker): reconcile every job + backfill owned releases
Jonathan
2026-07-12 15:08:24 +02:00
-
50949f747b
feat(web): restyle Settings + read-only library path panel (Phase 3)
Jonathan
2026-07-12 14:34:46 +02:00
-
ead5f33bcc
feat(web): restyle Artists, Discover, Wanted, discography + preview (Phase 2)
Jonathan
2026-07-12 14:27:43 +02:00
-
7f1fe52a7c
feat(web): rebuild home as "The Floor" on the Pressing Plant system
Jonathan
2026-07-12 14:09:42 +02:00
-
fcbe34b027
feat(web): app shell — masthead, contents nav, theme toggle
Jonathan
2026-07-12 14:09:42 +02:00
-
656e755daf
feat(web): Pressing Plant component library + describeJob
Jonathan
2026-07-12 14:09:30 +02:00
-
e1d96aa603
feat(web): Pressing Plant design tokens + self-hosted Fraunces
Jonathan
2026-07-12 14:09:30 +02:00
-
5f0dcda2ab
docs: Pressing Plant frontend Phase 1 implementation plan
Jonathan
2026-07-12 13:57:35 +02:00
-
4655d815ee
docs: Pressing Plant frontend design system spec (Phase 1)
Jonathan
2026-07-12 13:53:52 +02:00
-
8bbc1db32f
feat(worker): chunk the library scan + reconnect on DB loss
Jonathan
2026-07-12 12:37:06 +02:00
-
62b60e3dae
refactor(scan): extract scan_chunk from scan_library
Jonathan
2026-07-12 12:36:54 +02:00
-
ade9cd7694
docs: worker robustness design (scan chunking + DB reconnect)
Jonathan
2026-07-12 12:36:54 +02:00
-
9ba587d136
fix(worker): run discovery at most once per loop iteration
Jonathan
2026-07-12 10:42:48 +02:00
-
830de07997
fix(monitor): only auto-monitor core studio releases
Jonathan
2026-07-12 10:42:42 +02:00
-
33a1ed9cc4
fix(artists-api): create artist + discography atomically
Jonathan
2026-07-12 10:42:42 +02:00
-
a07e791368
feat(artists): link live-search hits to the artist preview page
Jonathan
2026-07-12 10:42:29 +02:00
-
3f77bb1f4c
fix(preview): guard want() on res.ok; docs: preview in README + artists-search TODO
Jonathan
2026-07-12 02:03:08 +02:00
-
3928662809
feat(preview): link discovery feed + Find-similar to the artist preview
Jonathan
2026-07-12 01:49:40 +02:00
-
e1033dab81
feat(preview): /discover/artist/[mbid] preview page (disco + tracks + own-state)
Jonathan
2026-07-12 01:46:13 +02:00
-
9f2b115721
feat(preview): POST /api/discover/want (want a release-group by metadata)
Jonathan
2026-07-12 01:42:49 +02:00
-
46164c9eab
feat(preview): GET /api/discover/preview/[mbid] annotated discography
Jonathan
2026-07-12 01:39:35 +02:00
-
f3cb306a19
feat(preview): GET /api/mb/release-groups/[rgMbid]/tracks
Jonathan
2026-07-12 01:36:28 +02:00
-
e9759b8ef2
feat(preview): MB getArtistName + browseReleaseGroupTracks
Jonathan
2026-07-12 01:33:44 +02:00
-
170180d471
docs: discovery preview implementation plan (6 tasks, TDD)
Jonathan
2026-07-12 01:31:18 +02:00
-
4dbb6d9d83
docs: discovery preview design — artist preview page (disco + tracklists + own-state)
Jonathan
2026-07-12 01:26:16 +02:00
-
decb6302d4
docs: mark slice 3 (discovery) done + record deferred todos
Jonathan
2026-07-12 01:06:56 +02:00
-
d2c581d8e7
fix(discovery): use a valid ListenBrainz similar-artists algorithm
Jonathan
2026-07-12 00:54:33 +02:00
-
b9ebd18c2c
feat(discovery): Discovery settings section (enable + tuning knobs)
Jonathan
2026-07-12 00:47:18 +02:00
-
3de7461245
feat(discovery): /discover feed page + seed search UI + nav link
Jonathan
2026-07-12 00:44:11 +02:00
-
10262f053a
feat(discovery): GET/PATCH /api/discover/config
Jonathan
2026-07-12 00:41:13 +02:00
-
c7aeab5176
feat(discovery): POST /api/discover/[id] follow/want/dismiss actions
Jonathan
2026-07-12 00:38:06 +02:00
-
bf868829d8
feat(discovery): GET /api/discover/search interactive seed search
Jonathan
2026-07-12 00:34:28 +02:00
-
be59862dfc
feat(discovery): POST/GET /api/discover/run trigger + status
Jonathan
2026-07-12 00:32:01 +02:00
-
f750b815d2
feat(discovery): GET /api/discover feed
Jonathan
2026-07-12 00:29:28 +02:00
-
2dfc9ab277
feat(discovery): web ListenBrainz similar-artists client
Jonathan
2026-07-12 00:26:29 +02:00
-
a15f4ae8bb
feat(discovery): build_similarity_sources + worker sweep/trigger wiring
Jonathan
2026-07-12 00:22:34 +02:00
-
6f504a7c04
feat(discovery): ListenBrainz similarity source
Jonathan
2026-07-12 00:17:58 +02:00
-
0338d8e119
feat(discovery): derive core-album suggestions for surfaced artists
Jonathan
2026-07-12 00:13:40 +02:00
-
ccf3fb59ab
feat(discovery): run_discovery aggregates similar artists into suggestions
Jonathan
2026-07-12 00:07:09 +02:00