← Back to Portfolio

🎧 Beyond the Algorithm — Personal Spotify Listening Intelligence

A full-stack data platform that transforms raw Spotify export data into an interactive analytics dashboard with AI-powered genre classification, smart artist recommendations, and a conversational chatbot that knows your listening habits.

What & Why

The Problem

You listen to music every day, but there's no readily available solution to analyze your own habits. How has your taste evolved over the past two years? What's your skip rate for a specific artist? Which genres dominate your weekday mornings? What new artists should I listen to and why?

The Solution

An end-to-end analytics platform that:

  • Ingests raw Spotify streaming history and transforms it into clean, enriched datasets
  • Uses an LLM to automatically classify every artist into a genre (since Spotify's export doesn't include genre data)
  • Calculates behavioral metrics like skip rates and listening streaks
  • Surfaces smart artist recommendations — artists you haven't played recently but historically enjoy
  • Provides a fully interactive dashboard with filters, charts, artist deep-dives, and an embedded AI chatbot
  • Lets you "hide" artists from analysis with a single click (for removing unwanted or awkward listens from your data)

The Impact

  • Every stream I've ever played — filterable, sortable, and visualized in seconds
  • Genre insights that Spotify itself doesn't surface in its export data
  • Conversational access — ask "What did I listen to most in March?" and get an instant answer

How It Works

Dashboard Experience

Filter Panel (left sidebar)

Collapsible filter panel with date range picker, artist/song/genre listograms (showing top 5 with visual bars), and a skipped toggle. One-click reset button clears everything. Every filter immediately updates all metrics, charts, and tables across the dashboard.

Filter panel with artist listograms and date range picker

Spotibot — Conversational AI Agent

An embedded conversational AI that has access to your full listening ontology. Toggle it open and the stream table seamlessly collapses to make room — toggle it closed and the table reappears. Ask anything: "What genre do I listen to most on Fridays?", "When did I first discover this artist?", or "How many hours did I listen in June?" — and get grounded, data-backed answers.

Spotibot chat panel open with stream table collapsed

Metrics & Stream History

Three headline cards that update with every filter change — Total Listening Time (hours + "That's X days" context), Number of Artists, and Number of Songs — sit above the full stream history table showing date, song, album, artist, genre, and skip status.

Metrics cards with stream history table

Listening Charts

Bar chart showing play counts by artist (clickable — selecting an artist drives the detail panel). Additional time-series chart for visualizing listening patterns over time.

Bar chart with artist play count distribution

Artist Detail Drawer

Click any artist on the chart and a side panel slides in showing: artist genre, first/last listen dates, skip rate (last 90 days) with conditional color coding, play count evolution segmented by skipped vs. not-skipped, and a "Show/Hide Artist" action button — to remove unwanted or awkward artists from your analysis entirely (they get excluded from all metrics, charts, and recommendations).

Artist detail drawer with metrics and evolution chart

AI Recommendations Modal

Click "Recommend Artists ✨" in the header and the LLM (Claude Sonnet 4) receives your recent stream data and returns 3 artist recommendations with concise reasoning. Runs on-demand each time — always fresh based on your latest listening.

AI recommendation modal with 3 artist suggestions

Under the Hood

Architecture Diagram

Architecture Diagram

Data Pipeline (Pipeline Builder)

A no-code pipeline that handles:

1. Parse & Clean

Extracts from raw JSON, drops nulls and irrelevant columns (IP addresses, platform info, podcast/audiobook data).

2. Enrich

Derives timestamps to dates, weekday names, year-week IDs; converts milliseconds to hours/minutes; generates unique hash keys.

3. LLM Genre Classification

Calls GPT-4o to assign a genre to each artist based on their name alone (since Spotify's export contains no genre data).

Technology Stack

LayerTechnologyPurpose
Data SourceSpotify GDPR Export (JSON)Raw streaming history
Data PipelinePipeline Builder (no-code)Cleaning, enrichment, feature engineering
AI EnrichmentGPT-4o via Pipeline Builder LLM nodeGenre classification per artist
StorageFoundry DatasetsStructured tabular storage with full lineage
Semantic LayerFoundry OntologyObject types (Stream, Artist) with links
Backend FunctionTypeScript (Functions repo)90-day skip rate calculation
AI LogicAIP Logic (no-code)LLM-powered artist recommendations
AI AgentAIP Agent (Spotibot)Conversational data exploration
FrontendFoundry WorkshopInteractive dashboard with dark mode
ActionsFoundry Action TypesShow/Hide artist toggle