This website requires JavaScript.
457b94005f
feat(web): add /library/liked page with three sections
bvandeusen
2026-04-26 17:08:06 -04:00
de5320a7b4
feat(web): wire LikeButton into TrackRow, AlbumCard, ArtistRow, PlayerBar
bvandeusen
2026-04-26 16:56:07 -04:00
6ab1fef07e
feat(web): add LikeButton component
bvandeusen
2026-04-26 16:47:51 -04:00
dd2b9318a0
feat(web): add likes TanStack Query helpers + mutations
bvandeusen
2026-04-26 16:46:39 -04:00
c7f4adbcc3
feat(subsonic): add getStarred and getStarred2 handlers
bvandeusen
2026-04-26 16:45:04 -04:00
32fb3fec20
feat(subsonic): add /rest/star and /rest/unstar handlers
bvandeusen
2026-04-26 16:43:20 -04:00
61d96bb288
feat(api): add /api/likes/{tracks,albums,artists} endpoints
bvandeusen
2026-04-26 16:23:04 -04:00
780beaa248
feat(db): add M2 likes schema (general_likes, _albums, _artists)
bvandeusen
2026-04-26 16:20:08 -04:00
a3c05aeb34
docs(plan): add M2 likes implementation plan
bvandeusen
2026-04-26 15:52:42 -04:00
f91257a79e
docs(spec): add M2 likes sub-plan design
bvandeusen
2026-04-26 15:44:45 -04:00
e7896318b4
Merge pull request 'feat: player + search + M2 events foundation' (#19 ) from dev into main
bvandeusen
2026-04-26 15:51:52 +00:00
6ff00ea24d
feat(web): mount useEventsDispatcher() in root layout
bvandeusen
2026-04-26 09:44:16 -04:00
b6f8a0c390
feat(web): events dispatcher posts to /api/events on player transitions
bvandeusen
2026-04-26 09:42:11 -04:00
599a19f780
feat(subsonic): wire /rest/scrobble into playevents.Writer
bvandeusen
2026-04-26 00:23:20 -04:00
f4e73b81b4
feat(api): add POST /api/events handler
bvandeusen
2026-04-26 00:12:06 -04:00
0c7e1b0408
feat(playevents): add Writer with start/end/skipped/synthetic paths
bvandeusen
2026-04-25 22:32:33 -04:00
73d3962fff
feat(playsessions): add FindOrCreate session service (30-min rolling window)
bvandeusen
2026-04-25 22:30:12 -04:00
722a6784a7
feat(config): add events section (session timeout + skip rule thresholds)
bvandeusen
2026-04-25 20:46:23 -04:00
4fcf2c9616
feat(db): add M2 schema — play_sessions, play_events, skip_events
bvandeusen
2026-04-25 20:45:44 -04:00
7df48ee9bc
docs(plan): add M2 events sub-plan implementation plan
bvandeusen
2026-04-25 19:56:58 -04:00
f3b28db9d1
docs(spec): add M2 events sub-plan design
bvandeusen
2026-04-25 19:39:16 -04:00
7fff293054
feat(web): add three search overflow pages
bvandeusen
2026-04-25 16:19:09 -04:00
e55520dab6
feat(web): /search page with three sections + see-all overflow links
bvandeusen
2026-04-25 16:16:55 -04:00
ad9c984b62
feat(web): mount SearchInput in Shell header
bvandeusen
2026-04-25 16:12:19 -04:00
3be0dc241c
feat(web): add SearchSkeleton placeholder for the search page
bvandeusen
2026-04-25 16:12:19 -04:00
251d165e0b
feat(web): add SearchInput header component (debounced URL sync)
bvandeusen
2026-04-25 16:01:25 -04:00
a4a5a20308
feat(web): AlbumCard + queue overlay button
bvandeusen
2026-04-25 15:54:18 -04:00
80b39f1713
feat(web): TrackRow div+role button with onPlay prop and + queue button
bvandeusen
2026-04-25 15:37:11 -04:00
7eb051c6f7
feat(web): add search query helpers (summary + 3 facet infinite queries)
bvandeusen
2026-04-25 15:30:06 -04:00
7dd77a4723
feat(web): add enqueueTrack, enqueueTracks, playRadio to player store
bvandeusen
2026-04-25 15:22:03 -04:00
8e80b6e0de
feat(web): add SearchResponse and RadioResponse types
bvandeusen
2026-04-25 15:02:56 -04:00
1e66910823
feat(api): add /api/radio stub returning the seed track only
bvandeusen
2026-04-25 15:01:39 -04:00
8fd193e186
docs(plan): add web UI search implementation plan
bvandeusen
2026-04-25 14:59:08 -04:00
3588af83e5
docs(spec): add web UI search design
bvandeusen
2026-04-25 14:49:01 -04:00
4264ecf538
fix(web): trigger audio.play() during 'loading' state, not only 'playing'
bvandeusen
2026-04-24 22:12:34 -04:00
571eb2ec53
feat(web): mount <audio> at root layout and wire it to the player store
bvandeusen
2026-04-24 21:43:03 -04:00
ccef9be2d3
feat(web): add PlayerBar slot to Shell
bvandeusen
2026-04-24 21:42:10 -04:00
ed082226a0
feat(web): add PlayerBar component
bvandeusen
2026-04-24 21:41:24 -04:00
4bff8cc99a
feat(web): make TrackRow click-to-play; pass tracks+index from album page
bvandeusen
2026-04-24 21:39:34 -04:00
4189ef9899
feat(web): add MediaSession glue for OS media controls
bvandeusen
2026-04-24 21:03:01 -04:00
1476d5081b
feat(web): add shuffle, repeat, and audio-event reporting to player store
bvandeusen
2026-04-24 17:56:00 -04:00
431f333e41
feat(web): add player rune store with basic actions
bvandeusen
2026-04-24 17:54:07 -04:00
7c19fe8a6a
docs(plan): add web UI player implementation plan
bvandeusen
2026-04-24 08:57:52 -04:00
d6ea734152
docs(spec): add web UI player design
bvandeusen
2026-04-24 08:50:58 -04:00
3ee1295e99
Merge pull request 'feat: web UI library views — artists / artist detail / album detail' (#18 ) from dev into main
bvandeusen
2026-04-24 02:05:23 +00:00
9b67bb7521
fix(web): restore album-page back link; loosen test matchers
bvandeusen
2026-04-23 20:52:28 -04:00
9d28c9d9de
feat(web): add album detail page at /albums/:id
bvandeusen
2026-04-23 20:21:50 -04:00
f9b02c4051
docs(plan): Task 13 — match the type-safety fixes applied in Task 12
bvandeusen
2026-04-23 20:13:20 -04:00
2e49335aab
feat(web): add artist detail page at /artists/:id
bvandeusen
2026-04-23 20:12:57 -04:00
25d44a180c
docs(plan): update Tasks 12/13 to unwrap TanStack Query's Readable store
bvandeusen
2026-04-23 20:01:46 -04:00
5174b093b9
feat(web): replace / placeholder with real artists list
bvandeusen
2026-04-23 19:43:37 -04:00
f94bf26f02
feat(web): add ApiErrorBanner retry-capable error card
bvandeusen
2026-04-23 18:42:22 -04:00
9ed8e261d4
feat(web): add LibrarySkeleton with list/grid/album variants
bvandeusen
2026-04-23 18:41:32 -04:00
12d1cb739b
feat(web): add TrackRow component
bvandeusen
2026-04-23 18:40:40 -04:00
e9b482da0c
feat(web): add AlbumCard component
bvandeusen
2026-04-23 18:39:42 -04:00
a1252c1ef4
feat(web): add ArtistRow component
bvandeusen
2026-04-23 18:18:52 -04:00
ce6b79ec95
feat(web): add TanStack Query helpers for library endpoints
bvandeusen
2026-04-23 18:17:34 -04:00
4cd67405c9
docs(plan): update useDelayed task to match .svelte.test.ts convention
bvandeusen
2026-04-23 18:16:37 -04:00
19d74d00d6
refactor(web): drop useDelayed sync-timeout hack; fix test timing instead
bvandeusen
2026-04-23 18:16:22 -04:00
6ca877b3ad
feat(web): add useDelayed rune helper
bvandeusen
2026-04-23 17:23:23 -04:00
828273a78f
feat(web): add cover URL helper + fallback SVG data URL
bvandeusen
2026-04-23 08:23:59 -04:00
7345625ecd
feat(web): add formatDuration helper
bvandeusen
2026-04-23 08:23:22 -04:00
d15995d19e
feat(web): add library API types mirroring internal/api/types.go
bvandeusen
2026-04-23 08:22:33 -04:00
ea17be9d45
docs(plan): add web UI library views implementation plan
bvandeusen
2026-04-23 08:18:08 -04:00
248f03495e
docs(spec): add web UI library views design
bvandeusen
2026-04-23 08:09:55 -04:00
bb3c5d7649
Merge pull request 'feat: web UI auth — login page, session store, Shell, TanStack Query' (#17 ) from dev into main
bvandeusen
2026-04-23 11:22:52 +00:00
048663a4c8
feat(web): wire root layout — bootstrap, guard, Shell, QueryProvider
bvandeusen
2026-04-23 06:11:43 -04:00
fe410f14eb
docs(plan): correct login test filename to avoid route walker collision
bvandeusen
2026-04-23 06:10:29 -04:00
88961596b1
fix(web): rename route-colocated test to avoid +page.* collision
bvandeusen
2026-04-23 06:10:11 -04:00
78f69b8736
feat(web): add login page with returnTo support and typed error UX
bvandeusen
2026-04-23 02:41:44 -04:00
d2d5d18e74
feat(web): add Library/Search/Playlists placeholder pages
bvandeusen
2026-04-22 22:22:11 -04:00
e1504f8e6c
feat(web): add Shell component with header, sidebar, and user menu
bvandeusen
2026-04-22 22:20:18 -04:00
7a6aa50693
feat(web): auto-logout on 401 inside apiFetch
bvandeusen
2026-04-22 17:29:36 -04:00
07b5912fae
feat(web): add rune-based auth store with bootstrap/login/logout
bvandeusen
2026-04-22 17:28:10 -04:00
12bf873f39
docs(plan): fix invalid toMatchObject<T> type-arg in auth plan
bvandeusen
2026-04-22 17:26:37 -04:00
8a6a496c67
fix(web): drop invalid type-arg on toMatchObject in client tests
bvandeusen
2026-04-22 17:26:15 -04:00
4591618e7b
feat(web): add TanStack Query client singleton
bvandeusen
2026-04-22 16:20:31 -04:00
37e5539e5a
feat(web): add api.{get,post,del} typed facade over apiFetch
bvandeusen
2026-04-22 16:04:25 -04:00
4d1a7f8b93
feat(web): add apiFetch with typed error envelope
bvandeusen
2026-04-22 15:56:15 -04:00
e31242b57f
feat(web): add api client types (User, LoginResponse, ApiError)
bvandeusen
2026-04-22 15:55:00 -04:00
d0015d3638
build(web): add TanStack Query + Testing Library deps
bvandeusen
2026-04-22 15:51:35 -04:00
0b5c4a13bf
docs(plan): add web UI auth implementation plan
bvandeusen
2026-04-22 15:47:23 -04:00
d53e7e2985
docs(spec): add web UI auth design
bvandeusen
2026-04-22 15:40:07 -04:00
5e4c45932c
Merge pull request 'feat: web UI scaffold with embedded SPA and multi-stage Docker build' (#16 ) from dev into main
bvandeusen
2026-04-22 18:23:01 +00:00
207798b667
docs: document two-process dev workflow with Vite proxy
bvandeusen
2026-04-22 12:59:22 -04:00
0ee4dfcf42
ci: install Node + build web before Go steps
bvandeusen
2026-04-22 12:59:07 -04:00
d9f55df347
build: multi-stage Dockerfile with node->go->slim for embedded SPA
bvandeusen
2026-04-22 12:58:29 -04:00
75ce65c80e
feat(server): serve embedded SPA at root with /api,/rest carve-out
bvandeusen
2026-04-22 10:31:30 -04:00
8fe4a5f578
refactor(web): move embed package to web/ so go:embed reaches build/
bvandeusen
2026-04-22 10:29:31 -04:00
d5692a73ca
feat(web): embed SvelteKit build output with SPA fallback handler
bvandeusen
2026-04-22 10:26:36 -04:00
8d88a76dbf
test(web): add Vitest smoke test and jsdom config
bvandeusen
2026-04-22 09:30:08 -04:00
86b024dc47
feat(web): scaffold SvelteKit SPA with Tailwind + adapter-static
bvandeusen
2026-04-22 09:26:36 -04:00
feb3f5bbd8
Merge pull request 'feat: /api/* library reads, search, and media endpoints' (#15 ) from dev into main
bvandeusen
2026-04-22 03:02:28 +00:00
8600b253fd
style: gofmt fixes across api package
bvandeusen
2026-04-21 23:02:20 -04:00
63d3e234d9
feat(api): register cover + stream routes under RequireUser
bvandeusen
2026-04-21 22:48:45 -04:00
3656461b20
feat(api): GET /api/tracks/{id}/stream with Range support
bvandeusen
2026-04-21 22:44:48 -04:00
945b773cbd
feat(api): GET /api/albums/{id}/cover with sidecar fallback
bvandeusen
2026-04-21 22:37:53 -04:00
5af6d7fac6
docs(api): document intentional audioContentType divergence from subsonic
bvandeusen
2026-04-21 22:35:29 -04:00
c799e5c1c9
feat(api): scaffold media helpers for cover + stream endpoints
bvandeusen
2026-04-21 22:30:25 -04:00
8da51a1d13
docs: add Plan 3 web UI media endpoints implementation plan
bvandeusen
2026-04-21 22:02:55 -04:00