Everythingyou've gotspinning.
A shelf you flick, not a list you scroll.
The problem
Links flatten everything.
Covers say it all.
Every playlist already ships with the one picture people recognise. So the cover art became the interface.
OG B-TOWN
(G)old
Hollywood
Workout
BhajansThe shelf
A deck you flick.
The orbit took six passes
Two layouts
Or an arc.
Owners pick the layout in settings. The page swaps one component and nothing else.






OG B-TOWN
(G)old
Hollywood
Workout
BhajansThe drafts
Every page, before it shipped.
19 takes · 9 masters · real builds and Figma frames
The front door
Don't describe it. Play it.
The first home page said what SpindlShare was. The new one shows it running: a record changer, dropping the playlists on a real shelf onto the platter one at a time. This is the product's own three.js model, running here.
Now spinningOG B-TOWN100 songs · Spotify
- 01 Grooves
Light that holds still.
Vinyl shines because its grooves are concentric. The grain of this material runs along them, so light streaks across the record and stays put while it turns. The first changer was CSS gradients, and up close their rings shimmered into moiré.
- 02 Label
Printed from the cover.
Each playlist's art is printed onto a paper label: the wordmark round the top, the playlist round the bottom, SIDE A down the side, and a little tooth in the paper.
- 03 Stack
Motion with weight.
The next record drops under gravity. The platter catches it and takes the spin, the one beneath is gone, and the stack above settles by one.
- 04 Arm
A gimballed S-arm.
For every record it lifts, swings out and lowers on a curve, balanced by a brass counterweight. While one plays, the stylus creeps inward, the way a groove carries it.
- 05 Deck
Walnut, brass, 33 lit.
Book-matched walnut, a brass inlay, and a machined platter with strobe dots and a lamp to read them by. Lit as a dark studio with a few softboxes, so a ruby pressing stays ruby.
One model, three uses
The changer, the player, the sleeves.
The home page's player turntable is this same deck, and the records on its three step sleeves are this same model, rendered once into images. These three were baked by your browser, from this page, a moment ago.
Paid for on arrival: three.js loads after first paint, and each scene only as its section nears.
The flow
Under a minute to a shelf.







The player
Our own player.
Spotify's embed only streams to people signed in to Spotify, and it can't be styled. So the song rows became the controls: a Spotify song plays its 30-second preview, which anyone can hear, and a YouTube Music song plays whole, through YouTube's own player, under the same rows.
- 1Ajab SiKK, Vishal-Shekhar4:02
- 2Tumhe Jo Maine DekhaAbhijeet, Shreya Ghoshal5:41
- 4Chale Jaise HawaienKK, Vasundhara Das5:24
- 5Tumse Milke Dil KaSonu Nigam, Sabri Brothers5:59
- 6Kal Ho Naa HoShankar-Ehsaan-Loy5:21
Before and after
From Spotify's embed to our own.
Drag across. On the left, the Aug 1 build with Spotify's red iframe under the turntable. On the right, what shipped.

BeforeAfterYour turn
Flick it yourself.
The public page, running: tap the phone, pick a step, switch between stacked and arc. It plays on its own until you take over.
One refresh, two ways to report it
Press refresh. Both boards below run it.
RejectedInline note
Chosen 5 out of 5
5 checked, 197 songs, 5 updated
OG B-TOWN
(G)old
Hollywood
First row –
ChosenFloating card
Chosen 5 out of 5
5 checked, 197 songs, 5 updated
OG B-TOWN
(G)old
Hollywood
First row –
Liner notes
- Design
- The shelf and both its layouts, the home page, the dashboard, settings and admin.
- 3D and motion
- The turntables and the sand, modelled and lit by hand in three.js. The deck and the arc, hand-written geometry with no animation library.
- Front end
- Next.js 16, React 19 and Tailwind 4, with CSS modules for the home page.
- Back end
- Prisma 7 on Postgres, ten models. Auth.js v5, rate limits per account and per IP, tokens encrypted with AES-256-GCM.
- Care
- Thirteen check suites, cached public pages, reduced motion honoured throughout, and a complete working copy at spindlshare.vercel.app in case the domain ever lapses.
- Pressed
- July to September 2026. 150+ commits, solo.