DJ ZEZE.
- Client
- DJ ZEZE — Prague DJ, resident at Duplex Prague
- Role
- Design & Development
- Stack
- Vanilla JS · Web Audio API · Canvas / WebGL · Blender · Node.js static build
- Year
- 2026
- Status
- Livesoundbyzeze.com
A booking site for Prague DJ ZEZE: a 3D DJ controller that turns as you scroll and works as a real mix player — faders, EQ and effects, on desktop and on a phone. Three languages, bookings via Telegram and email.

Overview
ZEZE plays open format — hip-hop, R&B, trap, baile funk, dancehall, afro, tribal house — and is a resident at Duplex Prague. The site has one job: sell her from the first screen and bring in bookings for clubs, weddings, corporate events, private parties and festivals. There are no prices on it — terms are agreed in person.
I built it end to end: concept and design, 3D scenes rendered in Blender, a custom audio engine, three languages, legal pages for the Czech market, security, SEO and launch. No framework — vanilla JavaScript and a static Node.js build that ships a ready HTML page per language.
The first screen has no pop-ups: the site uses no cookies and no analytics, so it needs no cookie banner. Within a week of launch Google had 7 pages indexed, the site ranked second for «soundbyzeze» right after her Instagram, and Lighthouse scores SEO 100, Best Practices 100, Accessibility 97.
The demo runs the real controller with the first five minutes of each of the four mixes — the full sets play on soundbyzeze.com.
How it works.
The controller is not a picture of a controller. Scrolling swings the camera from the front to a top-down view, and from there the decks, faders and effects actually play her mixes.
- 01
80 rendered frames
The camera move is an 80-frame sequence rendered in Blender and scrubbed by scroll. Speaker cones and lights are separate render passes on top.
- 02
A custom audio engine
Mixes are cut into 60-second AAC chunks and stitched sample-accurately, with no clicks. Every sound runs through the mixer — in any browser, iPhone included.
- 03
A real layout
Buttons follow the spec of a real controller (DDJ-REV5): faders, crossfader, EQ, filter, echo, reverb, flanger, hot cues, loops, rolls, censor, scratch, sync, SHIFT.
- 04
Speakers on the beat
Cones light up and pump in time, and a tap shakes the speaker. The fur on the logo and the smoke are custom Canvas/WebGL shaders.


- 01
Controller on a phone
Zoom by section (deck A · mixer · deck B), forgiving touch targets and multitouch — two faders with two fingers at once.
- 02
iPhone, even on silent
A plain <audio> on iOS plays outside Web Audio, so the faders did nothing; the custom engine fixed it. Web Audio is mute in silent mode — a workaround makes it play.
- 03
Light first load
Audio starts loading on the first mouse move or tap, not with the page — 3.8 MB less on every visit. The logo does not jump: CLS 0.004 against a 0.1 limit.
- 04
Three languages, properly
EN, RU and CS as separate static pages with text in the markup, a hreflang sitemap, llms.txt and JSON-LD. Checked from 320 to 1920 px: no broken compound words, no one-letter prepositions left hanging — a rule in Czech typography.
- 05
Nothing to attack
Strict CSP, HSTS and anti-framing headers. No backend, no forms, no secrets. Czech business details in the footer and a GDPR notice in three languages.
- 06
Search from day one
Google Search Console, Bing Webmaster Tools and IndexNow (Bing, Seznam, Yandex) connected at launch.
Palette
- Bg#0B070F
- Bg 2#120C16
- Ink#F4EEF1
- Accent#FF4FA3
- Accent 2#FF7CBD
- Lilac#B9A2FF
Typefaces
- Inter TightDisplay
- GeistText
- Geist MonoLabels

About — photo, bio and facts, here in Russian 
Privacy — the essentials on numbered cards 
Booking — email, Telegram, Instagram and event formats, here in Czech 
Privacy page — a «0 cookies» record and NO TRACKING tapes
Polyakov Barber
[Barbershop] — [Scroll morph]