# Shanty — UI Improvement Issues Issues generated from manual testing of the Yew frontend MVP. Each is self-contained and can be copy-pasted into Gitea. --- ## Issue: Library page — show all watched artists with full discography and watch status indicators **Labels:** `enhancement`, `frontend`, `priority:high` ### Description The current Library page only shows artists that have been indexed (i.e., have files on disk). It should show ALL watched artists — even if nothing has been downloaded yet. For each artist, it should show their complete discography (all albums from MusicBrainz), with clear visual indicators of watch/download status. ### Requirements 1. **Data source**: The library page should pull from the watchlist AND the artist/album database. An artist added via "watch" should appear even with 0 files. 2. **Watch status indicators** for each level: - **Artist level**: - Full circle (●) = all albums watched - Half circle (◐) = some albums watched - Empty circle (○) = artist exists but nothing watched - **Album level**: - Checkmark (✓) = all tracks owned - Download icon (↓) = wanted/downloading - Partial icon = some tracks owned, some wanted - **Track level**: - Status badge: Wanted / Downloaded / Owned 3. **Full discography display**: When viewing an artist, show ALL albums from MusicBrainz (via the discography endpoint), not just albums that exist in the local DB. Unwatched albums should appear grayed out with a "Watch" button. 4. **Backend changes needed**: A new endpoint or modification to `GET /api/artists/:id` that returns the artist's full discography from MusicBrainz merged with local watch/ownership status. ### Acceptance Criteria - [ ] Artists added to the watchlist appear in the library even with 0 downloads - [ ] Each artist shows all their albums (from MusicBrainz), not just local ones - [ ] Watch status is visually indicated at artist, album, and track level - [ ] Clicking "Watch" on an unwatched album adds it to the watchlist - [ ] Partially-watched artists/albums have distinct visual indicators ### Dependencies - Backend: may need a combined endpoint merging MB discography with local status - shanty-search discography endpoint --- ## Issue: Search → Artist detail flow with inline watch controls **Labels:** `enhancement`, `frontend`, `priority:medium` ### Description The search experience should flow naturally: search for an artist → click their name → see a full detail page with their discography → click "Watch" on the artist or individual albums. Currently, search results are a flat table with an "Add" button, and there's no way to preview an artist before committing to watching them. ### Requirements 1. **Remove result limits** — the search page currently caps at 10 results. Remove the cap or make it much higher (50+). Add pagination if needed. 2. **Clickable artist results** — clicking an artist name in search results should navigate to a detail page showing: - Artist name, country, type (person/group), disambiguation - Full discography (fetched from MusicBrainz via `/api/search/discography/:mbid`) - Each album shows: title, year, track count - "Watch All" button for the entire artist - "Watch" button per album - If any albums are already watched, show their status 3. **This is different from the Library artist detail page** — the library page shows what you have; the search detail page shows what's available. They could potentially be the same page with different data sources, or separate pages. Either way, the search detail should work for artists not yet in the local DB. 4. **Album search results** should also be clickable, showing the album's tracklist before adding. ### Acceptance Criteria - [ ] Search returns more than 10 results (configurable or no limit) - [ ] Clicking an artist in search results shows their full discography - [ ] "Watch" buttons work inline on the detail page for artist and individual albums - [ ] Albums in search results can be previewed before adding - [ ] Already-watched items show their status on the search detail page ### Dependencies - `/api/search/discography/:id` endpoint (already exists) - May need a new "search artist detail" page/route --- ## Issue: "Set Sail" — one-click full pipeline with progress tracking **Labels:** `enhancement`, `frontend`, `backend`, `priority:high` ### Description The core value proposition of Shanty is automation: the user adds music to their watchlist and the app handles everything else. Currently this requires manually triggering 4-5 separate actions. There should be a single "Set Sail" button (or similarly pirate-themed name — "Weigh Anchor", "Hoist the Colors", "Full Speed Ahead", etc.) that runs the entire pipeline: 1. **Sync** — sync wanted items to the download queue 2. **Download** — process the download queue 3. **Index** — index newly downloaded files 4. **Tag** — auto-tag tracks that need metadata 5. **Organize** — organize tagged files into the library structure ### Requirements 1. **Backend**: Add a new endpoint `POST /api/pipeline` that: - Runs each step sequentially (sync → download → index → tag → organize) - Returns a task ID immediately - Reports progress as it moves through each phase - Can be paused/cancelled (stretch goal) 2. **Progress model**: The task should report which phase it's in and the progress within that phase: ```json { "task_id": "...", "phase": "downloading", "phase_number": 2, "total_phases": 5, "phase_progress": { "current": 5, "total": 14 }, "overall_progress": 35 } ``` 3. **Frontend**: - Prominent "Set Sail" button on the dashboard (with a fun icon — maybe a ship wheel ⎈ or pirate flag) - When running, shows a multi-phase progress view: - Phase indicator (which step we're on) - Progress bar for the current phase - Overall progress bar - Estimated time remaining (based on rate so far) - Can be started from the dashboard 4. **Smart behavior**: - Skip phases with nothing to do (e.g., if sync returns 0 new items but there are already pending downloads, go straight to download) - After completion, show a summary: "Downloaded 14 tracks, tagged 14, organized 14" ### Acceptance Criteria - [ ] "Set Sail" button on the dashboard triggers the full pipeline - [ ] Backend runs sync → download → index → tag → organize sequentially - [ ] Progress is reported per-phase with current/total counts - [ ] Frontend shows multi-phase progress visualization - [ ] Summary is displayed on completion - [ ] Pipeline handles "nothing to do" phases gracefully ### Dependencies - All existing pipeline crates (shanty-dl, shanty-index, shanty-tag, shanty-org) - Backend task system needs progress reporting enhancement --- ## Issue: Rich artist/album/track metadata — photos, bios, album art, lyrics **Labels:** `enhancement`, `post-mvp`, `frontend`, `backend` ### Description Currently the UI looks like a file manager — just tables of names and IDs. To feel like a proper music library, it should display rich metadata: artist photos, biographies, album artwork, track lyrics, and links to external profiles. This is a post-MVP enhancement but will significantly improve the user experience. ### Requirements 1. **Artist pages**: - Profile photo (from MusicBrainz → Wikimedia Commons, or from fanart.tv API) - Biography text (from Wikipedia via MusicBrainz's URL relationships, or Last.fm API) - External links: official website, social media, streaming profiles - Genre tags - Formation year, country, members (if group) 2. **Album pages**: - Album cover art (from Cover Art Archive via MusicBrainz release MBID — this API is free) - Release date, label, genre - Track listing with durations - Total album duration 3. **Track pages** (or inline on album page): - Lyrics (via external API — Genius, Musixmatch, or LRCLIB for synced lyrics) - Duration, bitrate, codec info - MusicBrainz recording link 4. **Backend work**: - Cover Art Archive integration: `https://coverartarchive.org/release/{mbid}/front-250` (free, no auth) - Artist image: MusicBrainz URL relationships → Wikimedia Commons - Bio: Wikipedia API via MusicBrainz URL relationships - Cache fetched metadata to avoid repeated API calls ### Data Sources (all free) - **Cover Art Archive** — album art via MBID (no auth, generous rate limits) - **Wikipedia API** — artist biographies (free, no auth) - **MusicBrainz URL relationships** — links to Wikipedia, social media, official sites - **fanart.tv** — artist images (free tier with API key) - **LRCLIB** — synced lyrics (free, open source) ### Acceptance Criteria - [ ] Artist pages display a photo and biography - [ ] Album pages display cover art - [ ] External links are shown where available - [ ] Cover art is cached to avoid repeated fetches - [ ] Graceful degradation when metadata isn't available (placeholder images, "no bio available") ### Dependencies - Backend: new endpoints or enrichment of existing artist/album responses - External API integrations (Cover Art Archive, Wikipedia) --- ## Issue: Consolidate action buttons — all actions accessible from dashboard **Labels:** `enhancement`, `frontend`, `priority:low` ### Description Currently, action buttons are scattered across pages: - Download sync and process buttons are on the Downloads page - Re-index, auto-tag, and organize buttons are on the Settings page All action buttons should be accessible from the dashboard as the central "command center". Keep copies on their respective pages for convenience, but the dashboard should be the one-stop shop. ### Requirements 1. **Dashboard actions section** — a card or section with all available actions: - "Sync from Watchlist" — syncs wanted items to download queue - "Process Downloads" — starts downloading queued items - "Re-index Library" — scans library directory for new files - "Auto-tag Tracks" — tags tracks missing metadata - "Organize Files" — moves files into organized structure - "Set Sail" — full pipeline (see separate issue) 2. **Keep existing button locations** — don't remove buttons from Downloads or Settings pages. Users who navigate directly to those pages should still find the relevant actions there. 3. **Visual grouping** — on the dashboard, group related actions: - "Watchlist" group: Sync - "Downloads" group: Process, Retry All Failed - "Library" group: Re-index, Auto-tag, Organize - "Pipeline" group: Set Sail ### Acceptance Criteria - [ ] All action buttons are present on the dashboard - [ ] Buttons are visually grouped by category - [ ] Existing button placements on other pages are preserved - [ ] Each button shows feedback when clicked (task started, task ID, etc.) ### Dependencies - Dashboard enhancement issue