Spotify Developer Mode

OAuth path and fallback status.

Spotify can enhance MULOME when connected. If setup is missing or the token is absent, the app keeps using mocked music signals.

Env setup

Ready

Spotify

Auth status

Not connected

Spotify

Profile mode

Mock Spotify taste data

Spotify

Connection actions

Connect Spotify

Local prototype tokens are stored in an httpOnly cookie. Before production, move tokens to encrypted server-side storage, add refresh rotation, and audit consent scopes.

Available scopes

user-read-emailuser-read-privateuser-top-readuser-read-recently-playedplaylist-read-private

Mocked profile status

{
  "mode": "mocked",
  "profile": null,
  "topArtists": [
    {
      "id": "mock-kavinsky",
      "name": "Kavinsky",
      "genres": [
        "synthwave",
        "cinematic"
      ]
    },
    {
      "id": "mock-yoko",
      "name": "Yoko Kanno",
      "genres": [
        "anime",
        "soundtrack"
      ]
    },
    {
      "id": "mock-ludwig",
      "name": "Ludwig Goransson",
      "genres": [
        "score",
        "cinematic"
      ]
    }
  ],
  "topTracks": [
    {
      "id": "mock-nightcall",
      "name": "Nightcall",
      "artist": "Kavinsky"
    },
    {
      "id": "mock-tank",
      "name": "Tank!",
      "artist": "Seatbelts"
    },
    {
      "id": "mock-score",
      "name": "Rainy Night Score",
      "artist": "MULOME Mix"
    }
  ],
  "recentlyPlayed": [
    {
      "id": "mock-club",
      "name": "Club Action Pulse",
      "artist": "MULOME Mix"
    },
    {
      "id": "mock-anime",
      "name": "Training Arc Theme",
      "artist": "MULOME Mix"
    },
    {
      "id": "mock-ambient",
      "name": "Dark Room Ambient",
      "artist": "MULOME Mix"
    }
  ],
  "genres": [
    "soundtrack",
    "synthwave",
    "anime rock",
    "dark ambient"
  ],
  "listeningMoods": [
    "dark",
    "cinematic",
    "energetic",
    "nostalgic"
  ],
  "contentSignals": [
    "Prioritize crime, mystery, and shadowy character drama.",
    "Surface movies and shows with strong score identity.",
    "Boost action titles, anime battles, and fast pacing.",
    "Include retro mysteries and synth-driven stories."
  ]
}

Mock search response

[
  {
    "id": "spotify-john-wick-club",
    "source": "spotify",
    "title": "John Wick: Club Mix",
    "type": "playlist",
    "platform": "Spotify",
    "description": "Electronic and club tracks inspired by neon action scenes."
  },
  {
    "id": "spotify-atmospheric-score-radio",
    "source": "spotify",
    "title": "Atmospheric Score Radio",
    "type": "playlist",
    "platform": "Spotify",
    "description": "Cinematic tracks for dark drama, sci-fi, and focus sessions."
  }
]

Next hardening steps

Move token storage to encrypted server-side persistence.
Add refresh token rotation and expiry recovery.
Add CSRF validation backed by server session state.
Request the smallest set of scopes needed for each feature.
Add account unlinking, audit logs, and data deletion controls.
Normalize Spotify taste data into MULOME Taste DNA.