Selected work

Turning Instagram Explore into a Spotify playlist

I designed and built a Chrome extension that keeps the songs I hear while scrolling Explore, and turns them into a playlist.

Role
Designer and builder, solo, with AI
Organization
Independent
When
Sep 2026 to now, in Chrome Web Store review
Platform
Chrome extension (side panel) and Spotify
The extension's side panel in its light look, listing songs found on Explore, beside the line "Every song from your Explore feed, one click from Spotify".
  1. 01Some of the best new music I hear is in the background of Instagram Explore posts, and by the time I've scrolled on, it's gone.
  2. 02I designed and built a side panel that lists those songs as I scroll, plays them in place, and sends the ones I like to Spotify.
  3. 03Privacy and no automation were design constraints from the start: no server, no account, no requests to Instagram, nothing done on my behalf.
  • problem framing · my own
  • interaction design
  • prototyping
  • building with AI · Claude Code
  • automated browser tests
  • store listing and privacy policy

The song was gone by the time I looked for it

Explore is where I hear music I wouldn't find anywhere else. But a post plays for a few seconds, I scroll on, and finding the song again means digging back for the post and searching Spotify by hand.

I wanted the list to build itself while I scroll: nothing to tap, nothing to copy.

Private by design, and never acting for me

I set the rules before writing anything. No server, no account, no analytics. The list stays in the browser, and the only service it talks to is Spotify, through the person's own account.

No automation either. You scroll Explore yourself; the extension never scrolls, clicks, likes, follows or posts. It makes no requests of its own to Instagram and never asks for an Instagram login.

That ruled out the easy routes, and it shaped everything that followed.

Store screenshot listing four promises: nothing is collected, no automation, no requests to Instagram, and only your own Spotify.
The constraints became the product's promises, word for word, in the store listing.

Reading what Instagram has already loaded

Instagram's web app already fetches post data as you scroll, and that data names the song. The extension reads those responses in the page, keeps the songs from Explore, and links each one back to its post.

The details took the most iteration. The first screen of Explore arrives inside the page itself, not as a request, so early builds missed it. Explore also loads parts of the home feed, which had to be kept out. Each fix came from my own sessions and a debug export I built into the panel.

Play it in the panel, keep what you like

Each song is matched on Spotify, preferring the original over remixes, live versions and covers. Matching only on whole words stopped it picking "Song 1" for "Song 10".

Songs play right in the panel with Spotify's own player, or in a small window that stays on top. Untick the ones you don't want and send the rest to a playlist in one click, or turn on auto-add and new finds go straight in. When Spotify doesn't have a song, the panel offers a YouTube search, just to hear it.

The layout changed more than the colours

The prototype tried to show everything it heard: tabs for licensed songs and creators' original audio, a checkbox to limit it to Explore, and a count of how many posts each song turned up in. The tabs and the checkbox turned out to be noise. The rebuild kept songs from Explore only and dropped both; the post count stayed, shown only when a song turns up more than once.

That left one long list with the playlist controls at the bottom, and the Spotify connection in a fold-out at the top. Using it every day showed the next problem: the thing you act on was the furthest away. So the playlist moved to the top and stays pinned while the list scrolls, and the Spotify connection moved to its own Settings screen.

Then the playlist block was reordered around the main action, Add first, and the rows started saying what the button would do: a "New" mark on songs it would add, a green check on songs already in the playlist, and select all or none above the list.

Five versions of the side panel: the prototype with Songs and Original audio tabs and post counts; Oct 5 with playlist controls at the bottom; Oct 10 with the playlist pinned on top; Oct 10 with the Add button first and New marks; and the shipped light version with each song as a card.
Five builds, from the prototype to the shipped panel, rendered from the code at each step with the same sample songs.

Then four looks for the same layout

With the layout settled, I explored four looks on one canvas, each with the same songs and controls so only the styling changed: Night Deck, Daylight, Plum and Coral, and Mono.

This round was about type, colour and shape: corner radii, how the player sits, and whether each song is a row or its own card.

Four versions of the same side panel: Night Deck (black and lime), Daylight (cool grey and cobalt), Plum and Coral (purple and coral), and Mono (black, amber, monospace).
The four directions, side by side. Daylight was picked.

Daylight shipped, and navy stayed as the dark theme

I picked Daylight: a cool grey ground, white cards, a cobalt accent and Manrope. It changed shapes as well as colours. The player and playlist sit in a white card, and each song is its own bordered card.

The navy look stayed on as the dark theme. Settings offers Light, Dark, or follow the system, which is the default.

The shipped light panel: a new-playlist card with a cobalt Create button, and a list of song cards with play buttons.
Light, as shipped.
The shipped dark panel: Add 3 new songs to an existing playlist, with ticked, unticked and already-added songs in the list.
Dark, as shipped, adding new finds to a playlist.

Designing around Spotify's limits

Spotify only lets a developer app have five users, so a shared app couldn't work for anyone else. Each person makes their own free Spotify app instead.

That's a developer task, so I turned it into a short guided walkthrough. The extension fills in Spotify's form for you and reads back the details it needs. It never accepts Spotify's terms or saves the form on your behalf.

First step of the setup walkthrough: "Scroll Explore as usual", with a small drawing of the Explore grid and the panel.
Step one of four. The walkthrough explains how it works before asking for anything.

Public on GitHub, waiting on the Chrome Web Store

The code is public, with a privacy policy that says exactly what's stored and where. A store build is submitted and waiting on review.

I designed it, built it with AI, wrote the tests that drive a real Chrome, and wrote the listing. It's the kind of product loop I like to stay close to: notice a small frustration, set the constraints, ship something real.