Skip to main content

Curated Playlists

Curated Playlists are system-managed Spotify playlists of verified copyright-safe songs, grouped by genre (lofi, edm, ncs, …). Lumio streamers can pull from them via the end-user safe-songs UI. The admin view is where operators create, edit, delete, and sync these playlists with Spotify.

Where to find it

Admin sidebar → Curated Playlists (/copyright-playlists). Detail pages live at /copyright-playlists/\{id\}.

Quick start

  1. Open Admin → Curated Playlists.
  2. Click Create Playlist, pick a genre slug (e.g. lofi), give it a name (e.g. Lumio Safe - Lo-Fi), and submit.
  3. Click the row to open the detail page.
  4. Use the search bar to find safe songs already in the catalog and click Add to append tracks to the playlist.
  5. Click Sync Now to push the playlist to Spotify (or re-pull metadata). A success toast confirms the sync.

Detailed walkthrough

Columns:

  • Genre — slug, short form.
  • Playlist Name — display name.
  • Tracks — count.
  • Spotify — link to the Spotify playlist URL.
  • Last Updated — last edit / sync timestamp.
  • ActionsEdit, Delete, Sync buttons.

Create / Edit dialog fields:

  • Genre (placeholder: "e.g. lofi, edm, ncs...").
  • Playlist Name (placeholder: "Lumio Safe - Lo-Fi").

Two panels:

  1. Tracks — the current track list for this playlist. Each row has a Remove button.
  2. Safe Songs Search — lookup against the global safe-songs catalog with search box. Each match has an Add button.

Sync Now triggers a server-side reconciliation with Spotify. After success the UI shows "Sync completed successfully."

Sync semantics

Sync pushes the track list to the linked Spotify playlist via Spotify's API. If the playlist isn't linked yet (missing Spotify playlist ID), sync is a no-op until an operator runs the underlying import flow. Failed syncs surface an error toast and leave the local list intact.

Common scenarios

  • Launch a new genre playlist — create, populate with 20–50 safe songs, sync once, share the Spotify link.
  • Track request from a streamer — search the catalog; if the track exists, add it; if not, approve it first via Copyright Recommendations so it enters the safe-songs table.
  • Remove a track that turned out to be unsafe — click Remove on the detail page, then go to Copyright Reports to mark the track unsafe globally.
  • Weekly sync — ops routine: open each playlist, click Sync Now.

Permissions

ActionPermission
View playlists / detailcopyright:read
Create / edit / sync playlistcopyright:edit
Delete playlistcopyright:delete

Dashboard entry requires admin:access. System admins implicitly hold every copyright permission.

API

Playlists and their contents sit on REST endpoints under /v1/copyright/playlists/* with admin-level permission guards. GraphQL exposure is limited today; most operations are REST-only.

UI actionGraphQLREST
List playlistsGET /v1/copyright/playlists
Create playlistPOST /v1/copyright/playlists
Edit playlistPATCH /v1/copyright/playlists/\{id\}
Delete playlistDELETE /v1/copyright/playlists/\{id\}
Sync playlistPOST /v1/copyright/playlists/\{id\}/sync
List tracks in playlistGET /v1/copyright/playlists/\{id\}/tracks
Search safe songsGET /v1/copyright/safe-songs?search=...
Add track to playlistPOST /v1/copyright/playlists/\{id\}/tracks
Remove track from playlistDELETE /v1/copyright/playlists/\{id\}/tracks/\{track_id\}

Tips & gotchas

  • Genre slugs are lowercase, short, and a-z only. lo-fi and lofi are different — pick one convention and stick with it.
  • Sync Now is idempotent but not instant; it can take a few seconds on a large playlist.
  • Delete is permanent and removes the mapping only — the Spotify playlist itself is not deleted.
  • The safe-songs catalog is shared with Copyright Recommendations; approving a recommendation there is how new candidate tracks enter the pool.
  • Confirm prompt before delete: "Are you sure you want to delete this playlist?"