Navigation
WorkAboutGet in touch

© 2026 Alfonso Barreiro

← Back to work
Concept · 2025 · Self-directed

Pin. Remove. Pause.

Three reversible controls for Spotify’s Recently Played shelf. Each one completes in one or two taps. None touch the recommendation engine.

Feature designInteraction modelConstraint mappingReversible by default

Self-directed concept. Recently Played is one of Spotify’s highest-traffic surfaces and one of its least controllable. This case study designs three additive, reversible controls without rebuilding the shelf or breaking the recommendation engine.

Long-press an item on the Recently Played shelf; the action sheet opens with Pin to top, Remove from Recently Played, and Pause Listening History.

For power users · additive · reversible

Three controls for the shelf people use every day.

Spotify’s Recently Played is one of the best surfaces in consumer music. For power users on shared screens, family devices, and one-off plays, three lightweight controls add the lever they keep reaching for. All reversible, all native to the shelf, none touch the recommendation engine.

Pin

Keep a favorite at the front. Max four.

Remove

Hide a play without deleting it. Undo for five seconds.

Pause

Stop the shelf from logging. Time-boxed only.

“The shelf records every play and orders by recency. That’s the entire interaction model. People are reaching for affordances that don’t exist yet.”

Contextual friction

Where the shelf gets in the way.

Four predictable pain points that show up when Recently Played doesn’t behave the way the user’s context expects.

  • Items listened to once persist far longer than expected, cluttering the shelf and misrepresenting what users actually care about.
  • No quick way to undo or remove an item, especially when an accidental tap, short preview, or one-off experiment lands on the shelf.
  • Limited transparency around how actions shape personalization, weakening trust in Spotify's recommendations.
  • No lightweight way to pause or snooze activity during shifting contexts (shared home, guests, family visits, borrowed devices, etc.).
01

The problem.

Recently Played sits at the top of every Home feed and updates automatically from listening history. Always visible, on your screen and on anyone else’s. The shelf records every play and orders by recency. That’s the entire interaction model. Workarounds exist: community forums document users playing a track for one second and force-quitting to push it to the top. That behavior is signal. People are reaching for affordances that don’t exist yet.

What users said

The signal was in the open.

No internal data, no brief. The research layer was built from public sources: Spotify Community threads, App Store reviews, Reddit, UX forum posts. AI-assisted clustering on 200+ posts surfaced six quotes that made the design unavoidable.

Recently Played is literally the ONE AND ONLY feature of the app I use.

Reddit, Oct 2024

I'd play 1 second of a track so it would show in Recently Played.

Spotify Community, 2020

That annoyed me so much I left Spotify.

Reddit, Jul 2023

Listening history is like a diary of my music journey.

Spotify Community, 2021

Apple Music lets you clear listening history. Spotify should too.

App Store, 2023

Why hasn't Spotify added a clear history option yet?

Spotify Community, Jun 2020

Melodic Melanie persona portrait

Primary persona

Melodic Melanie

The social-pressure case. Pin to surface favorites she'd share, Remove to clear plays she wouldn't.

Ranger Dave persona portrait

Secondary persona

Ranger Dave

The time-pressure case. 45 minutes on BART. If a control takes more than two steps, he won't use it.

Stephen Tan persona portrait

Negative persona

Stephen Tan

The boundary case. He doesn't engage with the shelf. If the design started serving Stephen, the feature would be too broad.

Competitive audit

Five categories.
One open slot.

Heuristic audit across seven listening platforms. Apple Music, Amazon Music, and YouTube Music all ship at least one shelf-level control. TikTok and YouTube treat the feed as inline-editable by default. Spotify ships none. The pattern is in the open.

YouTube Music reference screen captured for the competitive audit.
YouTube Music
Apple Music reference screen captured for the competitive audit.
Apple Music
TIDAL reference screen captured for the competitive audit.
TIDAL
Amazon Music reference screen captured for the competitive audit.
Amazon Music
Deezer reference screen captured for the competitive audit.
Deezer
SoundCloud reference screen captured for the competitive audit.
SoundCloud
PlatformClear allPause historyRemove singleInline controlsReversible
YouTube MusicLimited
Apple Music
Amazon Music
TikTok / YouTuben/an/an/a
Spotify (today)
Spotify (proposed)

Spotify today: no per-item control of any kind. The proposed row shows the three new controls (plus a settings-level Clear All, scoped out of this case study).

User journey

Where the controls land.

One-frame journey across the Recently Played shelf. Peaks and valleys mapped against the three opportunity points where Pin, Remove, and Pause each earn their slot.

User journey map — Recently Played shelf with the three opportunity points called out.
Sketches & mid-fi

From paper to pixels.

Five interaction directions sketched on paper before any Figma frame. The winning direction survived three tests: does it preserve discovery, is it reversible, does it sit native to the shelf. Mid-fi mocked the answer on both surfaces (mobile + desktop) before any hi-fi work.

Slide 20 · sketches

Five directions on paper.

Sketching possible interaction patterns — five rough directions explored on paper before any Figma frame.

Mid-fi · desktop + mobile

Two surfaces, before the annotation.

The wireframes the annotated walkthrough below refers to. Worth seeing the layouts raw before reading the rationale behind each interaction beat.

Mid-fi desktop wireframe of the Recently Played shelf with the new action sheet pattern.
Desktop · mid-fi
Mid-fi mobile wireframe of the Recently Played shelf with the new action sheet pattern.
Mobile · mid-fi
Three controls, decoded

Pin. Remove. Pause.

Each control gets the same editorial treatment: title, the annotated wireframe broken into individual frames so each step reads, then three paragraphs naming the problem, the trade-off, and who wins. The looping prototypes live in their own tabbed section below.

PIN · Desktop

Pin.

Max four pins. Long-press, choose, swap. The cap teaches itself.

Step 1 - Long-press a tile -> Action sheet opens -> Pin artist.
01Long-press a tile -> Action sheet opens -> Pin artist.
Step 2 - Pinned row appears -> toast "Pinned. Undo."
02Pinned row appears -> toast "Pinned. Undo."
Step 3 - Pin reorders to the first slot.
03Pin reorders to the first slot.
Step 4 - Unpin from menu -> toast.
04Unpin from menu -> toast.
Step 5 - Pin a fifth item -> limit modal.
05Pin a fifth item -> limit modal.
Step 6 - Choose a replacement -> swap -> toast.
06Choose a replacement -> swap -> toast.

Problem and state coverage. Recently Played reorders by recency. A song the user wants to keep within reach disappears as new plays push it down. The shelf needs a way to lock a favorite in place. The new Pin state machine covers seven moments—default, hover, press, pinned, disabled (cap reached), loading, error—each with two independent signals so the affordance never reads as ambiguous.

Feedback and the cap. Move first, confirm second. The tile animates to position one in 250 ms; the Pinned. Undo snackbar follows for five seconds; a persistent Pin chip stays on the tile after the snackbar dismisses. The cap is four pins, with a disabled fifth row rather than a soft limit and a warning toast. Engineering surfaced shelf-performance and ranking-signal degradation past four; four is also the cognitive ceiling for what a user can re-find by sight. Drag-to-reorder among pins, deliberately cut.

Persona impact. Ranger Dave on his commute is the primary beneficiary. Pin keeps his focus playlist within one tap regardless of what he plays after. Parent is neutral—Pin on a shared device is rarely worth doing. Explorer is neutral to negative; heavy browsing means the shelf turns over quickly and four pins barely scratch the volume.

REMOVE · Mobile

Remove.

Per-device. Five-second undo. Library untouched.

Step 1 - Long-press tile -> Action sheet opens.
01Long-press tile -> Action sheet opens.
Step 2 - Tap Remove from Recently Played.
02Tap Remove from Recently Played.
Step 3 - Item disappears -> toast "Removed. Undo."
03Item disappears -> toast "Removed. Undo."
Step 4 - Tap Undo on the toast.
04Tap Undo on the toast.
Step 5 - Item reappears in last spot -> "Restored."
05Item reappears in last spot -> "Restored."

Problem and state coverage. An accidental tap, a short preview, a one-off experiment lingers on the shelf and misrepresents what the user cares about. They need a way to clean it up before someone sees. The Remove state machine handles default, hover, press, the successful remove, the active toast, sync conflicts, and the restored state after Undo. Single-item rows and multi-item rows handled distinctly.

Feedback and scope. Slide first, undo second. The tile slides out in 220 ms; the Removed. Undo snackbar runs for five seconds; on undo, the item returns to its last position rather than the front. Scope is per-device, not per-account. Privacy lives at the device boundary. The cost is friction for multi-device users; the benefit is that the shelf can’t betray a user’s intent on Device A by changing on Device B.

Persona impact. Melodic Melanie, the primary beneficiary, can clear contextual plays before she shares her screen. Ranger Dave is positive on the shared-device case. Explorer is neutral—the shelf already turns over fast for them.

PAUSE · Desktop

Pause.

Time-boxed. 30 minutes, 2 hours, until tomorrow. Resume is automatic.

Step 1 - Long-press shelf header -> Action sheet opens.
01Long-press shelf header -> Action sheet opens.
Step 2 - Tap Pause Listening History.
02Tap Pause Listening History.
Step 3 - Pick a duration: 30 min, 2 hrs, until tomorrow.
03Pick a duration: 30 min, 2 hrs, until tomorrow.
Step 4 - Shelf shows paused state with visible timer.
04Shelf shows paused state with visible timer.
Step 5 - Pause expires -> toast "Listening history resumed."
05Pause expires -> toast "Listening history resumed."

Problem and state coverage. A borrowed phone, a long drive with a guest, an overnight kid takeover. The user has no way to stop the shelf from logging without leaving the app or signing out. The Pause state machine surfaces the timer in every state—default, hover, press, paused, expiring, resumed, clock-skew error—because the timer is the design’s promise.

Feedback and the time-box. Three presets, no slider. The duration picker offers 30 minutes, 2 hours, or until tomorrow. The shelf shows the paused state with a countdown; a snackbar confirms when listening history resumes. The control is time-boxed only, not a permanent toggle. Permanent pause was ruled out because the ML signal would degrade. The cost: a user who really wants to opt out has to re-pause periodically, or use Settings · Privacy.

Persona impact. Parent is the primary beneficiary: Pause protects recommendations during somebody else’s listening session. Melodic Melanie is positive on the social case. Ranger Dave is positive on shared devices when his son’s music threatens to take over the shelf.

Prototypes

The loops.

Three short prototypes built in Principle and exported as looping web video. Each one shows the design’s tightest signal: the timing, the confirmation, the reverse. If the interaction reads in three seconds with no caption, the design works.

Click 01 · 02 · 03 to switch the loop

02

The bet.

Three additive controls, all native to the shelf, each completing in one or two taps. Pin to keep a favorite within reach. Remove to hide an accidental or contextual listen without deleting it from the library. Pause to stop the shelf from logging for a time-boxed session. Reversible by default. Nothing touches the recommendation engine. Permanent pause was ruled out because the ML signal would degrade. Time-boxing is what survived the stakeholder map.

03

Shipped, with receipts.

Three controls, two affordances (mobile long-press, desktop right-click), one state machine. Below: the Pause state diagram that locks the time-boxed behavior, then the honest scope of what wasn’t tested.

State diagram · Pause

Time-boxed, four states, every transition reversible.

Pause state diagram — four states (idle, paused, expiring, resumed) with every transition reversible.

Out of scope

Four things that got named, defended, and skipped.

Knowing what not to design is the same skill as knowing what to design. Each item below was raised, considered, and deliberately left for a different surface or a different team.

Skipped

Editing global listening history

This touches a different surface (Settings → Privacy) and a different stakeholder group. Scoping it here would expand the project beyond one sprint.

Skipped

Changing ranking algorithms

Recommendation logic is owned by a separate team. Any ranking changes would require cross-team alignment that's out of scope for a shelf-level UX feature.

Skipped

Profile privacy redesign

Friends-feed and listening visibility live in a different settings surface. They deserve their own design pass, not a piggyback on this one.

Skipped

Permanent pause toggle

Permanent pause was ruled out at the constraint stage. The ML training signal degrades fast with persistent pause. Time-boxing is what survived.

Desktop parity

Same logic, native shell.

Mobile uses long-press to open the action sheet. Desktop uses a right-click context menu. The three controls and their state machines are identical. Only the affordance changes.

Spotify Desktop Recently Played shelf with the right-click context menu showing Pin, Remove from history, and Pause history actions.

Desktop right-click menu · same actions, native pattern

Role

UX/UI Designer · End-to-end

Year

2025

Type

Self-directed concept

Stack

Figma · Principle · After Effects

Status

Concept · not shipped