This website requires JavaScript.
16e0e98943
feat(web): mobile mechanical sweep — pointer-aware arrows, h3 dividers, modal safe-area
bvandeusen and Claude Opus 4.7
2026-05-09 20:21:38 -04:00
f03a0042e8
feat(web): wire RowActionsMenu in users admin page
bvandeusen and Claude Opus 4.7
2026-05-09 20:21:17 -04:00
e266a0f2dc
feat(web): wire RowActionsMenu in requests + quarantine
bvandeusen and Claude Opus 4.7
2026-05-09 20:20:43 -04:00
e0cf527304
feat(web): RowActionsMenu generic primary + ⋮ for admin tables
bvandeusen and Claude Opus 4.7
2026-05-09 20:19:09 -04:00
ed6d0936ca
feat(web): PlayerBar reflows to two-row layout below md
bvandeusen and Claude Opus 4.7
2026-05-09 20:18:32 -04:00
d5983433c5
feat(web): PlayerOverflowMenu — shuffle/repeat/queue/volume in a menu
bvandeusen and Claude Opus 4.7
2026-05-09 20:18:10 -04:00
df4cb434b2
feat(web): hamburger trigger + mobile drawer mount in Shell
bvandeusen and Claude Opus 4.7
2026-05-09 20:17:35 -04:00
857a8621ec
feat(web): MobileNavDrawer off-canvas nav for <md viewport
bvandeusen and Claude Opus 4.7
2026-05-09 20:17:17 -04:00
7f395024a0
feat(web): mobileNav store for off-canvas drawer state
bvandeusen and Claude Opus 4.7
2026-05-09 20:16:38 -04:00
84a638a41f
fix(flutter): clear analyze --fatal-infos issues
bvandeusen and Claude Opus 4.7
2026-05-09 16:16:35 -04:00
dd848e76e8
feat(flutter/playlists): empty-state hint on empty playlist detail
bvandeusen and Claude Opus 4.7
2026-05-09 16:07:41 -04:00
0dbb662b4c
feat(flutter): search no-results copy mirrors design-system voice
bvandeusen and Claude Opus 4.7
2026-05-09 16:07:19 -04:00
ccebd98735
feat(flutter): empty-state copy mirrors web design-system voice
bvandeusen and Claude Opus 4.7
2026-05-09 16:06:58 -04:00
231f1ddf9a
test(flutter/theme): cover .dark()/.light() factories + back-compat alias
bvandeusen and Claude Opus 4.7
2026-05-09 15:50:51 -04:00
143130eaae
feat(flutter/settings): Appearance section with System/Light/Dark picker
bvandeusen and Claude Opus 4.7
2026-05-09 15:50:29 -04:00
56f0557d94
feat(flutter): MinstrelApp watches themeMode + offers darkTheme
bvandeusen and Claude Opus 4.7
2026-05-09 15:47:41 -04:00
6dc488652e
feat(flutter/theme): themeModeProvider with secure-storage persistence
bvandeusen and Claude Opus 4.7
2026-05-09 15:47:00 -04:00
caa19f2d91
feat(flutter/theme): buildDarkTheme + buildLightTheme
bvandeusen and Claude Opus 4.7
2026-05-09 15:46:37 -04:00
66ddd3c366
feat(flutter/theme): FabledSwordTheme.dark() + .light() factories
bvandeusen and Claude Opus 4.7
2026-05-09 15:46:01 -04:00
b1f62a0733
feat(flutter/theme): codegen emits dark + light + flat token classes
bvandeusen and Claude Opus 4.7
2026-05-09 15:45:40 -04:00
25ff7afc33
feat(flutter): TrackRow renders TrackActionsButton by default
bvandeusen and Claude Opus 4.7
2026-05-09 13:43:40 -04:00
c8baaa5329
feat(flutter): wire TrackActionsButton into 4 surfaces
bvandeusen and Claude Opus 4.7
2026-05-09 13:43:12 -04:00
36006d703d
feat(flutter/track-actions): AddToPlaylistSheet picker
bvandeusen and Claude Opus 4.7
2026-05-09 13:42:19 -04:00
2944288050
feat(flutter/track-actions): HideTrackSheet for reason + notes pick
bvandeusen and Claude Opus 4.7
2026-05-09 13:41:48 -04:00
5f239f05a5
feat(flutter/track-actions): TrackActionsButton + TrackActionsSheet
bvandeusen and Claude Opus 4.7
2026-05-09 13:41:16 -04:00
2499449c0b
feat(flutter/player): playNext + enqueue + PlaylistsApi.appendTracks
bvandeusen and Claude Opus 4.7
2026-05-09 13:40:17 -04:00
5159bcd3f4
feat(flutter/quarantine): MyQuarantineController + provider
bvandeusen and Claude Opus 4.7
2026-05-09 13:39:32 -04:00
fdaa1a0472
feat(flutter/api): QuarantineApi for flag/unflag
bvandeusen and Claude Opus 4.7
2026-05-09 13:38:52 -04:00
534dafb044
feat(flutter/player): set MediaItem.artUri from local cover cache
bvandeusen and Claude Opus 4.7
2026-05-09 12:54:47 -04:00
d70075c426
feat(flutter/player): albumCoverCacheProvider + pass cache through configure
bvandeusen and Claude Opus 4.7
2026-05-09 12:54:05 -04:00
b6d6f22598
feat(flutter/player): AlbumCoverCache for lock-screen artwork
bvandeusen and Claude Opus 4.7
2026-05-09 12:53:20 -04:00
78ad8a31e7
chore(flutter): promote path_provider to direct dep
bvandeusen and Claude Opus 4.7
2026-05-09 12:52:44 -04:00
d3a05520d3
fix(flutter): clear analyze --fatal-infos issues
bvandeusen and Claude Opus 4.7
2026-05-09 12:05:02 -04:00
17ff69780d
test(flutter/home): cover new home parity layout
bvandeusen and Claude Opus 4.7
2026-05-09 11:40:46 -04:00
a2f6bdb44f
feat(flutter/home): mirror web home structurally
bvandeusen and Claude Opus 4.7
2026-05-09 11:40:12 -04:00
8fb82d473d
feat(flutter/widgets): HorizontalScrollRow skips header when title empty
bvandeusen and Claude Opus 4.7
2026-05-09 11:38:57 -04:00
a7fcafadda
feat(flutter): DelayedLoading wrapper for skeleton-with-delay
bvandeusen and Claude Opus 4.7
2026-05-09 11:38:42 -04:00
3ac8cc9363
feat(flutter/widgets): PlaylistCard + PlaylistPlaceholderCard
bvandeusen and Claude Opus 4.7
2026-05-09 11:38:19 -04:00
dccdb00bce
feat(flutter/widgets): CompactTrackCard for dense home Most-played row
bvandeusen and Claude Opus 4.7
2026-05-09 11:37:40 -04:00
078520f504
feat(flutter): systemPlaylistsStatusProvider
bvandeusen and Claude Opus 4.7
2026-05-09 11:36:29 -04:00
d872a30506
feat(flutter): SystemPlaylistsStatus model + endpoint method
bvandeusen and Claude Opus 4.7
2026-05-09 11:36:15 -04:00
5613fec5ef
fix(flutter): PlaylistsApi.list parses {owned, public} envelope
bvandeusen and Claude Opus 4.7
2026-05-09 11:35:34 -04:00
28b07c7ef4
fix(flutter/android): permit cleartext to 127.0.0.1 for just_audio loopback proxy
bvandeusen and Claude Opus 4.7
2026-05-08 23:24:47 -04:00
83df3773ae
fix(flutter): cover URLs send Bearer auth + audio handler diag logging
bvandeusen and Claude Opus 4.7
2026-05-08 23:15:56 -04:00
088e8f4bf8
test(web/admin): align Lidarr bootstrap tests with file conventions
bvandeusen and Claude Opus 4.7
2026-05-08 23:11:35 -04:00
c47ec6093f
test(web/admin): cover Test-then-Save flow on /admin/integrations
bvandeusen and Claude Opus 4.7
2026-05-08 23:10:37 -04:00
bca8622640
feat(web/admin): Save runs Test first, dropdowns honor test response
bvandeusen and Claude Opus 4.7
2026-05-08 23:08:58 -04:00
abb384f479
feat(web/admin): LidarrTestResult success branch carries profile + folder lists
bvandeusen and Claude Opus 4.7
2026-05-08 23:08:02 -04:00
22f03a5fe8
test(server/admin): cover new test endpoint response shape
bvandeusen and Claude Opus 4.7
2026-05-08 23:07:47 -04:00
0bc17a85fb
feat(server/admin): test endpoint returns profiles + folders on success
bvandeusen and Claude Opus 4.7
2026-05-08 23:07:15 -04:00
602ef3bfdf
fix(flutter): cover URLs resolve against server baseUrl + audio stream URL guard
bvandeusen and Claude Opus 4.7
2026-05-08 22:47:25 -04:00
751c2878f7
fix(flutter/android): production manifest + AudioServiceActivity
bvandeusen and Claude Opus 4.7
2026-05-08 22:33:30 -04:00
626fc7502c
Merge pull request 'refactor(server): remove bootstrap admin path' (#34 ) from dev into main
v2026.05.08.4
bvandeusen
2026-05-09 02:19:40 +00:00
c4cccea775
refactor(server): remove bootstrap admin path
bvandeusen and Claude Opus 4.7
2026-05-08 22:14:33 -04:00
9bf3b8a2f2
Merge pull request 'feat(flutter): admin parity slice — requests, quarantine, users, invites' (#33 ) from dev into main
v2026.05.08.3
bvandeusen
2026-05-09 02:07:59 +00:00
d5c8d316c5
fix(flutter): clear analyze --fatal-infos errors from admin parity slice
bvandeusen and Claude Opus 4.7
2026-05-08 22:02:14 -04:00
9f6ceb1731
feat(flutter/admin): users screen with users + invites sections
bvandeusen and Claude Opus 4.7
2026-05-08 21:57:53 -04:00
afcaf56b9c
feat(flutter/admin): user row + edit sheet (toggles, reset, delete)
bvandeusen and Claude Opus 4.7
2026-05-08 21:57:10 -04:00
7d207e56f5
feat(flutter/admin): users + invites mutations
bvandeusen and Claude Opus 4.7
2026-05-08 21:56:34 -04:00
3e905db906
feat(flutter/admin): quarantine screen + typed-confirm sheet
bvandeusen and Claude Opus 4.7
2026-05-08 21:56:00 -04:00
bd1bcab12b
feat(flutter/admin): requests screen with approve/reject
bvandeusen and Claude Opus 4.7
2026-05-08 21:54:58 -04:00
8bb192fe54
feat(flutter/admin): adminRequestsProvider with optimistic approve/reject
bvandeusen and Claude Opus 4.7
2026-05-08 21:54:05 -04:00
408eed1f3d
feat(flutter/settings): admin card visible to admins
bvandeusen and Claude Opus 4.7
2026-05-08 21:53:35 -04:00
6b5d12f3a1
feat(flutter/admin): landing screen with section cards + counts
bvandeusen and Claude Opus 4.7
2026-05-08 21:53:03 -04:00
372e7eca86
feat(flutter/admin): API providers + adminCountsProvider
bvandeusen and Claude Opus 4.7
2026-05-08 21:52:12 -04:00
79d00ba001
feat(flutter/api): admin endpoint clients
bvandeusen and Claude Opus 4.7
2026-05-08 21:52:00 -04:00
2b595c40cd
feat(flutter): admin DTOs (request, quarantine item, user, invite)
bvandeusen and Claude Opus 4.7
2026-05-08 21:51:33 -04:00
dfc08650e7
feat(flutter): wire admin routes + isAdmin gate
bvandeusen and Claude Opus 4.7
2026-05-08 21:50:53 -04:00
fc0350cb96
feat(flutter): adopt MainAppBarActions in Search, Discover, Playlists, Settings
bvandeusen and Claude Opus 4.7
2026-05-08 21:50:29 -04:00
5546787f78
feat(flutter): adopt MainAppBarActions in Home + Library
bvandeusen and Claude Opus 4.7
2026-05-08 21:49:30 -04:00
6564d37a2a
feat(flutter): MainAppBarActions widget with admin-gated overflow
bvandeusen and Claude Opus 4.7
2026-05-08 21:48:52 -04:00
492460cf4a
Merge pull request 'fix(web): /register reachable for bootstrap admin (closes #376 )' (#32 ) from dev into main
v2026.05.08.2
bvandeusen
2026-05-08 22:01:37 +00:00
c5dc3bd256
fix(web): exempt /register from auth guard so bootstrap admin can self-register
bvandeusen and Claude Opus 4.7
2026-05-08 17:59:43 -04:00
3f2822dfc6
feat(flutter): discover screen — search Lidarr + create requests
bvandeusen
2026-05-08 14:53:06 -04:00
dfbeed01a6
feat(flutter): settings screen + 4-icon home AppBar
bvandeusen
2026-05-08 14:51:04 -04:00
1ad67dbe59
fix(flutter/test): tolerate Riverpod 3's ProviderException wrapper
bvandeusen
2026-05-08 14:43:31 -04:00
da1cb7b590
feat(flutter): queue screen + skipToQueueItem support
bvandeusen
2026-05-08 14:42:10 -04:00
66545bf8c3
feat(flutter): library screen with 5 tabs (Artists/Albums/History/Liked/Hidden)
bvandeusen
2026-05-08 14:40:26 -04:00
5541171e94
feat(flutter): playlists list + detail screens
bvandeusen
2026-05-08 14:33:53 -04:00
147d6e280e
feat(flutter): bump deps to latest + Search screen slice
bvandeusen
2026-05-08 14:30:01 -04:00
1b3f2e254b
docs(readme): use :latest in quickstart compose instead of pinned tag
bvandeusen
2026-05-08 13:50:53 -04:00
1c775905d7
Release v2026.05.08.1 — DRY pass + cover-art HTTP base (#31 )
v2026.05.08.1
bvandeusen
2026-05-08 17:45:41 +00:00
4f669c26e9
fix(coverart/test): set MinInterval in rate-limit-serialization tests
bvandeusen
2026-05-08 13:21:45 -04:00
b5a138bb27
fix(server): repair recursive withUser, gofmt 2 files (golangci-lint)
bvandeusen
2026-05-08 12:05:35 -04:00
6a444334ea
fix(server/api/test): drop unused 'context' imports A3 sed left behind
bvandeusen
2026-05-08 11:29:36 -04:00
3e263657c6
refactor(web): hoist .play-overlay CSS to app.css; remove triplicated <style> blocks (C2)
bvandeusen
2026-05-08 11:28:58 -04:00
efef9934d4
refactor(web): migrate 4 open-coded cover URL sites to coverUrl() helper (C1 small-win)
bvandeusen
2026-05-08 11:26:26 -04:00
47c316e211
fix(web/test): restore named-mock svelte-query overrides B3 stripped (integrations + requests)
bvandeusen
2026-05-08 11:26:19 -04:00
5a174c9ef0
refactor(web): converge PlaylistTrackRow drag-reorder onto @neodrag/svelte (B4)
bvandeusen
2026-05-08 11:22:23 -04:00
3e34f1f7b3
refactor(web/test): default svelte-query mock in vitest.setup; remove from 34 files (B3)
bvandeusen
2026-05-08 11:08:41 -04:00
923b8286ee
fix(server/api/test): retype callRadio user param to dbq.User for withUser helper
bvandeusen
2026-05-08 11:05:25 -04:00
909b36d5ad
refactor(web/auth): extract user state to break auth<->player cycle (B2)
bvandeusen
2026-05-08 10:49:39 -04:00
68af48bb37
refactor(web/theme): read meta-theme hex from tokens.json (B1)
bvandeusen
2026-05-08 10:48:03 -04:00
4ce7be4296
fix(server): repair go vet failures from A1+A2 cleanup (orphan imports + needle deref)
bvandeusen
2026-05-08 10:46:43 -04:00
c81491164a
refactor(server/api/test): withUser helper; migrate 51 context-value sites (A3)
bvandeusen
2026-05-08 10:39:11 -04:00
bf90a3a868
refactor(server/api): migrate admin_smtp/admin_tracks + playlist refresh preludes (A2 6/N)
bvandeusen
2026-05-08 10:18:35 -04:00
9dd5da514c
refactor(server/api): migrate me/* + events preludes (A2 5/N)
bvandeusen
2026-05-08 08:44:50 -04:00
79c3ec3659
refactor(server/api): migrate library/suggestions/radio/home preludes (A2 4/N)
bvandeusen
2026-05-08 08:43:36 -04:00
dde3dd2804
refactor(server/api): migrate requests/quarantine/me_token/listenbrainz/admin_invites preludes (A2 3/N)
bvandeusen
2026-05-08 08:26:43 -04:00
8cd8825efc
refactor(server/api): migrate likes.go + playlists.go preludes (A2 2/N)
bvandeusen
2026-05-08 08:20:33 -04:00