Part 1 · Identity manual

Spotify Mix

A DJ-mixing feature that lives inside Spotify’s dark Encore language. The identity job is restraint: extend Encore with exactly three new ideas — Camelot key badges, transitions that live between songs, and a warning that carries its own fix — and change nothing else.

7A 9A 11B hard blendAdd bridge song

Principles

  1. Inside Encore, not beside it. Every screen must be mistakable for Spotify. New patterns extend existing ones (chips, sheets, pills); they never introduce a new visual language.
  2. Color is information. On the near-black stage, color only ever means something: green = action or positive state, a key badge’s hue = musical harmony, ember = a rough transition. Decorative color is banned.
  3. Every warning carries its fix. A problem is never flagged without the remedy in the same element.
  4. Preview before commit. Anything the system decides — reorder, transition, bridge song — can be heard or reviewed before it sticks.

Mark & entry point

The feature has no logo. Its mark is the Mix glyph — the two-slider icon on the playlist Mix pill — plus the ✦ sparkle reserved for machine-made suggestions. The sparkle may only appear where the system did the work; never on a manual action. Spotify’s own logo rules apply untouched — Mix never places, recolors, or locks up the Spotify logo.

The engaged tool wears the liquid-metal rim — a 2.7dp stroke running #5A5A5A → #ACACAD → white so the top and bottom edges catch light, over a fill that darkens toward both ends. It is the only shine in the system, and it means “the machine is holding this tool”: Mix while the sheet is open, Mix + Smart reorder once the reorder has run.

Color treatment

  • One green, and it is #1CD05E — the in-app Encore green sampled from the final screens. It is not the marketing green #1ED760; that value never appears in product UI.
  • Green is used for: primary CTAs, Save, selected filter pills, the play disc, playing state, progress, downloaded/shuffle dots, text links. Nothing else.
  • Ink on green is always black (10.2:1). White on green fails at 2.05:1 and is forbidden.
  • Key badges are data, not decoration. Their hues are fixed per Camelot number and may never be reused elsewhere.
  • Ember is the only warning treatment. No red fills, no standalone yellow triangles; the red #BC1E1E ✗ appears only in the legend screen.
Save

The Camelot key legend

Each song carries its key as a 9pt black-ink badge. Hue follows the Camelot wheel number, so keys that harmonize sit in neighboring hues and matching keys match exactly — the color does the DJ theory. A and B of the same number share a family (10A is the lighter sibling of 10B). The in-product legend screen (“Making mixing easy”) teaches this with live components, not illustrations.

2B — green--key-2b#24CB61
7A — rose--key-7a#FDB4D4
7B — hot pink--key-7b#FF90C0
8A — orchid--key-8a#F4B4FD
9A / 9B — lavender--key-9#DBB4FD
10A — light periwinkle--key-10a#B2C8FF
10B — periwinkle--key-10b#8AA9F7
11B — cyan--key-11b#20CDFC

Reading pairs, as the legend teaches them

✓9A9A match ✓10A10B major ↔ minor ✓10B11B one step ✗2B10A clash

Rule for unmeasured keys: keep the neighbor-hue ordering around the wheel, pastel enough for ≥ 7:1 against black ink.

Imagery & voice

  • Album art is the only imagery. 44×44dp, radius 6, never cropped, never filtered.
  • Ambient color is derived from art, never invented. The playlist header gradient (#279EFE → #006EC9, collapsing to #00447C) and the now-playing bar tint (#142239) are extractions from the current artwork. Nothing else ever picks up art color.
  • Voice: short, first-plural, playful only at moments of delight — “Let’s Mix!”, “Your Mix is ready!”. Warnings are lowercase and factual: “hard blend”. Illustration is monochrome line-art (the party popper), never color emoji.
header → collapsed → now-playing

Do / don’t

Do — black ink on green, 10.2:1.
Don’t — white on green fails contrast (2.05:1).
hard blendAdd bridge song
Do — the warning carries its remedy, one tap away.
hard blend
Don’t — a bare warning with no way out.
Run Your MouthThe Marías 111 bpm9A
Do — in lists, bpm + key stack unboxed, right-aligned.
NEW HOT
Don’t — key hues never label, tag, or decorate anything else.

Part 2 · Design system

Color tokens

Every hex sampled 1:1 from the final lossless PNG exports (2026-08-28, 360×783 = 1 px per dp).

Surfaces

Elevation is a lightness step, never a shadow — see Elevation.

Basesurface/base#121212
Bottom navsurface/nav#111111
Modal sheetsurface/sheet-modal#1F1F1F
Full sheet / cardsurface/sheet-full#2B2B2B
Chip on basesurface/chip-base#323232
Chip on modal sheetsurface/chip-modal#353535
Add-button circlesurface/add-circle#424242
Control on full sheetsurface/control#585757
Transition chipsurface/inverse-chip#1E1E1E + #3A3A3A
Coach toastsurface/coach#636363
Now playing (art-derived)surface/now-playing#142239
Ember warningsurface/ember#3D190A

Ink

Primaryink/primary#FFFFFF
Secondaryink/secondary#AEB2B5
Card subtitleink/card-sub#9EA1A4
Tertiary / metaink/tertiary#878A8C
Values (bpm)ink/value#E1E1E1
Placeholderink/placeholder#C0C0C0
On fills (green, white, badges)ink/on-fill#000000

Green & semantic

Action green — the only onegreen/action#1CD05E (not #1ED760)
Progress played → restgreen/track-rest#1CD05E → #0A662C
Waveform out (65%) / ingreen/waveform · gray/waveform#1CD05E @65% · #878A8C
Warning ink (one color for all strokes)warn/ink#E8825A
Legend ✗ onlydanger/legend#BC1E1E

Lines

Hairline (≈ white 8%)line/hairline#252626
Pair-chip border, 1pxline/outline#414141
“Insert song here” dashesline/dash#505253

Typography

The screens are set in Montserrat — confirmed against the exports letterform by letterform (looptail g, flagged 1, curved t), with every size solved by matching rendered text widths against the PNGs — the scale is compact: titles 13, chips 11, meta 10.5. This page loads Montserrat from Google Fonts, so the samples below are the real thing. It stands in for Spotify’s proprietary Circular; a production hand-off maps the same scale onto Circular. SemiBold carries the hierarchy; color separates primary from secondary. No italics anywhere.

Let’s Mix!
type/sheet-title · Montserrat 600 · 18/24 — CTA labels are type/song (13/600) in a 46dp pill
Edit transition
type/screen-title · 600 · 13/18 · centered in the top bar (Cancel/Save 11.5)
Best Matches
type/section · 700 · 13/17
To Zion (feat. Carlos Santana)
type/song · 600 · 13/18
We’ll organize your playlist for you – or you can do it manually.
type/body · 500 · 13/19 · ink/secondary
Ms. Lauryn Hill, Carlos Santana  ·  173 bpm
type/meta · 400 · 10.5/14 · ink/tertiary — bpm values share it, in ink/value
7A  chip label  tool label
type/badge · 700 · 9, black  ·  type/chip · 500 · 11  ·  tool pills · 600 · 10.5

Spacing & radius

4pt grid, 12dp screen margin (measured on every screen). All standalone actionables are pills; chips inside a set get flatter corners the more options they hold.

--s-1 (4px)
--s-2 (8px)chip gap in a row
--s-3 (12px)screen margin · art→text gap
--s-4 (16px)
--s-6 (24px)

Measured sizes

ElementHeightRadius
CTA pill46pill
Full-width pill45pill
Search pill44pill
Preset chip408
Segmented option / preview4010 / 12
Add-button circle40 ⌀—
Transition chip38pill
Filter pill34pill
Warning pill35pill
Tool pill (playlist header)30pill
bpm + key pair chip4812 · 1px #414141
Album art44 × 446
Key badge144
Progress bar42
Action card56–6414
Coach toastcontent16
Sheet handle56 × 42
Bottom sheet top corners—24

Touch: nothing interactive below 30 visual; pad to ≥ 44 effective.

Iconography

  • Stroke weight is tiered, not uniform: 1.75dp in the action row (download, share), 1.5dp for nav & search, 1.25dp inside pills and rows (chevrons, mixer, burger, sort, pencil, plus), 1dp for micro-glyphs (note+, sliders, ×), and hairlines below that (⊖ 0.75, popper 0.5). Round caps on directional strokes; burger and sort rails are square-cut.
  • The sparkle is one large four-point star with a small companion star at its upper right — filled, black on green/white fills, white on dark pills. It ships at 10.5×13 in chips and 17×21 on the CTA, always the same drawing.
  • The play disc is chrome in a 6dp green ring (54⌀ overall): an angular-gradient steel face with a 1.75dp lit rim, white glyph. While playing it collapses to the flat 42⌀ green/action disc with the black pause glyph.
  • Green on an icon means state, not style: downloaded ↓, smart-shuffle dot, headphones-connected.
  • The ⚠ triangle in the ember pill is outlined, in warn/ink like its text — never filled, never yellow.
  • Advanced-control rows carry a 3×14 channel tick — volume steel #28556C, EQ olive (#FFE500 family, dimmed). Channel colors appear nowhere else.
downloaded Volume Overlap ⌄ EQ Center bass swap ⌄

Elevation

No shadows. Elevation = surface lightness + geometry. One deliberate inversion: transition chips are darker than their surface (#1E1E1E on #2B2B2B) because they belong to the seam between songs, not to either row. Sheets add a 40% black scrim.

#121212 #1F1F1F #2B2B2B #323232 #585757 #636363

Motion

Recommended values — the pattern is observed in the recording, the durations are the spec for build.

MomentSpec
Bottom sheetslide up 300ms decelerate · scrim fades 200ms
Chip select / invert150ms color swap, no movement
Sheet → toast (“Your Mix is ready!”)content crossfades in place, 200ms
Preview progresslinear, real-time with audio
Reduce motionswap slides for fades, keep durations

Interaction states

Selected — neutral sets invert, action sets go green

neutral: white fill, black ink
action: green fill, black ink

Engaged tool & focus

liquid-metal rim, 2.7dp (engaged tool) · 1dp white border (focus)

Disabled / spent

Fill #AEB2B5, ink #323232 (6.0:1 — still readable, clearly asleep). Shown while the list is being edited manually.

Playing & sibling dim

Run Your MouthThe Marías 111 bpm9A
VideoIndia.Arie 86 bpm8A

Playing: title turns green, an equalizer glyph replaces the index. Expanded focus: sibling rows sit under a 20% black scrim with ink at 55%.

Warning

hard blendAdd bridge song the row itself never changes color

Patterns

  • Progressive disclosure: pill row → sheet → toast → full editor. Every step is skippable (“Edit Manually”, “Review”).
  • The seam owns the transition: everything about how two songs meet — the chip, the warning, the bridge insertion point — renders between the rows, centered, never inside a row.
  • Bordered pair: only the two songs being mixed get the bordered bpm+key chip; list rows stack the same meta unboxed.
  • Preview-before-commit: Intro/Outro segmented preview with the 4dp progress bar; the waveform’s play disc previews the blend itself.
  • Teach in context: the coach toast links to the legend screen, and the legend explains with live components, not illustrations.

The seam, assembled — at true 360dp metrics

To Zion (feat. Carlos San…Ms. Lauryn Hill, Carlos Santana 173 bpm7A
Insert song here
Shea Butter BabyAri Lennox, J. Cole 155 bpm9A
hard blendAdd bridge song

Core components

Rebuilt at true 360dp metrics against the exports — the phone-width stages below are 1:1 with the screens.

Top bar

Edit transition Save
Cancel Add a bridge song Save

Song rows — list variant, pair variant, edit variant

Appletree Erykah Badu 84 bpm 8A
To Zion (feat. Carlos San… Ms. Lauryn Hill, Carlos Santana 173 bpm7A
Run Your Mouth Video · The Marías 111 bpm 9A

Preset chips

Presets

Filter pills

Buttons

primary
inline

Segmented preview + progress

Bars picker (modal sheet segments)

Choose how long your tracks should transition for.

Action cards

Add a bridge songInsert a song between these two
Advanced controls

Search

What would you like to add?

Coach toast

Drag to reorder

Match key colors or find similar bpm for a smoother blend.

How does this actually work?

Bottom sheet

Let’s Mix!

We’ll organize your playlist for you - or you can do it manually.


Waveform editor

Outgoing bars: green/action at 65%. Incoming: gray/waveform. The play disc in the editor wears a green ring. The crossfade curve is a 1px green stroke against a 1px white one; bar-lines mark the n bars window.

Platforms

One spec, three targets. dp / pt / px map 1:1 off the 360-wide frame. The bottom sheet is Android ModalBottomSheet, an iOS detent sheet, and a web dialog at ≤ 480 wide. The bottom nav and status bar stay native; everything above them follows this document. Montserrat ships on all three (Google Fonts); a production hand-off inside Spotify would swap to Circular at the same scale.

Accessibility

PairRatio
white on base18.7
bpm value on base14.3
badge ink (worst measured badge)9.1
black on green10.2
green on base9.1
secondary on base8.8
white on control7.2
disabled ink on disabled fill6.0
coral on ember5.8
tertiary on base / on full sheet5.4 / 4.1

Key color never carries meaning alone: the badge always contains the key text, the legend pairs color with ✓/✗ glyphs, and bpm is written out beside every badge. White on green (2.05) and the legend’s ✗ red are the two known-fail pairs — the first is banned, the second is always doubled by the glyph shape.

Screens

The final exported frames these tokens were sampled from.

Playlist view with Mix pill
Playlist — the Mix entry point
Let's Mix bottom sheet
Let’s Mix sheet
Your Mix is ready toast
Mix ready
Edit playlist with hard blend warnings
Edit playlist — hard blends
Drag to reorder coach mark
Coach toast
Edit transition waveform screen
Edit transition
Bars picker sheet
Bars picker
Add a bridge song
Add a bridge song
Bridge song intro preview playing
Preview — Intro playing
Making mixing easy legend
The key legend
Playlist with inline transition chips
Transitions in the list
Advanced controls
Advanced controls
Collapsed playlist header
Collapsed header

Provenance

Colors sampled pixel-for-pixel (pngjs) and geometry measured by color-run scanning from the 2026-08-28 lossless exports in Project 1 Spotify/ (360×783 = 1px per dp), copied to assets/case-studies/spotify/final/. The typeface was identified as Montserrat by a letterform lineup against the exports; this page loads it from Google Fonts so every component here renders in the real face at true dp metrics. Icons are SVG tracings of the glyphs in the screens. Motion durations are recommendations; the pattern is observed in the recording. The legacy 6b. Advanced Controls frame still carries old-style visuals (including #1ED760) and was excluded from sampling except its channel-color curves. The full written rules live in spotify.md.