Repository navigation
Saved artists stage 2: save artists to your Library (MAD-839, MAD-840, MAD-841) - #69
Merged
Merged
Conversation
An artist saved to your Library is personal and on no service. It's
known by its simplified name (match.Simplify), so saving it again from
another service finds the same one, and only adds that link to its refs:
hints, newest first, for opening its page.
- Saving from a room's song (itemId, artistIndex) also remembers the
room and who queued it. Autopilot's songs are nobody's.
- Pictures come from the music graph's cache (Deezer). An artist the
graph doesn't know yet is fetched in the background and filled in on
a later list.
- GET/POST /me/saved-artists and DELETE /me/saved-artists/{id}.
Guests can't save. Migration 00031 adds saved_artists.
The web lib has the queries, and artistKey, the same simplification,
so the app can tell which artists you already saved.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A star saves the artist to your Library. It sits in the now-playing sheet and on the room page beside the playlist bookmark, saving from the room's song so the Library knows where you heard it. Artist pages get a labelled Save artist button. With several artists, the star opens a list to pick from. Saving and removing toast with an Undo, which works even after the star is gone. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The Library switches between Playlists and Artists (?show=artists). Saved artists are listed newest first or A–Z, with a filter once there are many. Each shows its picture, where it was heard and who queued it. Tapping one opens the artist on the newest of its links you can use, or finds it by name. Each can be added to a discovery set or unsaved. ArtistLink takes children, so a whole row can be the link. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
madeofpendletonwool
changed the base branch from
mad-836-linked-names
to
main
October 14, 2026 02:49
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Stage 2 of Phase 13 (MAD-836): someone queues a band, you think "damn, that's good", and one tap saves the artist to an Artists section in your Library, beside your playlists.
Builds on #68 (linked names, now merged): saved artists open through its artist links.
MAD-839: Data model and API
internal/savedartistspackage and migration 00031 (saved_artists).match.Simplify), unique per user. Saving the same artist again, from another service or under another spelling, returns the existing one. It only adds that link torefs, which keeps up to 10 links, newest first, as hints for opening its page.itemIdplusartistIndex) checks you can enter the room, and remembers the room and who queued it. Autopilot songs record no one as the person who queued them./me/discover/images/artist/...proxy. If the graph doesn't know the artist yet, it's fetched in the background and filled in on a later list. Saving never waits on the network. Without the music graph, rows show an initial instead.GET /me/saved-artists(newest first).POST /me/saved-artistsreturns 201 when new, 200 when already saved.DELETE /me/saved-artists/{id}.refslink IDs aren't checked on save. They're only hints for the same user, and the app checks you can use a link before opening through it.MAD-840: Save button
artistKey, a TypeScript copy ofmatch.Simplify, tested with the same examples as the Go function, so another spelling still shows as saved.MAD-841: Library Artists section
?show=artists), so Back and links keep it. The new-playlist button only shows on Playlists.ArtistLinknow takeschildren, so a whole row can be the link.Testing
go test ./...,golangci-lint(0 issues), and webpnpm test(276), typecheck, lint and build all pass.TestSavedArtists(HTTP): saving from a song, merging across spellings and services, privacy between users, 400s and 404s, unsaving.savedartistspackage: picture fill and background warming, the cap on refs.lib/saved-artists.test.ts: key parity with Go, finding saved artists, which link opens, sorting and filtering.🤖 Generated with Claude Code