Skip to content

Rich artist, album and genre pages (MAD-763) - #53

Merged
madeofpendletonwool merged 3 commits into
mainfrom
mad-763-artist-pages
Oct 8, 2026
Merged

madeofpendletonwool merged 3 commits into
mainfrom
mad-763-artist-pages

Conversation

@madeofpendletonwool

Copy link
Copy Markdown
Owner

Phase 8 (MAD-763): artist pages that feel like a jukebox. They had a picture, a name and an album grid; now they show what's known about the artist, beyond what their service says. Design in ADR 0013.

Server

  • Notes (MAD-764): MusicBrainz artist profiles (members, genres, release groups) and album lookups (first release, labels, genres). linernotes writes artist and album page notes with Wikipedia summaries, cached in page_notes_cache. provider.Album.Kind comes from Navidrome's OpenSubsonic release types and Spotify's album_type.
  • Genres (MAD-765): musicgraph.Genre returns a tag's top artists from Last.fm tag.getTopArtists, cached in musicgraph_tags. Without Last.fm, it uses the cached artists that carry the tag.
  • artistpage package: top songs matched onto the link (one search, then a few lookups), falling back to the service's top tracks or its search order. Also appearances, similar artists and songs by them, a genre's artists, shuffle across albums, and the same artist on another link.
  • New endpoints: GET /links/{id}/artists/{artistId}/{about,tracks,related,shuffle,elsewhere}, /links/{id}/albums/{albumId}/about, /links/{id}/genre?name=, /rooms/{roomId}/artist-plays?name=. AlbumResult gains kind.
  • Migration 00022_artist_pages.sql.

Web

  • Artist page: facts, genre chips, "Add top 5", Shuffle, links to the artist on your other services, bio, top songs, "Popular in ", discography split into Albums / Singles & EPs / Live / Compilations with other services' albums merged in, appears on, similar songs, fans also like, members.
  • Genre page: /genre/$linkId?name=.
  • Album page: kind, first release, labels, genres, Wikipedia summary, more by the artist.

Testing

  • go test ./... and golangci-lint are clean. Web: typecheck, oxlint and vitest (175 tests) pass.
  • New tests: MusicBrainz profile and album lookups, artist notes, Navidrome album kinds, genres, artistpage against the fake provider, API integration (about, tracks, related, shuffle, elsewhere, album about, room artist plays), stats.ArtistTop, and the web discography helpers.
  • Ran the built app with the fake provider and checked the artist, album and genre pages in headless Chromium.

Notes

  • Genre pages are thin without SYNCPHONY_LASTFM_KEY.
  • Artists are matched to MusicBrainz by name, so a common name can pick up the wrong bio, as liner notes can.
  • Lyrics previews are out of scope.

🤖 Generated with Claude Code

madeofpendletonwool and others added 3 commits October 7, 2026 15:30
The knowledge behind richer artist and album pages.

- musicbrainz: Profile reads an artist with their members (someone who
  left and came back listed once), curated genres and release groups.
  FindAlbum finds an album's release group by artist and title, ignoring
  edition notes, with its first release, labels (first edition's first),
  genres and Wikipedia links. Kind names a release: album, single, ep,
  compilation or live.
- linernotes: Artist and Album write page notes (bio from Wikipedia,
  "Formed in Leeds in 1994", "Split up in 2012", members with years and
  roles, genres, release kinds; an album's type, labels and summary),
  cached in page_notes_cache like songs' notes.
- provider.Album gains Kind, from Navidrome's OpenSubsonic release types
  and Spotify's album_type.
- musicgraph: Genre returns a tag's top artists from Last.fm's
  tag.getTopArtists (a new TagSource), cached in musicgraph_tags, or else
  the cached artists carrying the tag, kept briefly.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…s (MAD-766..771)

- stats.ArtistTop tallies an artist's most played songs in a room.
- artistpage fills artist and genre pages through one link: top songs
  from the music knowledge layer matched onto the link (one search for
  the artist's songs, then a few lookups), else the service's top
  tracks, else its search order; songs on others' albums they're
  credited on; similar artists found on the link with a few songs each;
  a genre's artists, those on the link first; shuffles across albums;
  and the same artist on another link.
- New endpoints: GET /links/{id}/artists/{artistId}/about (bio, facts,
  members, genres from MusicBrainz then strong tags, kinds of albums the
  service doesn't say), /tracks, /related, /shuffle, /elsewhere;
  /links/{id}/albums/{albumId}/about; /links/{id}/genre?name=; and
  /rooms/{roomId}/artist-plays?name= (stats.ArtistTop).
- AlbumResult gains kind. Server gains Graph, set when a music
  knowledge source is on.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Artist page: about line, began/ended facts and genre chips, "Add top
  5" and Shuffle, links to the artist on your other services, the
  Wikipedia bio (tap to expand), top songs, the artist's most played
  songs in the current room, the discography split into Albums,
  Singles & EPs, Live and Compilations (other services' albums merged
  in, tagged), songs they appear on, similar songs, "Fans also like"
  (artists not on the service open a search), and members.
- Genre page (/genre/$linkId?name=): its artists, those on the service
  first, and songs by them.
- Album page: release kind, first release and labels, genre chips, the
  Wikipedia summary, and more by the artist.
- ADR 0013.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@madeofpendletonwool
madeofpendletonwool merged commit bb76b06 into main Oct 8, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant