I built a 3D room for my records in 22 hours, without touching a 3D tool, a line of code or a light switch. I described it. Claude built it.
01The idea
My homepage already shows what I've been listening to on Spotify. It's a nice touch, but it's a list. A list of songs is not how music feels in my house.
Music in my house is a room. Records on shelves, two decks, a lamp on low, something spinning that I pulled out on a whim. I've been collecting music since I was 10: tapes, then CDs, a few records, MP3s, and then back to records properly for the last ten-plus years. Somewhere in the middle, at 15, Endtroducing sent me down a rabbit hole of Mo'Wax, Ninja Tune and WARP that I've never climbed out of.
So the brief I gave myself was simple. Don't show people a portfolio. Invite them in.
The Listening Room is a 3D room you can walk around in your browser. The shelves hold real records from my Discogs collection. The turntables work: load a record, press Start, the arm swings over and the needle drops. There's a mixer, a crossfader, a crate to dig through, a streamer for classic mixes, lamps you can switch on and off, and a neon sign on the wall that says Living off borrowed time, the clock ticks faster. If you know, you know. (MF DOOM, rest in power.)
02The rule
I set one rule at the start, in my second message:
Obtain models from online, I won't model anything, you need to do that and drive that, along with textures and any animations. I'm looking for a highly refined and design-polished aesthetic. Realism is key.
That was the deal. I'd be the art director. Claude, working in Claude Code, would be the whole studio: 3D modeller, lighting artist, front-end developer, audio engineer and the person who deploys it at 4am.
I'll be honest, I didn't think it would hold. I expected to hit a wall somewhere around the 3D and end up in Blender myself, watching tutorials. I never opened it. Not once.
That's the bit I find genuinely interesting. Not that AI can write code (we all know that by now), but that the whole chain from "find me a chair" to "bake the light from five lamps" can be driven by someone describing what they want and reacting to what they see.
03What got built
One evening, one night's sleep, one long day of feedback. Here's the tally.
| What | How much |
|---|---|
| Time, first message to live site | About 22 hours, including 6 where I was asleep and Claude kept going |
| Code written | About 4,000 lines |
| 3D models sourced, placed and lit | 15, all credited |
| Records pulled from my Discogs | 2,624 (2,358 of them vinyl) |
| Lamps, each with its own baked light | 5 |
What you can do in the room:
- Walk around with WASD, or drag to look. You can't leave the room, but you can look out of the window at a real London street.
- Dig the crate. Pull records from my collection or my recently played, load them onto deck A or B and press Start.
- Mix. Mix mode locks the camera over the decks. Grab the record to scratch, drag the tonearm to drop the needle, ride the faders and the crossfader.
- Click any sleeve on the shelf for the tracklist and a short artist bio.
- Switch the lights. Five lamps, four scenes (Sunday morning, Golden hour, Late night, All on), dimmers that warm up as they dim like real bulbs.
- Stream a classic mix through SoundCloud: Coldcut's 70 Minutes of Madness, Larry Levan at the Paradise Garage, the Dirtchamber Sessions.
- Type DOOM or DILLA. Actually, I'll let you find that one.
The crate
Mix mode
The streamer04How it works
If you're a designer, read the plain-English bit of each step and skip the code. If you build things, the code is there for you.
1. Blender, with nobody at the controls
Blender is the free 3D tool most studios use. It also runs without a screen, as a Python library. So Claude didn't click around a 3D app: it wrote a script that builds the whole room, and re-ran it every time I asked for a change.
Every object in the room is a line of code somewhere. The walls, the shelf, the record sleeves (nearly 600 of them, coloured from my actual records), the decks and mixer, which Claude designed from scratch. The chair, plants and lamps are free models from Poly Haven; the KAWS figures and the bonsai are scans from Sketchfab, credited in the room.
Python · the record shelf# the record shelf: 5 × 4 cubbies, walnut, every cubby full
cell, th, dep, ncol, nrow = 0.345, 0.02, 0.4, 5, 4
for r in range(nrow):
for c in range(ncol):
for k in range(random.randint(28, 30)): # full cubbies
box(f'Sleeve_{r}{c}_{k}', size, position, random.choice(SPINES))
That matters more than it sounds. When I said "the plant pots are not modern enough", nobody had to find a file and fiddle. The script changed, the room rebuilt, and nothing else moved.
2. Light that's real, but cheap
Realistic light is the expensive part of 3D. Light bounces: off the walls, the floor, the ceiling, the chair. Calculating that live in a browser would melt your laptop.
The trick is to work it out once, in advance. Blender fires millions of light rays around the room and saves the result as an image, a lightmap, painted onto every surface. It's how games have looked good for twenty years.
The twist here: the lamps have to switch on and off. So the room is baked five times, once per lamp, each in plain white light. The browser then blends the five together live, tinting each one with its own colour and brightness.
Daylight
Pendant
Arc lamp
Anglepoise
Neon
All five// one lightmap per lamp, mixed live: colour × dimmer for each, added together
vec3 mixLightmaps(vec2 uv) {
vec3 sum = vec3(0.0);
for (int i = 0; i < 5; i++)
sum += decodeRGBM(texture2D(lmMaps[i], uv)) * lmColors[i];
return sum;
}
That's why dimming a lamp looks right. The light still bounces off the ceiling and warms the wall behind the decks, because that bounce was baked in. The dimmer is just turning that layer down. Dim a bulb and it warms up too, like a real filament. Small detail. Huge difference.
3. The decks actually play
Each record gets a 30-second preview from Deezer (Apple as a backup), matched from my Spotify and Discogs data. The decks run on the Web Audio API with a small custom audio processor that plays the record at any speed, forwards or backwards. That one idea gives you the motor spinning up, the pitch fader, the brake when you press Stop, and scratching, all from the same code.
The mixer has gain, three-band EQ per channel, channel faders and an equal-power crossfader. Start a deck the crossfader has cut off and the fader glides over to it, because nobody wants to press play and hear nothing.
4. Everything else
- The data: my Discogs collection (2,624 releases) with cover art, and a Wikipedia bio for each artist, only accepted when the page is clearly about a musician. Without that check, "Busy Bee" comes back as an insect.
- The streamer: SoundCloud's official player, kept visible as their terms ask.
- The site: plain HTML and three.js, no framework. Hosted on Vercel in London, served at theluckystrike.co.uk/listening-room.
- Weight: the room is compressed from 41 MB to 12.6 MB for desktop, and 6 MB for phones.
05How I prompted
This is the part people ask about, so here it is, warts and all. These are my real messages, typos included. I didn't write a single long, clever prompt. I ran it the way I run a design crit.
Give the brief, then get out of the way
My first message was a paragraph of what I wanted: the room, two working turntables, the shelf, plants, lamps that actually light the room, Blender, Discogs, hotkeys. My second set the rule and the bar: "Realism is key." Claude came back with a plan, the risks and a few questions. I answered them and said "let's do it".
Art-direct in one line
Most of my messages were a sentence. Some were half of one.
The plant pots are not modern enough, they can be modernised and simplified.
Shelf is too wide, make it 6 records, the neon light is too high and too wide. needs balance
Remove the foot stool. it just looks like it's in the way
Remove the white thing on the table looks random
No measurements, no file names, no "please update line 412". The same feedback I'd give a designer. Claude worked out what "needs balance" meant in centimetres.
Describe what you see, not the fix
The corners and edges of wall and ceiling look like the paint is ripped off, we need to fix that and make it smoother
I had no idea why. I didn't need to. Claude took close-ups, found the cause (the walls were overlapping boxes, and the hidden strips were baking black and bleeding into the corners), rebuilt the room as one continuous surface, and showed me before and after.
Before
AfterScreenshots are feedback
When words were slower than pointing, I sent a screenshot with one line: "Remove the bottom card if the stream is being played." Done.
It worked the other way too. Claude checked every visual change with its own screenshots before telling me it was done. That rule lives in the project's instructions file: realism first, review every visual change with a screenshot.
Delegate the night shift
I'm going to sleep i'll pick this up in the morning. Please continue and do not wait for my decisions
I woke up to a working room, ready to deploy, with a list of the calls it had made on my behalf. Most were right. The ones that weren't took a sentence to fix.
Change your mind out loud
Remove the neon sign completely
"Remove the neon sign completely", ignore that, keep it and move it facing the chair
No drama, no wasted work. It's a draft until it's live, and even then.
Answer questions fast
When Claude needed a decision, it asked a short numbered question. I answered like this:
1 landscape 2 yes but on scratching 3 no
That's the whole mobile strategy, decided in nine words.
Push back when it's wrong
It got things wrong. When it told me a change hadn't touched any existing hotkeys and it had, I said so:
not true, S is for Streaming
It owned it, fixed it and moved on. Same as a good designer. And sometimes the most useful prompt was one word: "stuck?"
06What broke
It wasn't all smooth. Some of my favourite moments were the failures, because of how they got fixed.
| What I saw | What was actually wrong | The fix |
|---|---|---|
| Mix mode took me out of the room and into the street | The camera for the decks was placed above the ceiling | A steep view from the DJ's side instead |
| The art frames were black | The code measured each frame's height along the wrong axis, so the art had nowhere to go | One line, found by testing the maths |
| Wall corners looked like torn paint | Overlapping wall boxes baked black strips into the corners | Rebuilt the room as one continuous surface |
| The window frame had a dotted line | No anti-aliasing on the final render | Turned on multisampling: every edge in the room got smoother |
| The anglepoise looked like a chunk was missing | My black repaint also painted the white inside of the shade | Repaint only the coloured parts of the texture |
| The wooden KAWS figure glowed pale grey | Sketchfab scans ship as "unlit", ignoring the room's lights | Rebuilt the materials so the lamps reach them |
| Typing DOOM or DILLA fought the D key, which walked me sideways | Hotkeys and typed words fought over the same letters | Moved walking to the arrows (and later, back to WASD) |
Before
AfterNone of those needed me to understand the cause. I needed to notice, describe it and say when it looked right. Which, if you think about it, is the job.
07Mobile: a showroom, not a DJ booth
At one point I asked the obvious question: is mobile even worth it?
The honest answer was yes and no. Yes, because most people will meet this link on their phone: from LinkedIn, from a message, on the train. That first impression is the whole point. No, because nobody is going to beat-match on an iPhone on the Northern line.
So phones get a showroom, not a cut-down DJ booth:
- A lighter room. Plants and figures are simplified, textures shrink, and the baked light comes at half size. About 10 MB instead of 16, and the glow effect is switched off.
- No walking. On a small screen, walking around is how you get lost. Instead you glide between five framed views (the chair, the decks, the records, the window, the art), and you can still drag to look around.
- Landscape only. Portrait gets a polite "turn your phone sideways".
- The good stuff stays. Lamps, record sheets and the streamer all work, and so do the decks and scratching. Mix mode just tells you it's best on a big screen, "but go on, have a go".
It's the same call I'd make at work: don't port the whole product to every screen. Work out what each screen is for.
08What I took from it
I've spent twenty-five years making things and helping other people make things. Here's what this changed for me, and what it didn't.
Taste is the bottleneck now. Claude could build anything I asked for. The hard part was knowing what to ask for: that the pots looked dated, that the shelf needed balance, that "realism is key" meant the light, not the polygon count. The making got cheap. The judgement didn't.
The crit is the interface. I didn't learn a new way of working. I used the one I've used with every team I've led: say what you see, say what you want, let them work out how. Short feedback, often, with a picture when words are slow. If you can run a good design review, you can do this.
Delegate outcomes, not tasks. "Make the corners smoother" beat any instruction I could have written about lightmap UVs. The more I described the result and the less I described the method, the better it got.
It's a force multiplier, not a replacement. I didn't do this instead of designing. I did it as a designer, with a studio's worth of hands. One person, one evening and a day, a thing that would have taken a small team weeks.
Perfect is a direction, not a destination. There's a list of things I'd still change. That's fine. It's live, people are poking at it, and the next fix is one sentence away.
Come and have a listen. Pull something out of the crate. Dim the lights. And if you type the right name, the shelf might rearrange itself.
Built with Claude Code. 3D models from Poly Haven (CC0) and Sketchfab (CC BY), credited in the room. Records via Discogs, previews via Deezer, mixes via SoundCloud.