From 248f03495e4d5dff7ec6fd4a20c8fd8c03c65e72 Mon Sep 17 00:00:00 2001 From: Bryan Van Deusen Date: Thu, 23 Apr 2026 08:09:55 -0400 Subject: [PATCH] docs(spec): add web UI library views design Covers the three browse routes (/, /artists/:id, /albums/:id) on top of the existing /api/artists, /api/artists/{id}, /api/albums/{id}, and /api/albums/{id}/cover endpoints. Uses TanStack Query's infinite query for the artists list with Load-more pagination, reusable card and row components, and a shared delayed-skeleton pattern for cache-hit navigation feel. Co-Authored-By: Claude Opus 4.7 --- .../2026-04-23-web-ui-library-views-design.md | 320 ++++++++++++++++++ 1 file changed, 320 insertions(+) create mode 100644 docs/superpowers/specs/2026-04-23-web-ui-library-views-design.md diff --git a/docs/superpowers/specs/2026-04-23-web-ui-library-views-design.md b/docs/superpowers/specs/2026-04-23-web-ui-library-views-design.md new file mode 100644 index 00000000..a2991654 --- /dev/null +++ b/docs/superpowers/specs/2026-04-23-web-ui-library-views-design.md @@ -0,0 +1,320 @@ +# Web UI Library Views — Design Spec + +**Date:** 2026-04-23 +**Status:** Design approved +**Follows:** [Web UI Auth](2026-04-22-web-ui-auth-design.md) — this spec is the first data-consuming feature on top of the auth foundation. + +## Goal + +Let an authenticated user browse the server's music library — artists, artist detail with albums, album detail with tracks — entirely in the SPA. After this lands, `/` is a real library index, deep links like `/artists/abc-123` resolve to pages with data, and the `cover_url`/`stream_url` forward references emitted by the JSON API finally have consumers. + +## Non-goals + +Explicit YAGNI — documented so they don't drift back in: + +- No track detail page. Track metadata is already visible inline in the album view; a dedicated `/tracks/:id` page would show identical fields with no action affordances (the player plan adds playback; that's where click-to-play belongs). +- No search UI. `/search` keeps the auth plan's "Coming soon" placeholder. Search deserves its own sub-plan — different UX concerns (debouncing, faceted results, empty states). +- No playback. All track rows are non-interactive; `