This website requires JavaScript.
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 and Claude Opus 4.7
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 and Claude Opus 4.7
2026-04-24 08:57:52 -04:00
d6ea734152
docs(spec): add web UI player design
bvandeusen and Claude Opus 4.7
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 and Claude Opus 4.7
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 and Claude Opus 4.7
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 and Claude Opus 4.7
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 and Claude Opus 4.7
2026-04-23 18:16:37 -04:00
19d74d00d6
refactor(web): drop useDelayed sync-timeout hack; fix test timing instead
bvandeusen and Claude Opus 4.7
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 and Claude Opus 4.7
2026-04-23 08:18:08 -04:00
248f03495e
docs(spec): add web UI library views design
bvandeusen and Claude Opus 4.7
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 and Claude Opus 4.7
2026-04-23 06:10:29 -04:00
88961596b1
fix(web): rename route-colocated test to avoid +page.* collision
bvandeusen and Claude Opus 4.7
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 and Claude Opus 4.7
2026-04-22 17:26:37 -04:00
8a6a496c67
fix(web): drop invalid type-arg on toMatchObject in client tests
bvandeusen and Claude Opus 4.7
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 and Claude Opus 4.7
2026-04-22 15:47:23 -04:00
d53e7e2985
docs(spec): add web UI auth design
bvandeusen and Claude Opus 4.7
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 and Claude Opus 4.7
2026-04-22 12:59:22 -04:00
0ee4dfcf42
ci: install Node + build web before Go steps
bvandeusen and Claude Opus 4.7
2026-04-22 12:59:07 -04:00
d9f55df347
build: multi-stage Dockerfile with node->go->slim for embedded SPA
bvandeusen and Claude Opus 4.7
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 and Claude Sonnet 4.6
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 and Claude Opus 4.7
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 and Claude Opus 4.7
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 and Claude Opus 4.7
2026-04-21 22:02:55 -04:00
20c948a346
docs: clarify sidecar ordering and test helper extension in Plan 3 spec
bvandeusen and Claude Opus 4.7
2026-04-21 21:52:07 -04:00
7fcee05c1e
docs: add Plan 3 web UI media endpoints spec
bvandeusen and Claude Opus 4.7
2026-04-21 21:51:29 -04:00
b94b7514f9
fix(api): clamp negative offset instead of erroring + clarify duration_sec=0
bvandeusen and Claude Opus 4.7
2026-04-21 19:27:21 -04:00
db2ee3b21f
feat(api): register library + search routes under RequireUser
bvandeusen
2026-04-21 08:34:12 -04:00
683c11661b
feat(api): GET /api/search with three paged facets
bvandeusen and Claude Sonnet 4.6
2026-04-21 08:29:28 -04:00
8fb2f4e184
feat(api): GET /api/artists with alpha/newest sort and paging
bvandeusen and Claude Sonnet 4.6
2026-04-21 08:06:03 -04:00
f37fd782af
feat(api): GET /api/artists/{id} with nested albums
bvandeusen
2026-04-21 08:01:25 -04:00
c0487ecddb
feat(api): GET /api/albums/{id} with nested tracks
bvandeusen and Claude Sonnet 4.6
2026-04-21 07:43:39 -04:00
8c18e44d5b
feat(api): GET /api/tracks/{id} handler with parent metadata
bvandeusen and Claude Sonnet 4.6
2026-04-21 07:12:11 -04:00
98b4755b49
test(api): add library seed fixtures
bvandeusen
2026-04-21 00:16:24 -04:00
3855166a09
feat(api): add dbq→ref projection helpers
bvandeusen
2026-04-21 00:13:06 -04:00
e43b6f2761
feat(api): add conversion helpers for library DTOs
bvandeusen
2026-04-21 00:09:30 -04:00
c5af7bb53a
feat(api): add DTOs for library reads and search
bvandeusen
2026-04-21 00:04:51 -04:00
fb49a39492
feat(db): add paged + count queries for library reads
bvandeusen
2026-04-21 00:01:15 -04:00
62e48642e2
docs(plan): add implementation plan for library reads + search
bvandeusen and Claude Opus 4.7
2026-04-20 23:42:47 -04:00
14aa9d7fba
docs(spec): add design for library reads + search endpoints
bvandeusen and Claude Opus 4.7
2026-04-20 23:33:51 -04:00
728c852ba1
Merge pull request 'feat: web UI server auth foundation (/api/* login, logout, me)' (#14 ) from dev into main
bvandeusen
2026-04-21 02:51:45 +00:00
2324c5d576
fix(auth): silence unused-parameter lint in RequireUser test
bvandeusen and Claude Opus 4.7
2026-04-20 22:43:22 -04:00
1e5c8b5ab7
fix(api): trim whitespace from bearer token in logout
bvandeusen and Claude Opus 4.7
2026-04-20 22:32:12 -04:00
06a1fe16e0
feat(server): mount /api/* (login, logout, me)
bvandeusen and Claude Opus 4.7
2026-04-20 22:19:59 -04:00
2adf41604f
feat(api): GET /api/me
bvandeusen and Claude Opus 4.7
2026-04-20 22:11:02 -04:00
8537821d29
feat(api): POST /api/auth/logout
bvandeusen and Claude Opus 4.7
2026-04-20 22:07:16 -04:00
2f2dfa86df
feat(api): POST /api/auth/login
bvandeusen and Claude Opus 4.7
2026-04-20 21:25:52 -04:00
dc43921bcc
feat(api): package skeleton + error envelope
bvandeusen and Claude Opus 4.7
2026-04-20 20:57:09 -04:00