Commit Graph

  • 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 bvandeusen 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 bvandeusen 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) bvandeusen 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 bvandeusen 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 bvandeusen 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 bvandeusen 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 bvandeusen 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 bvandeusen 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 bvandeusen 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) bvandeusen 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
  • d87d9e3255 fix(web): widen TrackMenuItem icon prop type to match Lucide signature bvandeusen 2026-05-02 23:34:11 -04:00
  • 5d69e9614f fix(web): TrackMenuItem icon prop accepts Lucide class-components bvandeusen 2026-05-02 23:24:20 -04:00
  • 6858e45dbe ci: split test.yml into test-web.yml + test-go.yml, run on dev pushes bvandeusen 2026-05-02 23:11:20 -04:00
  • 9dc4786fd9 feat(web): TrackMenu rewrite — 9 entries in 4 groups (M7 #372) bvandeusen 2026-05-02 23:00:09 -04:00
  • 681b532b57 feat(web): TrackMenuDivider primitive for M7 #372 menu groups bvandeusen 2026-05-02 22:46:44 -04:00
  • 9256369926 feat(web): TrackMenuItem primitive for M7 #372 bvandeusen 2026-05-02 22:46:29 -04:00
  • f43ea6af5b feat(player): playNext for M7 #372 track-actions menu bvandeusen 2026-05-02 22:45:13 -04:00
  • 905b5f0da7 feat(web): admin removeTrack API helper for M7 #372 bvandeusen 2026-05-02 22:44:01 -04:00
  • bb931746e3 feat(api): DELETE /api/admin/tracks/{id} for M7 #372 bvandeusen 2026-05-02 22:41:51 -04:00
  • f6975cfad3 fix(tracks): rewrite RemoveTrack — direct os.Remove + optional Lidarr unmonitor bvandeusen 2026-05-02 22:35:34 -04:00
  • 723eee9773 docs(m7): revise #372 spec — Remove from library no longer goes via Lidarr bvandeusen 2026-05-02 22:28:49 -04:00
  • 50a231fdc1 feat(tracks): RemoveTrack service with Lidarr-aware delete + cascade bvandeusen 2026-05-02 21:58:12 -04:00
  • 30b0edf97b feat(db): cascade-cleanup queries for M7 #372 track removal bvandeusen 2026-05-02 21:53:33 -04:00
  • 9c53c9894a docs(m7): implementation plan for #372 track-actions menu bvandeusen 2026-05-02 21:39:30 -04:00
  • 136a475133 docs(m7): spec for #372 track-level actions menu bvandeusen 2026-05-02 21:31:40 -04:00
  • f27e83612d fix(flutter): two test environment issues from CI bvandeusen 2026-05-02 19:36:27 -04:00
  • 1e8b8aaa2d fix(flutter): drop redundant const in nested const contexts bvandeusen 2026-05-02 19:17:05 -04:00
  • d86c694cde fix(flutter): five flutter analyze --fatal-infos issues from first CI run bvandeusen 2026-05-02 19:01:54 -04:00
  • de1bfcf58b ci: retrigger after node-baked flutter-ci runner image bvandeusen 2026-05-02 18:57:39 -04:00
  • ec89201e04 ci(flutter): switch to dedicated flutter-ci runner bvandeusen 2026-05-02 18:42:08 -04:00
  • 7f10535420 fix(ci): flutter workflow runs on go-ci runner, not ubuntu-latest bvandeusen 2026-05-02 18:09:26 -04:00
  • e4b211eb13 docs(flutter): replace flutter-create-default README bvandeusen 2026-05-02 17:43:30 -04:00
  • 7c0f9750d8 ci(flutter): Forgejo workflow — sync, analyze, test, build APK bvandeusen 2026-05-02 17:42:38 -04:00
  • ec0c10f312 feat(flutter): connection-error banner + 401-clears-session interceptor bvandeusen 2026-05-02 17:41:46 -04:00
  • f675782bf5 feat(flutter/player): NowPlaying full-screen view with scrubber bvandeusen 2026-05-02 17:40:13 -04:00
  • bbfeb5d3ff feat(flutter/player): mini PlayerBar in shell + tap-to-play wiring bvandeusen 2026-05-02 17:39:09 -04:00
  • 80f98b3243 feat(flutter/player): MinstrelAudioHandler + just_audio + audio_service bvandeusen 2026-05-02 17:37:14 -04:00
  • 44e2623b3c feat(flutter/likes): LikeButton with optimistic toggle + rollback bvandeusen 2026-05-02 17:34:59 -04:00
  • 6ec7cea362 feat(flutter/library): artist + album detail screens bvandeusen 2026-05-02 17:32:34 -04:00
  • 5ef782905e feat(flutter/home): home screen with five sections bvandeusen 2026-05-02 17:30:42 -04:00
  • c47deb3c87 feat(flutter/library): card + row widgets (artist/album/track) bvandeusen 2026-05-02 17:29:03 -04:00
  • 3e267918b7 feat(flutter/library): API endpoints + Riverpod providers bvandeusen 2026-05-02 17:26:57 -04:00
  • d115c267f4 feat(flutter): GoRouter shell + version gate + auth-aware redirects bvandeusen 2026-05-02 17:24:08 -04:00
  • 9cbbfcff6c feat(flutter/auth): login screen + AuthApi.login posting to /api/auth/login bvandeusen 2026-05-02 17:21:42 -04:00
  • 3cf874ab69 feat(flutter/auth): server URL screen + auth provider + secure storage bvandeusen 2026-05-02 17:20:26 -04:00