Commit Graph

  • d35ed5945a feat(web/m7-377): AlbumCard gains bottom-right kebab bvandeusen 2026-05-04 13:07:06 -04:00
  • 4e42fc8280 feat(web/m7-377): ArtistCard top-right cluster + bottom-right kebab bvandeusen 2026-05-04 13:05:11 -04:00
  • 43a3dc47a8 feat(web/m7-377): AlbumMenu component + listAlbumTracks helper bvandeusenandClaude Sonnet 4.6 2026-05-04 11:59:38 -04:00
  • ce01b3d992 feat(web/m7-377): ArtistMenu component with like/queue/playlist actions bvandeusenandClaude Sonnet 4.6 2026-05-04 11:53:41 -04:00
  • 72496852a5 feat(web/m7-377): LikeButton gains size prop (sm/md/lg) bvandeusen 2026-05-04 11:50:31 -04:00
  • 9eeb79e99f fix(web/m7-377): update AddToPlaylistMenu tests for tracks-array prop bvandeusen 2026-05-04 11:48:55 -04:00
  • 7ddf77ace5 refactor(web/m7-377): AddToPlaylistMenu accepts tracks: TrackRef[] bvandeusen 2026-05-04 11:47:53 -04:00
  • 2b286a9bfd docs(db/m7-352): note ListPlaylistsByUserAndKind is test-only bvandeusen 2026-05-04 10:31:09 -04:00
  • 0a1e76564d feat(server/m7-352): 403 system_playlist_readonly on playlist edit endpoints bvandeusen 2026-05-04 09:29:37 -04:00
  • a90ff11f0f feat(server/m7-352): kind filter on GET /api/playlists + lazy fallback bvandeusenandClaude Sonnet 4.6 2026-05-04 09:24:27 -04:00
  • 391f5f16a1 feat(server/m7-352): cron loop + main.go wiring for system playlist build bvandeusen 2026-05-04 09:16:07 -04:00
  • 797a2c8a45 fix(server/m7-352): log Finish/Fail run errors; drop unused seed-limit constant bvandeusen 2026-05-04 09:14:40 -04:00
  • 46a9de8e9a feat(server/m7-352): BuildSystemPlaylists with atomic replace + concurrency guard bvandeusenandClaude Sonnet 4.6 2026-05-04 08:35:02 -04:00
  • ef478778ef feat(server/m7-352): system mix helpers (tieBreakHash, pickSeedArtists) bvandeusen 2026-05-04 08:24:39 -04:00
  • d7aebafa5d feat(server/m7-352): AssertEditable + ErrSystemPlaylistReadonly on playlists service bvandeusen 2026-05-04 08:21:18 -04:00
  • 58a27e2f0f fix(db/m7-352): cast COALESCE to uuid so sqlc emits typed return bvandeusen 2026-05-04 08:15:21 -04:00
  • 3fe929cebd feat(db/m7-352): sqlc queries for system playlist runs + seed selection bvandeusenandClaude Sonnet 4.6 2026-05-04 08:14:20 -04:00
  • 36d05310ce feat(db/m7-352): system playlists schema (kind, variant, seed_artist_id, runs table) bvandeusen 2026-05-04 08:03:06 -04:00
  • 79d6045f7a fix(server/m7-365): silence unused-pool-param lint in history test bvandeusen 2026-05-04 07:05:49 -04:00
  • aa5b277b6b fix(web/m7-365): history page error-state test asserts by role bvandeusen 2026-05-04 07:05:20 -04:00
  • c04b288737 feat(web/m7-365): add History entry to Library nav bvandeusen 2026-05-04 06:59:05 -04:00
  • cd0b9c97e1 fix(web/m7-365): align /library/history with albums-page conventions bvandeusen 2026-05-04 06:57:24 -04:00
  • ecf4ed86f5 feat(web/m7-365): /library/history page with day grouping + infinite scroll bvandeusenandClaude Sonnet 4.6 2026-05-04 06:53:37 -04:00
  • da39ff847b feat(web/m7-365): HistoryRow component with click-to-play bvandeusen 2026-05-04 06:19:59 -04:00
  • 4dee5922d9 feat(web/m7-365): dayBucket + groupByDay utilities bvandeusen 2026-05-04 06:18:18 -04:00
  • 46066c4d08 feat(web/m7-365): history API helper + tests bvandeusen 2026-05-04 06:16:15 -04:00
  • fc608fb36e feat(server/m7-365): GET /api/me/history handler + integration test bvandeusenandClaude Sonnet 4.6 2026-05-04 05:52:17 -04:00
  • 45a17e4e95 feat(server/m7-365): sqlc query for user listening history bvandeusen 2026-05-04 05:46:30 -04:00
  • d202319c87 fix(web/m7-364): vitest failures — exact-match query, inert prop, -0, user guard bvandeusen 2026-05-03 22:37:00 -04:00
  • d43c6b31f4 chore(web/lint): clear svelte-check warnings + fix QueueDrawer test query bvandeusen 2026-05-03 22:26:09 -04:00
  • 22e3f67411 feat(web/m7-364): drawer focus management + grip Enter/Space handling bvandeusen 2026-05-03 22:23:20 -04:00
  • d83b3eab25 fix(web/m7-364): TrackRef field shape + seek-on-restore + drawer inert bvandeusenandClaude Sonnet 4.6 2026-05-03 22:14:59 -04:00
  • 49c8e5959e feat(web/m7-364): mount QueueDrawer + esc handler + restore on bootstrap bvandeusen 2026-05-03 21:53:36 -04:00
  • 82846c9fcd fix(web/m7-364): align queue toggle styling with sibling toggles bvandeusen 2026-05-03 21:52:39 -04:00
  • 36805914d8 feat(web/m7-364): PlayerBar queue toggle + Up next line bvandeusenandClaude Sonnet 4.6 2026-05-03 21:50:14 -04:00
  • b99eb5f120 feat(web/m7-364): QueueDrawer side-panel with track list bvandeusen 2026-05-03 21:47:33 -04:00
  • e164d69492 fix(web/m7-364): keyboard reorder + measured row height + offsetToDelta helper bvandeusen 2026-05-03 21:45:32 -04:00
  • 57a353a138 feat(web/m7-364): QueueTrackRow with neodrag reorder + remove bvandeusen 2026-05-03 21:41:59 -04:00
  • b2e3913df8 feat(web/m7-364): clear persisted queue + reset queue on logout bvandeusen 2026-05-03 21:39:57 -04:00
  • 472b9d9e84 fix(web/m7-364): untrack _position in queue immediate-write effect bvandeusenandClaude Sonnet 4.6 2026-05-03 21:37:55 -04:00
  • 8cc79ee612 feat(web/m7-364): queue persistence write/restore on player store bvandeusen 2026-05-03 20:44:33 -04:00
  • bde017dad3 fix(web/m7-364): pause on last-track remove + reset drawer in test setup bvandeusen 2026-05-03 20:37:33 -04:00
  • 6f9b5d0059 feat(web/m7-364): queue mutations + drawer state on player store bvandeusenandClaude Sonnet 4.6 2026-05-03 20:29:48 -04:00
  • 8053704afa feat(web/m7-364): localStorage persistence layer for queue bvandeusen 2026-05-03 20:26:07 -04:00
  • ac44713ec3 chore(web/m7-364): add @neodrag/svelte for queue reorder bvandeusen 2026-05-03 20:24:25 -04:00
  • 180d85eec0 chore(web): post-#363 cleanup — DRY tripwires, drop unused description, singular playlist title bvandeusen 2026-05-03 19:04:59 -04:00
  • a8fd33d4ed chore(lint): clear pre-existing CI lint debt bvandeusen 2026-05-03 18:59:58 -04:00
  • 66f651cf5c fix(web/m7-362): repair Vitest fixtures (matchMedia.fire, listenbrainz mock) bvandeusenandClaude Sonnet 4.6 2026-05-03 18:48:20 -04:00
  • f8684f0034 fix(server,web): update test fixtures for new New/Handler signatures bvandeusen 2026-05-03 18:44:34 -04:00
  • ca82862346 chore(config): rename SMARTMUSIC_ env prefix to MINSTREL_; default admin user bvandeusenandClaude Sonnet 4.6 2026-05-03 18:40:59 -04:00
  • 841b4cd8df fix(docs/m7-363): README env vars + first-run instructions match reality bvandeusen 2026-05-03 17:54:03 -04:00
  • 874fe17191 docs(m7-363): operator-first README rewrite bvandeusen 2026-05-03 17:50:17 -04:00
  • 574bf30504 feat(web/m7-363): OG share-image placeholder + one-off generator bvandeusen 2026-05-03 17:47:05 -04:00
  • af6f006242 feat(web/m7-363): theme-color meta follows resolved theme bvandeusen 2026-05-03 17:44:01 -04:00
  • 07b228dd4e feat(web/m7-363): per-route svelte:head titles for dynamic detail pages bvandeusen 2026-05-03 17:40:08 -04:00
  • 9ad2e0343a feat(web/m7-363): per-route svelte:head titles for static routes bvandeusenandClaude Opus 4.7 2026-05-03 17:37:13 -04:00
  • f31dbcc087 refactor(web/m7-363): Shell header reads appName() not literal bvandeusen 2026-05-03 17:32:57 -04:00
  • 6c23dba51b feat(web/m7-363): branding helper + window.__MINSTREL__ consumer bvandeusen 2026-05-03 17:30:31 -04:00
  • a4a7225542 fix(web/m7-363): vite plugin fails build if anchors drift bvandeusen 2026-05-03 17:29:08 -04:00
  • 9803657087 feat(web/m7-363): vite plugin injects Go template tokens at build bvandeusen 2026-05-03 17:26:26 -04:00
  • 98caa7ea84 test(server/m7-363): script-context XSS test asserts </script> count bvandeusen 2026-05-03 17:24:42 -04:00
  • 004d935512 feat(server/m7-363): branding-aware index handler with html/template bvandeusen 2026-05-03 17:21:30 -04:00
  • 46ea9a761a feat(server/m7-363): thread BrandingConfig through server.New bvandeusen 2026-05-03 17:17:52 -04:00
  • cd50ffd77d feat(config/m7-363): branding config field + defaults bvandeusen 2026-05-03 17:14:59 -04:00
  • ec1b3a3397 chore: untrack docs/superpowers, ignore going forward bvandeusen 2026-05-03 15:32:43 -04:00
  • d56edadf0e docs(m7-363): branding polish design spec bvandeusen 2026-05-03 15:27:39 -04:00
  • 7d82be864d fix(flutter): handle nested colors split in tokens.json codegen bvandeusen 2026-05-03 14:46:27 -04:00
  • 7faa7b4e1f fix(web): hide Play next / Add to queue on PlayerBar's track menu bvandeusen 2026-05-03 14:08:29 -04:00
  • 4b101481fc fix(web): drop-up Add-to-playlist submenu, hide horizontal scroll row scrollbar bvandeusen 2026-05-03 14:04:07 -04:00
  • 16a692e81a test(web/m7-362): Settings Appearance card render + selection test bvandeusen 2026-05-03 13:53:47 -04:00
  • dd50ce09fd test(web/m7-362): theme store unit test (default/persist/matchMedia) bvandeusen 2026-05-03 13:53:03 -04:00
  • 0f83b2d6ae test(web/m7-362): tokens-to-css generator unit test bvandeusenandClaude Sonnet 4.6 2026-05-03 13:52:13 -04:00
  • e40fa0d252 feat(web/m7-362): Settings → Appearance card with dark/light/system selector bvandeusen 2026-05-03 13:51:25 -04:00
  • 4a04ec64f8 feat(web/m7-362): pre-paint theme application via inline FOUC script bvandeusen 2026-05-03 13:50:40 -04:00
  • ffed19f736 feat(web/m7-362): theme preference + resolved-theme rune store bvandeusen 2026-05-03 13:43:28 -04:00
  • f0bfac2555 refactor(web/m7-362): action-button labels use non-flipping text-action-fg bvandeusenandClaude Sonnet 4.6 2026-05-03 13:42:42 -04:00
  • 5c5f9f3ec1 feat(web/m7-362): add Tailwind text-action-fg alias for non-flipping label color bvandeusen 2026-05-03 13:40:20 -04:00
  • 9b7dd8272e feat(web/m7-362): tokens.json dark/light/flat split + dual-block CSS generator bvandeusenandClaude Sonnet 4.6 2026-05-03 13:39:54 -04:00
  • a9fc0c6fe8 docs(m7-362): theme toggle implementation plan (9 tasks) bvandeusen 2026-05-03 13:37:33 -04:00
  • 1d6a71a825 docs(m7-362): correct dark hex values + Tailwind alias bvandeusen 2026-05-03 13:34:40 -04:00
  • 1dcce4e304 docs(m7-362): theme toggle design spec bvandeusen 2026-05-03 13:31:18 -04:00
  • 0ce78035aa test(web): PlaylistCard cover-img assertion uses DOM query bvandeusen 2026-05-03 12:28:21 -04:00
  • e0a4d13c45 fix(web): /playlists/{id} page uses $app/state, not legacy $app/stores bvandeusen 2026-05-03 11:58:10 -04:00
  • d32e1505c5 docs(config): document storage.data_dir in the example yaml bvandeusen 2026-05-03 11:38:05 -04:00
  • 6d1709caff fix(config): wire DataDir from yaml/env through to playlists service bvandeusen 2026-05-03 11:37:41 -04:00
  • b0a928c554 feat(web): /playlists/{id} detail page with drag-reorder (M7 #352) bvandeusen 2026-05-03 11:34:05 -04:00
  • 80a6861ded feat(web): /playlists index page (M7 #352 slice 1) bvandeusen 2026-05-03 11:22:25 -04:00
  • 71dbaaede5 feat(web): AddToPlaylistMenu submenu wired into TrackMenu (M7 #352) bvandeusen 2026-05-03 11:20:14 -04:00
  • 4067be04a6 feat(web): PlaylistTrackRow component for M7 #352 slice 1 bvandeusen 2026-05-03 11:16:35 -04:00
  • 0eb346e0c6 feat(web): PlaylistCard component for M7 #352 slice 1 bvandeusen 2026-05-03 11:14:30 -04:00
  • b9830cc9cc feat(web/api): playlists helper + types + query keys (M7 #352 slice 1) bvandeusen 2026-05-03 11:12:46 -04:00
  • c331168d3b feat(api): /api/playlists* handlers for M7 #352 slice 1 bvandeusenandClaude Opus 4.7 2026-05-03 11:10:21 -04:00
  • 79bab14b30 feat(playlists): track operations + cover-collage generator bvandeusen 2026-05-03 10:25:20 -04:00
  • 5c61c10b63 feat(playlists): Service with CRUD methods (M7 #352 slice 1) bvandeusenandClaude Opus 4.7 2026-05-03 10:17:08 -04:00
  • 1226cb7583 feat(db): playlists schema for M7 #352 slice 1 bvandeusen 2026-05-03 10:03:36 -04:00
  • e056c8b8be docs(m7): implementation plan for #352 playlists CRUD slice 1 bvandeusen 2026-05-03 00:59:21 -04:00
  • 65bb4e6dfd docs(m7): spec for #352 playlists CRUD (slice 1 of 3) bvandeusen 2026-05-03 00:28:34 -04:00
  • 1cf58b18e8 ci(web): exclude #374-blocked tests from vitest module discovery bvandeusen 2026-05-03 00:13:04 -04:00
  • 53842b0f21 ci(test-web): drop npm cache restore — setup-node was burning 4m41s bvandeusen 2026-05-03 00:09:02 -04:00
  • 40db918bfc fix(web): RemoveTrackPopover async test waits + skip 2 SvelteKit-broken suites bvandeusen 2026-05-03 00:00:26 -04:00