Applied Module 12 · AI-Powered Music Production Workflows

The Moodmix Control Room

What you'll learn

~30 min
  • Build a private browser-based analytics dashboard from CSV exports
  • Parse and visualize Spotify for Artists and Shopify data
  • Identify geographic overlaps between listeners and merch buyers
  • Generate actionable next-move recommendations from your own data

What you’re building

You have ~50K monthly listeners on Spotify. You have a Shopify store selling merch. But those are two separate dashboards with two separate mental models. You have no idea which cities are streaming your music AND buying your desk pads. You can’t easily see if a track blowing up in Chicago translates to merch sales in Chicago.

You’re going to build a single dashboard that combines both data sources and tells you exactly where the opportunities are.

💬Your data stays local

Everything in this lesson runs in your browser. Your Spotify and Shopify data never leaves your computer. There’s no server, no upload, no third-party analytics service. You open an HTML file, drag in your CSV exports, and the dashboard renders locally. When you close the tab, the data is gone. This matters when you’re working with revenue numbers and listener geography.


Getting your data

Before building the dashboard, you need two CSV exports:

Spotify for Artists

  1. Log in to artists.spotify.com
  2. Go to Music > select a time period (last 28 days works well)
  3. Click Export (top right) to download the streaming data CSV
  4. The CSV includes columns like: track name, streams, listeners, and sometimes city/country (availability varies by account level and export type — if your export lacks city-level data, the dashboard’s geographic sections will use the sample data fallback)

Shopify

  1. Log in to your Shopify admin
  2. Go to Analytics > Reports > Sales by product
  3. Export as CSV
  4. Also export Customers by location if available
💡Don't have real data yet?

If you’re just getting started and don’t have significant Spotify or Shopify data, you can still build the dashboard. The prompt below includes a “generate sample data” mode that creates realistic mock data so you can see the dashboard in action. Swap in your real CSVs when they’re ready.


The prompt

Start your AI CLI tool and paste this prompt:

Build a single self-contained HTML file called control-room.html that serves as a
private analytics dashboard for an independent music artist. It combines Spotify
streaming data and Shopify merch sales data from CSV uploads.
REQUIREMENTS:
1. DATA INPUT
- Two file upload zones (drag-and-drop + click): one for Spotify CSV, one for
Shopify CSV
- Parse CSV files client-side using PapaParse (load from CDN)
- Auto-detect column headers (Spotify and Shopify export formats vary)
- Add a "Load Sample Data" button that generates realistic mock data for both
sources so the dashboard works without real CSVs
2. DASHBOARD SECTIONS (name each section after a song-related theme):
a. "THE DROP" — Key Metrics (top of page)
- Total streams (last period)
- Total unique listeners
- Top track by streams
- Total merch revenue
- Total merch orders
- Best-selling product
b. "FREQUENCY" — Top Tracks Chart
- Horizontal bar chart showing top 10 tracks by stream count
- Use Chart.js (load from CDN)
- Orange color scheme (#f97316 primary)
c. "CITY LIGHTS" — Geographic Analysis
- Top 10 cities by Spotify listeners (bar chart)
- Top 10 cities by Shopify orders (bar chart)
- Side-by-side comparison to spot overlaps
- Highlight cities that appear in BOTH lists (these are your strongest markets)
- IMPORTANT: Normalize city names before comparing — lowercase, strip state/country
suffixes (", CA", ", US"), handle common abbreviations (NYC→New York, LA→Los Angeles,
SF→San Francisco). Spotify and Shopify format city names differently.
d. "THE GAP" — Opportunity Zones
- Table showing: cities with high streams but low/zero merch sales
- Table showing: cities with merch sales but low streams (potential ad targets)
- Each row: city, streams, merch orders, revenue, gap indicator
e. "NEXT MOVE" — Action Prompts
- Based on the data, generate 3-5 plain-language recommendations, like:
"Your top streaming city is Chicago (4,200 listeners) but you have 0 merch
orders there. Consider a targeted Instagram ad for the desk pad."
"Richmond has your highest merch-to-listener ratio (3.2%). This is your
strongest local market."
- Recommendations should use natural language, not analyst jargon
3. DESIGN
- Dark theme: background #0a0a0a, cards #141414, borders #262626, text #e5e5e5
- Accent color: #f97316 (orange) for charts and highlights
- Clean sans-serif font (Inter from Google Fonts CDN)
- Responsive grid layout -- 2 columns on desktop, 1 on mobile
- Section headers should be bold with the section name (e.g., "THE DROP")
- Dashboard title: "MOODMIX CONTROL ROOM"
4. TECHNICAL
- Pure HTML/CSS/JS in one file
- PapaParse for CSV parsing (https://cdn.jsdelivr.net/npm/papaparse@5/papaparse.min.js)
- Chart.js for visualizations (https://cdn.jsdelivr.net/npm/chart.js)
- All processing happens client-side. No data is sent anywhere.
- Data persists only during the browser session (no localStorage)
- Add a visible "YOUR DATA STAYS LOCAL" badge in the header

What you get

After your AI CLI tool finishes, you’ll have one file: control-room.html. Open it in your browser.

With sample data

Click Load Sample Data first. You should see:

  • THE DROP metrics panel with stream counts, revenue, and top track/product
  • FREQUENCY bar chart showing your top tracks ranked by streams
  • CITY LIGHTS side-by-side city charts for Spotify and Shopify
  • THE GAP tables highlighting mismatches between streaming and merch geography
  • NEXT MOVE 3-5 actionable recommendations in plain language

With your real data

  1. Export your Spotify CSV from artists.spotify.com
  2. Export your Shopify CSV from your admin
  3. Drag each file onto its respective upload zone
  4. Watch the dashboard populate with your actual numbers
The magic of geographic overlap

The most valuable insight from this dashboard is the geographic comparison. When you see that Miami has 3,000 listeners but zero merch orders, that’s a specific, actionable finding. Maybe you run a targeted ad. Maybe you price a Miami-exclusive bundle. Maybe you book a gig there. The data tells you where the gap is; you decide what to do about it.


If something is off

ProblemFollow-up prompt
CSV parsing failsThe CSV upload isn't parsing my Spotify export. The file uses semicolons instead of commas as delimiters. Add auto-delimiter detection in PapaParse config.
Charts don’t showThe Chart.js charts are blank. Make sure Chart.js is fully loaded before creating any charts. Wrap chart creation in a DOMContentLoaded handler and add error handling for the CDN load.
City matching misses similar namesThe geographic comparison isn't matching "New York" (Spotify) with "New York City" (Shopify). Add fuzzy matching that normalizes city names: strip "City", handle common abbreviations (NYC, LA, SF), and compare lowercase.
Sample data doesn’t look realisticThe sample data is too uniform. Make the streams follow a power-law distribution (top track 5x more than 10th), scatter the cities realistically across the US, and make merch orders much smaller than stream counts (typical conversion is < 0.1%).

Customize it

Add a "WAVELENGTH" section with a line chart showing streams per day over the
selected period. If the Spotify CSV includes date data, plot it as a time series.
Add a second line for merch orders per day. This shows whether release spikes
correlate with merch purchase spikes.

Add product performance breakdown

Add a "MERCH RACK" section that breaks down Shopify sales by product. Show a
donut chart of revenue by product category (t-shirts, desk pads, hats, etc.).
Below it, show a table with: product name, units sold, revenue, average order value.
Sort by revenue descending.

Export a report

Add an "Export Report" button that generates a markdown file summarizing:
- Key metrics from THE DROP
- Top 5 tracks and top 5 cities
- The 3 best opportunities from THE GAP
- All NEXT MOVE recommendations
Format it as a clean report I could send to a manager or booking agent.

Add release correlation

Add a "RELEASE RADAR" section. I'll input my release dates (as a simple JSON array).
On the streams time-series chart, add vertical markers at each release date. This
shows the impact of each release on streaming numbers -- does a new single spike
streams across the whole catalog?
🔍Why private dashboards beat third-party analytics

Services like Chartmetric, Soundcharts, and Spotify for Artists give you dashboards. So why build your own?

  • Cross-platform: No third-party tool combines your Spotify data with your Shopify data. They’re separate ecosystems. Your dashboard bridges them.
  • Custom questions: You can’t ask Chartmetric “which cities stream me but don’t buy merch?” Your dashboard answers exactly the questions you care about.
  • Privacy: Your revenue numbers, geographic data, and listener demographics stay on your machine. No uploading to yet another analytics service.
  • Free: No monthly subscription for another SaaS tool. You built it once, you use it forever.
  • Extensible: When you want a new metric or chart, it’s one follow-up prompt away. Try asking Chartmetric to add a custom section.

The tradeoff: you don’t get real-time data or API integrations. You’re working with CSV exports, which means periodic manual updates. For an independent artist checking numbers weekly, that’s perfectly fine.


🔧

When Things Go Wrong

Use the Symptom → Evidence → Request pattern: describe what you see, paste the error, then ask for a fix.

Symptom
The dashboard shows NaN or undefined for revenue numbers
Evidence
THE DROP section shows 'Total Revenue: $NaN' and the merch table has 'undefined' in the revenue column
What to ask the AI
"The revenue parsing is failing. Shopify exports revenue with currency symbols and commas (like '$1,234.56'). Strip the dollar sign and commas before parsing as a float. Use parseFloat(value.replace(/[$,]/g, '')) for all currency fields."
Symptom
The geographic comparison shows no overlapping cities
Evidence
CITY LIGHTS shows my top Spotify cities and top Shopify cities but THE GAP says there are zero overlaps, even though I know some cities appear in both
What to ask the AI
"The city matching is too strict. It's comparing exact strings but Spotify uses 'Los Angeles' while Shopify might use 'Los Angeles, CA' or 'LA'. Normalize city names: lowercase, strip state/country suffixes, and handle common abbreviations before comparing."
Symptom
The recommendations are generic and don't reference my actual data
Evidence
NEXT MOVE says 'Consider targeting your top city for merch' instead of naming the actual city and numbers
What to ask the AI
"The recommendations are generic templates instead of data-driven insights. Rewrite the recommendation logic to reference specific city names, exact stream/order counts, and calculated ratios from the actual uploaded data. Example: 'Chicago has 4,200 listeners but 0 merch orders -- consider a targeted ad campaign.'"
Symptom
File drag-and-drop doesn't work
Evidence
Dragging a CSV onto the upload zone does nothing. The zone highlights on hover but the file doesn't get processed
What to ask the AI
"The drag-and-drop event handler is missing. Add dragover (with preventDefault), dragenter, dragleave, and drop event listeners to both upload zones. On drop, read the file with FileReader and pass it to PapaParse."

Putting it all together

Over these four lessons, you’ve built the foundation of a complete toolkit:

  1. Release Asset Engine (Lesson 1) — one command generates platform-ready artwork
  2. Campaign Generator (Lesson 2) — one metadata file produces captions, hashtags, calendar, and an EPK
  3. Episode Builder (Lesson 3) — one notes file generates all YouTube publishing metadata
  4. Control Room (Lesson 4) — one dashboard shows where listeners and buyers overlap

These tools connect. The asset engine’s output feeds into the campaign generator’s EPK. The campaign calendar drives your posting schedule. The episode builder handles your YouTube content. And the control room tells you what’s working and where to focus next.


Try it yourself

  1. Open your AI CLI tool in an empty folder.
  2. Paste the main prompt.
  3. Click Load Sample Data to see the dashboard in action.
  4. If you have real Spotify and Shopify CSVs, drag them in and see your actual data.
  5. Pick one customization (time-series trends or product breakdown work well) and add it.

Key takeaways

  • CSV exports are your raw material — Spotify for Artists and Shopify both let you export data. Your dashboard turns those exports into intelligence.
  • Geographic overlap is the highest-value insight — knowing where listeners and buyers overlap (or don’t) drives real business decisions.
  • Private dashboards protect your data — no uploads, no third parties, no subscriptions. Everything runs in your browser.
  • Action prompts beat raw numbers — the NEXT MOVE section translates data into “do this next” recommendations, which is what you actually need.
  • This is the orchestrator pattern at scale — you didn’t write a charting library or a CSV parser. You directed your AI CLI tool to combine existing tools (PapaParse, Chart.js) into something specific to your needs.

KNOWLEDGE CHECK

Your dashboard shows that Austin has 2,800 Spotify listeners but zero Shopify merch orders. What does this tell you?


What’s next

In the next lesson, you’ll build The Royalty Reconciliation Tool — a CLI that ingests royalty CSVs from multiple distributors, reconciles the numbers, and flags discrepancies. Independent artists lose 10-25% of their royalties to reporting errors. This tool catches what you’d otherwise miss.