
Details
- Client
- Bay.Nine
- Industry
- Automotive detailing
- Location
- Amsterdam, Netherlands
- Services
- UX/UI · Website · Booking & CMS
- Stack
- Next.js · WebGL · Motion
- Year
- 2026
Introduction
Bay.Nine is a private detailing atelier in Amsterdam: paint correction, ceramic coatings and concours interiors, by appointment only. They wanted a website that proves their tagline, Not a car wash, before a visitor has read a word, and a booking flow as considered as the work in the bay.


A workshop that kept being mistaken for a car wash
Bay.Nine have spent nine years building a reputation among people who measure paint depth for fun: more than 1,400 cars, a five-year ceramic warranty and clients who keep coming back. Online, though, they looked like every other detailer. A stock photo of a sponge, a price list and a phone number. New visitors kept asking how much a wash costs.
The brief was to show the difference instead of claiming it. The site had to feel like the spec sheet of an obsessive workshop: precise, technical and a little loud, with the car at the centre of every screen.
Two things were not negotiable for the client. Every service had to show a real starting price up front, because hidden prices make people assume the worst. And booking had to work without a phone call, so a slot could be reserved at eleven at night as easily as at eleven in the morning.

Showing the work instead of describing it
The hero opens on a single yellow GT3 RS on a clean studio floor. Move the cursor over it and a lens follows, revealing the same car mid-wash, covered in snow foam, at exactly the same spot. A ring of technical text turns around the lens and a readout tracks its coordinates. On a phone, where there is nothing to hover, the lens wanders across the car by itself.
The services menu borrows from the dashboard. Hover a treatment and its photograph slides in while the price rolls to its new value digit by digit. Because there is only ever one number on screen, sweeping quickly down the list re-targets the digits instead of stacking prices on top of each other.
The centrepiece is Inside the Bay. As you scroll, the same car goes through the whole process in one pinned scene: dirty on arrival, then snow foam falling from the roof with a dripping front, sheets of water sliding it away, a band of light drying the paint from nose to tail, and finally the light running back to open the driver’s door onto the interior.
It is not a video. Five photographs, aligned to the pixel, are blended live by a WebGL shader, so every frame follows the scroll exactly and can be stopped, reversed and replayed at any point.








Booking a bay, not filling in a form
Booking opens as a full-screen panel styled like the workshop’s roller shutter, and takes three steps: choose a service, or Inspection & Quote if you are not sure; pick a drop-off day and time; then leave your details and the car.
The calendar follows the real opening hours. Sundays are closed, Saturdays have two drop-off times and weekdays three, and every day shows how many slots are left, so fully booked days are obvious before anyone clicks. Beside the form, a job ticket fills in as you choose, each value decoding into place. When the request is sent, the ticket prints out with its own job number and an option to add the drop-off to your calendar.
Behind it, we built Bay.Nine a small CMS for the team. Every request lands there the moment it is sent, and from one screen they can confirm a booking, move it to another slot or decline it, and see the diary for the weeks ahead.

Keeping a heavy scene light
A pinned scene with five full-size photographs and a live shader is exactly the kind of thing that warms up a phone and makes a page stutter. Most of the engineering went into making it feel effortless.
Five photographs that line up to the pixel
The shader can only blend one stage into the next if the car sits in exactly the same place in every photograph. We aligned all five frames to the pixel and drew masks for the car and for the open door, so the foam, water and light stay on the bodywork. The studio haze around the car is flattened into the page colour, so it seems to stand on the site itself.
Rendering only when something moves
The first version redrew the shader and the hero lens on every frame, even when nothing had changed. Now both loops go to sleep: the lens stops once it closes or leaves the screen, and the shader draws only when the scroll position has actually moved. The photographs load half a screen early, but nothing renders until the scene is on screen.
A landscape scene on a portrait screen
A car seen from the side does not fit a phone held upright. On small screens the photograph is shown larger and pans from nose to tail as the stages progress, then back to the door for the interior. Browsers without WebGL get the same five stages as simple cross-fades.


A site that sells the work before the first call
Bay.Nine now has a website that looks and behaves like the workshop: technical, precise and impossible to mistake for a car wash. Prices are out in the open, the process is shown rather than described, and a bay can be booked at any hour without picking up the phone.
For the team the change is just as practical. Requests arrive complete, with the service, the car and the drop-off time already chosen, and they manage all of them from one place.
For us, it was a project about earning attention honestly. Every effect is there to show what the workshop does, and each one had to be fast enough that nobody notices the engineering behind it.
- Performance on desktop
- 99
- Performance on mobile
- 93
- Accessibility
- 93
- Best practices on desktop
- 100
MORE WORK
You might also like
Lümen Index
Private banking and DeFi ecosystem bringing clarity to liquidity, governance and modern portfolios.
- UX/UI
- Website
- Branding
JungleMind
AI reasoning engine and API that thinks through every problem carefully before it answers.
- Branding
- Website
- Growth


