Commit Graph

  • a3c0aed63e feat(flutter): playlist detail nav hydration — header renders before fetch bvandeusen 2026-05-11 22:24:02 -04:00
  • 1ddde12959 perf: lazy player source build + Cache-Control on byte endpoints bvandeusen 2026-05-11 22:18:58 -04:00
  • f1b4652c77 Merge pull request 'release v2026.05.11.3: caching, perf, playlist polish' (#41) from dev into main v2026.05.12.0 bvandeusen 2026-05-12 00:35:48 +00:00
  • 261b44522d fix(flutter): bump album-grid cellH slack — silence 1px overflow warnings bvandeusen 2026-05-11 20:27:54 -04:00
  • 6f20a75f9b feat(flutter): playlist cover art via deterministic /api/playlists/{id}/cover bvandeusen 2026-05-11 20:15:38 -04:00
  • 2d5f0691c2 diag(flutter): surface player errors + state transitions bvandeusen 2026-05-11 19:43:37 -04:00
  • e8a515dac4 fix(flutter): import debugPrint in player_provider for the timing logs bvandeusen 2026-05-11 19:35:12 -04:00
  • acc7149537 diag(flutter): instrument playTracks + cache appdir; fix CI bvandeusen 2026-05-11 19:11:44 -04:00
  • 4ede37d9ad fix(flutter): stop the cache feedback loop — playback no longer competes bvandeusen 2026-05-11 19:02:16 -04:00
  • 4bd069430b feat(flutter): extend metadata prefetch to library tabs + artist detail bvandeusen 2026-05-11 18:52:37 -04:00
  • 22152b1ba3 feat(flutter): metadata prefetcher — pre-warm drift for likely tap targets bvandeusen 2026-05-11 18:44:09 -04:00
  • 572325e23f fix(flutter): write cachedTracks rows from playlist fetch (was the empty-rows bug) bvandeusen 2026-05-11 18:38:21 -04:00
  • 8d466ebdd5 fix(flutter): reconcile stale playlists + recover from 404 on tap bvandeusen 2026-05-11 18:32:40 -04:00
  • af5744f8ab perf(home): aggregate-first rewrites for two scan-the-world queries bvandeusen 2026-05-11 18:26:20 -04:00
  • c7549bbe48 perf(api): collapse N+1 in /api/artists/{id} + 1 round-trip in /api/albums/{id} bvandeusen 2026-05-11 18:13:27 -04:00
  • 9cac664679 feat(flutter): register stream-cached files in the audio cache index bvandeusen 2026-05-11 17:46:32 -04:00
  • c08f4ace80 fix(flutter): cache usage display reflects actual disk, not just index bvandeusen 2026-05-11 17:41:07 -04:00
  • c1df2af992 fix(flutter): /queue at top level — fixes duplicate-key crash from player bvandeusen 2026-05-11 17:32:57 -04:00
  • a7f35a5d6d feat(flutter): full player — combined action row above seek bvandeusen 2026-05-11 17:25:27 -04:00
  • e610948307 Merge pull request 'release v2026.05.11.2: signing key + library infinite scroll' (#40) from dev into main v2026.05.11.2 bvandeusen 2026-05-11 19:51:41 +00:00
  • 8c00ee21c7 feat(flutter): infinite scroll on library Artists + Albums tabs bvandeusen 2026-05-11 15:41:01 -04:00
  • 2500914498 fix(flutter): persistent release signing key via CI secret bvandeusen 2026-05-11 14:22:32 -04:00
  • fb811804d2 Merge pull request 'release v2026.05.11.1: Flutter caching, navigation, and player polish' (#39) from dev into main v2026.05.11.1 bvandeusen 2026-05-11 17:47:41 +00:00
  • 0134281b8c fix(flutter): CI analyze + center title in full player bvandeusen 2026-05-11 13:01:52 -04:00
  • 4dbb3190ff fix(flutter): player updates on track change + kebab artist nav + Start radio bvandeusen 2026-05-11 12:32:43 -04:00
  • 2299824ad9 fix(flutter): system playlist tap loads tracks (mirror album refetch fix) bvandeusen 2026-05-11 12:26:17 -04:00
  • a77d4ceac0 fix(flutter): library Artists tab 404 + Albums tab 3-up grid bvandeusen 2026-05-11 12:21:24 -04:00
  • 11c40c6aca feat(flutter): SWR everywhere + nav hydration + cold-start home skeleton bvandeusen 2026-05-11 12:12:44 -04:00
  • 37134950a5 Merge pull request 'release: M5-M7 server + web + Flutter, plus Flutter v1 polish' (#38) from dev into main v2026.05.11.0 bvandeusen 2026-05-11 15:21:58 +00:00
  • f4d07ef9a1 diag(flutter): trace playlist provider — wire vs drift vs filter bvandeusen 2026-05-11 11:07:24 -04:00
  • 74cc76b369 fix(flutter): preserve dev-version safety net + update version tests bvandeusen 2026-05-11 10:48:06 -04:00
  • a65474284a fix(flutter): satisfy curly_braces_in_flow_control_structures lint bvandeusen 2026-05-11 10:36:40 -04:00
  • 2f67c26a45 fix(flutter): pubspec version must be 3-part semver bvandeusen 2026-05-11 10:31:14 -04:00
  • ab8a86e794 fix(flutter): update banner false positive + lock-screen control routing bvandeusen 2026-05-11 10:27:04 -04:00
  • 727a0760da fix(flutter): refetch album when row exists but tracks don't bvandeusen 2026-05-11 08:52:45 -04:00
  • 983a9d92be fix(flutter): tighter track row + missing artist in mini player + hide redundant artist on artist page bvandeusen 2026-05-11 08:47:50 -04:00
  • 21ab0d78bb fix(flutter): artist albums grid — 3 per row, title wraps, no overflow bvandeusen 2026-05-11 08:43:58 -04:00
  • 107abda97e fix(flutter): album/artist covers in artist detail + tighter grid bvandeusen 2026-05-11 08:39:41 -04:00
  • 2b033131e0 fix(flutter): mini player heart/kebab span title+artist height bvandeusen 2026-05-11 08:36:39 -04:00
  • f88e82a777 fix(flutter): album/artist detail covers + cacheFirst tracing for hangs bvandeusen 2026-05-11 08:35:02 -04:00
  • 3c0806d8fd diag(flutter): time-box connectivity check + trace album cold-cache path bvandeusen 2026-05-11 08:28:32 -04:00
  • 4621846ec4 fix(flutter): seed connectivityProvider with initial value (unhang detail screens) bvandeusen 2026-05-11 08:21:55 -04:00
  • d4d936ee57 fix(flutter): mini player art fills its 48dp box (BoxFit.cover) bvandeusen 2026-05-11 08:17:17 -04:00
  • b6b73fdd0c fix(flutter): live seek bar (~200ms) + breathing room above controls bvandeusen 2026-05-11 08:15:58 -04:00
  • 2a5b6970e9 feat(flutter): show album name beneath artist in full player bvandeusen 2026-05-11 08:12:29 -04:00
  • 59427bcf2f fix(flutter): full player unmounts the shell — no doubled player UI bvandeusen 2026-05-11 08:09:53 -04:00
  • 163c1174db feat(flutter): mini ↔ full player transition + flesh out NowPlayingScreen bvandeusen 2026-05-11 08:06:38 -04:00
  • 3162fedd3b fix(flutter): card taps via Material+InkWell, not GestureDetector bvandeusen 2026-05-11 07:57:10 -04:00
  • a05a279508 fix(flutter): strip duplicate status-bar inset when update banner shows bvandeusen 2026-05-11 07:52:45 -04:00
  • a3985f1138 fix(flutter): cover images — wait for token, file:// loader, graceful errors bvandeusen 2026-05-11 07:44:28 -04:00
  • 7cabe4efef fix(flutter): player bar — title visible, controls stacked, no overflow bvandeusen 2026-05-11 07:34:11 -04:00
  • d703fc27f8 fix(flutter): album/artist card tap (HitTestBehavior.opaque) bvandeusen 2026-05-11 07:30:05 -04:00
  • f65650fb6d fix(flutter): player bar layout, system playlist tap, banner height bvandeusen 2026-05-11 07:27:14 -04:00
  • 51afc992d4 fix(web): apply data-testid attrs to PlayerBar that were dropped from a8e6e1c bvandeusen 2026-05-11 00:07:52 -04:00
  • a8e6e1c2f7 fix(web,flutter): PlayerBar test scoping + system-playlists revalidate bvandeusen 2026-05-11 00:07:22 -04:00
  • 19061cd10c feat(flutter): full parity for player bar — shuffle/repeat/volume + Like + kebab + 3-column layout (#356) bvandeusen 2026-05-10 23:59:53 -04:00
  • b2d1a9ea10 fix(web): compact PlayerBar — 3-column top row, full-width seek bottom (#358) bvandeusen 2026-05-10 23:52:42 -04:00
  • fcded9294c Merge pull request 'fix(web): download button + server version display' (#37) from dev into main v2026.05.10.2 bvandeusen 2026-05-11 03:20:39 +00:00
  • c3ecd1bec8 fix: gofmt -s on version.go (tab-indent doc-comment code block) bvandeusen 2026-05-10 23:15:29 -04:00
  • 4c4399c9bb feat(server,web): expose server version via /healthz + display in Settings bvandeusen 2026-05-10 23:13:19 -04:00
  • e16bdd9546 fix(web): read snake_case keys in MobileAppDownload (#397) bvandeusen 2026-05-10 23:10:22 -04:00
  • 5054c46385 fix(web): collapse the entire Mobile app section when no APK bundled bvandeusen 2026-05-10 22:44:38 -04:00
  • 42abb7adff Merge pull request 'ci: unify REGISTRY_TOKEN + RELEASE_TOKEN into CI_TOKEN' (#36) from dev into main v2026.05.10.1 bvandeusen 2026-05-11 01:45:01 +00:00
  • e4578593d1 ci: unify REGISTRY_TOKEN + RELEASE_TOKEN into a single CI_TOKEN secret bvandeusen 2026-05-10 21:33:10 -04:00
  • 04933f2d9f Merge pull request 'M5–M7 sweep + offline cache + in-app updates + DRY pass' (#35) from dev into main v2026.05.10.0 bvandeusen 2026-05-11 01:09:36 +00:00
  • 154f415f92 fix(server,web): auth-gate client APK + version endpoints + per-user rate limit (#397) bvandeusen 2026-05-10 20:28:27 -04:00
  • 2435ef7961 feat(web): MobileAppDownload component on login + settings (#397 follow-up) bvandeusen 2026-05-10 20:23:56 -04:00
  • f6e27cd39a fix(flutter/test): isVersionNewer date-style assertion was wrong bvandeusen 2026-05-10 20:09:53 -04:00
  • f3378dd610 fix(flutter): apply Riverpod 3 NotifierProvider conversion missed in 14d7678 bvandeusen 2026-05-10 20:02:29 -04:00
  • 14d7678624 fix: CI lint errors after #397 commits bvandeusen 2026-05-10 20:01:43 -04:00
  • e57a53a92e ci(server): bundle Android APK into image on tag releases (#397 phase 3) bvandeusen 2026-05-10 19:44:08 -04:00
  • 02d9f39845 feat(flutter): in-app update banner + Android install intent (#397 phase 2) bvandeusen 2026-05-10 19:42:04 -04:00
  • a2bea8601a feat(server): /api/client/version + /api/client/apk endpoints (#397 phase 1) bvandeusen 2026-05-10 19:35:24 -04:00
  • 27f123f7d9 fix(server,flutter): sync wire format + systemVariant column (#357) bvandeusen 2026-05-10 18:47:30 -04:00
  • 0db7054518 feat(flutter): user-facing requests view + cancel (#356) bvandeusen 2026-05-10 18:08:23 -04:00
  • 861dd8ef17 feat(web): auto-poll request progress when ingests are in flight (#369) bvandeusen 2026-05-10 17:59:38 -04:00
  • 7bc254e17e feat(web): stream resilience — preload=auto, stall recovery, next-track prefetch bvandeusen 2026-05-10 17:43:41 -04:00
  • 1daf0b7fdf feat(web): close #358 invites RowActionsMenu wiring bvandeusen 2026-05-10 17:14:18 -04:00
  • 308202a1df refactor(web): extract CardActionCluster (#375 item #8 — narrowed scope) bvandeusen 2026-05-10 16:58:17 -04:00
  • 9b4f907db6 refactor(web): sweep 24 test files to use makeTrack/makeTracks fixtures (#375) bvandeusen 2026-05-10 15:58:14 -04:00
  • 993bcc6a14 fix(web/test): update playlist API tests for api.* call surface (#375) bvandeusen 2026-05-10 15:48:04 -04:00
  • 2ec54bc429 refactor(web): sweep playlist.test.ts to use emptyQuarantineMock() (#375) bvandeusen 2026-05-10 15:42:57 -04:00
  • 7e8d19606a refactor(web): sweep test files to use empty likes/quarantine mocks (#375) bvandeusen 2026-05-10 15:41:15 -04:00
  • dd67f28745 refactor(web): sweep 8 test files to use pageUrlModule() (#375) bvandeusen 2026-05-10 15:39:25 -04:00
  • 6e0223a9b1 refactor(web): runMutation helper for generic-toast admin handlers (#375) bvandeusen 2026-05-10 15:39:00 -04:00
  • 0eaaf66748 refactor(web): playlistTrackToRef helper to dedupe TrackRef reconstruction (#375) bvandeusen 2026-05-10 15:37:11 -04:00
  • 633406c05b refactor(web): safeLocalStorage helper for store persistence (#375) bvandeusen 2026-05-10 15:36:45 -04:00
  • 2357df83be refactor(web): add test-utils helpers for likes/quarantine/track/appState mocks (#375) bvandeusen 2026-05-10 15:31:53 -04:00
  • e8eff1baa1 refactor(web): migrate playlists.ts to api.* wrapper (#375) bvandeusen 2026-05-10 15:30:34 -04:00
  • 714039bae5 refactor(web): drive vite-injected theme-color from tokens.json (#375) bvandeusen 2026-05-10 15:29:48 -04:00
  • 65057473c6 refactor(web): break auth ↔ player import cycle via session-end signal (#375) bvandeusen 2026-05-10 15:29:30 -04:00
  • 94727f40bb fix(flutter): analyze errors after Plan C provider migrations bvandeusen 2026-05-10 13:04:27 -04:00
  • 98fdd9dcdf feat(flutter/cache): migrate playlist providers to drift-first (#357 plan C) bvandeusen 2026-05-10 11:27:49 -04:00
  • 08c16d6d86 fix(flutter): point like consumers at likesControllerProvider bvandeusen 2026-05-10 11:21:47 -04:00
  • 8a6c926ea7 feat(flutter/cache): migrate likedIdsProvider to drift-first; LikesController for mutations bvandeusen 2026-05-10 11:20:59 -04:00
  • fc83c7b514 feat(flutter/cache): migrate artistAlbums/artistTracks/album to drift-first bvandeusen 2026-05-10 11:19:47 -04:00
  • 947d4401a6 feat(flutter/cache): migrate artistProvider to drift-first (#357 plan C) bvandeusen 2026-05-10 11:18:59 -04:00
  • 4eb9935f8e feat(flutter/cache): cacheFirst helper + drift↔model adapters (#357 plan C) bvandeusen 2026-05-10 11:18:29 -04:00
  • 2940e95b64 fix(flutter/test): skip TrackRow smoke test under the drift cohort bvandeusen 2026-05-10 10:49:03 -04:00
  • a3db6c9453 fix(flutter/test): testWidgets skip takes bool, not String bvandeusen 2026-05-10 10:41:48 -04:00