Commit Graph

  • 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