Copyright Recommendations
Copyright Recommendations are user-submitted suggestions that a specific track is copyright-safe and should be added to the curated safe-songs catalog. Users vote or flag a track via the streamer dashboard; those submissions land in this queue with report_type = recommendation. Admins accept (promoting the track to the safe catalog, optionally into a specific Curated Playlist) or dismiss (rejecting the suggestion).
Where to find it
Admin sidebar → Recommendations (/copyright-recommendations).
Quick start
- Open Admin → Recommendations.
- Default status filter is Pending; flip to Confirmed or Dismissed to review past decisions.
- Read the song / artist / category for each row.
- Click Accept to promote to safe songs. In the dialog, optionally pick a Curated Playlist to drop the track into.
- Click Dismiss to reject the suggestion.
Detailed walkthrough
Status filters
Tabs across the top: All, Pending, Confirmed, Dismissed. Pending is the default landing state.
Recommendation rows
Each row exposes:
- Song — track title.
- Artist — track artist.
- Category — submission category (e.g.
safe). - Status — coloured badge.
- Confirmations — count of other users who upvoted the same recommendation.
- Date — submission timestamp.
Row actions (pending only):
- Accept — opens the Accept Recommendation dialog.
- Dismiss — one-click reject.
Accept Recommendation dialog
- Title: "Accept Recommendation".
- Add to curated playlist (optional) — dropdown of all curated playlists; default is None.
- Approve — POSTs to the shared approve endpoint with optional
playlist_id.
Accepting inserts the track into the safe-songs catalog and, when a playlist is selected, also appends it to that playlist's track list.
Common scenarios
- Lo-fi track submitted by community — accept and route into the
loficurated playlist. - Obvious copyrighted track mis-recommended — dismiss; the recommendation moves to the Dismissed tab.
- Duplicate suggestions — the Confirmations column reveals how many users agree. Don't accept the same track twice; the second recommendation can be dismissed.
- Batch processing — cycle through Pending, decide one by one. There is no bulk action.
Permissions
| Action | Permission |
|---|---|
| View recommendations | copyright:read |
| Accept / dismiss | copyright:edit |
Dashboard entry requires admin:access. System admins implicitly hold both.
API
Recommendations share the copyright_reports table with copyright reports, distinguished by the report_type column (recommendation vs copyright). They use the same approve / dismiss endpoints as reports.
| UI action | GraphQL | REST |
|---|---|---|
| List recommendations (filtered) | — | GET /v1/copyright/recommendations?status=... |
| Accept (with optional playlist) | — | POST /v1/copyright/reports/\{id\}/approve |
| Dismiss | — | POST /v1/copyright/reports/\{id\}/dismiss |
Tips & gotchas
- Accept is destructive-ish — the track enters the global safe catalog. Review the artist + track carefully.
- The playlist dropdown is optional. Accepting without picking a playlist still promotes the track to the catalog; it just doesn't appear in any curated playlist yet.
- Dismissed recommendations can be re-submitted by the same user later. The UI does not dedupe across time.
- Reports and recommendations share an endpoint; accepting a recommendation is implemented as "approve a report" internally.
Related
- Copyright Reports — user reports against unsafe tracks (opposite polarity)
- Copyright Review — combined vote-candidate review surface
- Curated Playlists — where accepted tracks can be routed
- Abuse Reports — reports filed against the recommendation system itself