issue 001  //  09.08.2026  //  16:04 theme  //  snd: off
menu
homepage / 002 ux + product / tidal · record pull05 / 07

tidal · record pull

a capture layer for the tidal player: when a song hits, you pull it. three taps, no typing, and it lands on your profile.

the craftthe pocketthe dropthe hookthe beat switchthe restraintthe double meaningthe silence before it hitsthe deliverythe texturethe callback
the feelingeuphorialongingmenacecatharsistendernessswaggertensionabandon
the connectiona persona placea seasona former selfa filma lineagea ritual
3 tapscraft · feeling · connection. no typing required.
the capture vocabulary, from the prototype
what it is

record pull: a capture layer for the tidal player. when a song hits, you pull it — three taps for craft, feeling, connection. no text box.

what i did

designed the vocabulary and flows, built two interactive prototypes (the vision and the shippable version), and wrote the backend audit that separates them.

what happened

in pitch at tidal, paired with a sibling concept (liner notes) as one "active listening" story.

speci
roledesign + build · working groupcompanyblock, inc. (tidal)when2026whatrecord pull — a capture layer for the tidal playershipped astwo interactive prototypes (v1 · v2) + a backend auditstackone html file each, vanilla js, tidal design tokens, nationalestatusconcept · in pitchsiblingliner notes (dakota fabro) — same thesis, other side
the idea01

when a song hits, you pull it. a pull is a small structured note on a track: the whole song, a moment in it, or a line of it. instead of writing why it mattered, you tap what it did — the craft you noticed, the feeling it gave you, what it connected to. pulls land in personal crates and surface on your profile.

the thesis underneath is that a listener is a contributor, not a consumer. liner notes documents what happened around a record; record pull documents what it meant to you. same rails: structured contributions, profile identity, a signal that can feed personalization.

the problem02

every "why do you love this song" feature dies the same way: a text box. writing is a barrier, and the people with the best taste are often the laziest writers. i wanted the capture to be faster than skipping a track, to never pause the music, and to still produce data structured enough to be useful downstream.

feeling + connection·
  • feeling — euphoria · longing · menace · catharsis · tenderness · swagger · tension · abandon
  • connection — a person · a place · a season · a former self · a film · a lineage · a ritual
  • custom chips: type your own once, it stays for the session
  • optional note, optional emoji, optional location label, tag a person (v2)
three ways to pull03
whole song
the record, front to back
the pocketthe basslinethe vocal arrangementthe productionthe hookthe texturethe restraintthe chord movement
this moment
a timestamp, with a captured range
the dropthe beat switchthe harmony stackthe modulationthe fillthe breakdownthe ad-libthe silence before it hits
these lines
the lyric on screen right now
the double meaningthe specificitythe turn of phrasethe deliverythe understatementthe callbackthe image
the literacy layer04

the craft chips are the part i care about most. they give people who don't have the words a vocabulary for what they're hearing, and every chip has a plain-english definition one tap away: a friend explaining, no wine-tasting language.

the pocket — drums and bass locked into the groove, sitting a hair behind or ahead of the beat, on purpose.
the restraint — what the track leaves out. the band holding back on purpose.
the silence before it hits — the empty beat that makes the next one land harder.
the understatement — saying less than the moment deserves, and landing harder for it.

where pulls live·
  • crates — personal collections; "all pulls" is the default
  • profile — a profiles-2.0-shaped page with a pinned shelf and a feed of pulls
  • pin / unpin, delete, report — the last one maps to tidal's live user-reports resource, so moderation exists from day one
  • entry points — now playing (in the moment) and profile (your history)
the flows05
  1. quicktap the pull button in the player → a note sheet ("new pull") → pull this track. saved to all pulls with a toast. the music never pauses.
  2. deepadd detail → choose whole song / this moment / these lines → the full sheet with your note carried over → add to crate → success card.
  3. from the librarycollection or profile → new pull → track picker → the same chooser and sheets, with a "from your collection" context line instead of live player context.
the tokens·
base#000000surfaces#18181b · #242429 · #303036text#ffffff · #e4e4e7 · #afafb6 · #787887accent#33ffee (context dot only)typenationale · 20/24 · 16/24 · 14/20 · 12/18ctaswhite pills, 48px, radius 16targets44px minimum
two prototypes, one honest06

v2 is the full concept. v1 is the same product scoped to what tidal's backend supports today. i wrote a backend audit first, then cut anything that depended on rails that don't exist yet, and documented why. the pitch is stronger for having both: here is the vision, here is the version we could ship this quarter.

the cut list · v2 → v1·
suggested chipsneeds unbuilt personalization batch features
"3rd listen" contextno per-user listening history service; v1 shows time only
your ear card + explainerderived analytics, phase 2
from your archiveno anniversary batch job
neighbors rowno crate-overlap batch job
people taggingnotification path unproven
location suggestionskept as one optional free-text label (a string field)
added in v1: pull ⋯ menupin/unpin and delete are trivial writes on the pulls resource; report maps to userReports
kept in both·
  • quick pulls
  • the three capture flows
  • chips + glossary
  • crates
  • pinning
  • the profile modules
how it's built07

each demo is one html file: no build, no server, no network, all state in memory. the script is divided into constants / data / state / renderers / sheet logic / event delegation / init; screen names and click actions are frozen maps; every function has a docstring. one document-level click listener handles everything through data-action attributes. escape unwinds layers in order, dialogs trap focus and return it on close, and double-tapping save creates exactly one pull.

it uses tidal's real tokens (solidBase fills, the cyan accent for the context dot only, nationale at 20/16/14/12/10) so it reads as the product, not a mock of the product.

the prototype08

screens from v2, captured from the running demo. the flow: now playing → new pull → this moment → tag the craft → pulled → profile.

the prototype · screens🔒 locked
these screens are under nda. if i have sent you the password, enter it here and they appear. unlock
the bigger picture09

record pull and liner notes are the same thesis from two sides: liner notes is what happened, record pull is what it meant. they can share the badge and reputation system, share an identity model, and both feed recommendations. the pitch i'm making is to present them together as one "active listening" story.

what i'd do differently·

placeholder, one honest paragraph: what you'd change about the vocabulary, the flow, or the pitch after showing it around.

← homepage  //  002 ux + product © 2026 naeema :)