Spotify connection & privacy

Last updated: 13 October 2026. This optional integration is operated by Nishad Dawkhar on nishad.ai, not endorsed by Spotify. Contact: nishad.dawkhar94@gmail.com.

Before you connect

Choosing "Agree & continue to Spotify" takes you to Spotify to approve read-only access to your top tracks and artists (the user-top-read scope). The optional timeline adds user-read-recently-played through spotify connect timeline. We do not request your email, profile, playlists, playback control, or permission to change your account. This integration is not intended for children.

Where data goes

Your browser talks directly to accounts.spotify.com for authorization and refresh, and api.spotify.com for top items/recent plays. Spotify receives these requests under its privacy policy. Selecting a music link opens Spotify. Nothing goes to AI automatically. GitHub Pages serves the static UI; the optional AI service is separate.

Every AI report requires a separate confirmation and an exact music-data preview. The default site route sends artist/track names, available artist genres, and range labels through a Cloudflare Worker and tunnel to Qwen running through llama.cpp on the operator's Mac. This is not inference in your browser. Cloudflare carries the requests and the Mac processes the prompt; no OpenAI API or API key is used on this route. The gateway applies daily request limits and one-request concurrency. Its diagnostic logs contain request status, completion/error status, timing and token counts, not prompts or generated text.

When the site route is disabled and you explicitly choose BYOK, those same previewed fields go directly to OpenAI gpt-4o using your key. Spotify tokens, IDs, play timestamps, and your OpenAI key are excluded from both routes' prompts. OpenAI receives the BYOK key only as API authorization and may retain/process requests under its API data policies. Consent does not override Spotify's restrictions below. Requests already sent cannot be recalled by disconnecting or cancelling.

The BYOK key remains in localStorage until lockdown or Remove AI key; Spotify disconnect does not delete that separately supplied key. BYOK reports use the existing spend HUD and $0.50 best-effort cap; set an account-level OpenAI budget. Mac-hosted Qwen does not charge per token through OpenAI, but requests consume compute and daily quota. The small browser-local WebLLM model is not used for music reports. Failed, incomplete, or unconfirmed responses never produce invented replacement fields.

GitHub Pages serves the static site and the OAuth callback. Like any OAuth redirect, the initial callback request contains a temporary authorization code and state and may appear in hosting/browser network records. The callback immediately removes query parameters from the address bar before loading its module; it sends no referrer. This site does not log those values, store them in terminal history, or put them in share links. Never share a callback URL before it has been cleaned.

Storage & retention

PKCE verifier and state stay in this tab's sessionStorage for one login attempt (valid for 10 minutes). They are removed when the callback is consumed or you disconnect. Access and refresh tokens also stay in sessionStorage so reload works; never in localStorage. Access expiry triggers one refresh attempt on your next request, not background polling. Top-item results stay only in page memory until replaced, cleared, reloaded, or disconnected. We do not cache responses or store listening history on a server.

Session storage normally ends when the tab closes, but browser tab restoration or duplication can preserve/copy it. Scripts on this origin can access it. Use disconnect on shared devices; do not rely on closing a tab as revocation.

Generated reports remain as interactive HTML in this page. The Music view does not create or upload a report file. Results disappear when replaced, reloaded, or disconnected.

Disconnect or revoke

Type spotify disconnect or choose Spotify disconnect in the command palette. This cancels in-flight Spotify requests, clears this tab's tokens and pending login, and removes displayed Spotify results. Disconnect any other open/copied tabs separately. To revoke access for all tabs, remove this app in your Spotify account's Apps settings. The site cannot revoke the account-level grant through the Web API.

Experimental POC and Spotify permission prerequisite

Spotify's Developer Policy sections III.13 and III.14 prohibit content analysis/user profiling and ingestion into AI models, including local models. The experimental personality, inferred genres, Music MBTI, tarot, shuffle roast, mood timeline, and comparison features carry this contractual/deployment risk, just as the standalone POC does. Resolve permission with Spotify before compliant live use or deployment. The checkbox records your confirmation of that prerequisite (or synthetic test use), not a Spotify exemption or a claim that consent makes the processing compliant.

All generated personality labels, genre guesses, scores, tarot, and moods are explicitly fictional entertainment: not real psychology, standard MBTI, mental-health inference, measured audio features, or Spotify popularity. Timeline labels guess the song's vibe, never your emotional state. Past-vs-now compares overlapping limited top-item samples, not all-time history or proof that you stopped listening to an artist. No audio-features or enrichment endpoint is called.

Return to the terminal