WOAH
A red toy truck on a 3D playground rendered in the browser at bruno-simon.com

On the web

You can drive a car through this resume

Bruno Simon rebuilt his famous drivable portfolio on Three.js and WebGPU, and open-sourced the whole world down to the Blender files. Still the benchmark.

There is a job application you drive a car through. Not a metaphor. A physics-simulated toy vehicle, on a 3D playground, in your browser tab, and the playground is the resume.

Bruno Simon's portfolio has been famous in web circles since 2019, when the first version put a drivable world on every design showcase going. His own words for it: "a simple world built with Three.js, where visitors could drive around in a red car and crash into things." I went back this week to check whether the legend still holds and found something better. He tore the famous thing down and rebuilt it.

The rebuild, receipts included

The new portfolio shipped in December 2025, and the Hacker News thread that greeted it on December 9 collected 777 points. The site's own Behind the Scene panel names the renderer: still Three.js, but with the shaders written in TSL, the Three.js Shading Language, which means the same code runs on WebGPU where the browser supports it and falls back to WebGL where it does not. Better performance on modern machines, no second codebase.

He documented the build in an Awwwards case study and a run of YouTube devlogs: the world modeled in Blender, instancing and culling to keep draw calls down, compressed textures to keep the payload sane, plus the parts a 2019 site could not do, achievements, a race circuit, and other visitors driving around the same world live.

The whole thing is open source on GitHub, MIT license, 1.9k stars as I write this update, Blender files included. The README reads like a small game studio's internal wiki: a fifteen-stage game loop, vehicle dynamics, and an asset pipeline that crushes the GLB models and textures through gltf-transform and KTX compression before anything ships.

Inside the game loop

I spent an evening in that repo and the part I keep thinking about is the update loop. It runs as fifteen numbered stages, 0 through 999: time and input at stage 0, the player and vehicle physics across stages 1 to 6, view, weather, effects and terrain from 7 to 10, instancing and audio at 13 and 14, the actual render all the way down at 998, and a performance monitor dead last at 999. The gaps in the numbering are room to grow. It reads like a flip book of how a game engine thinks.

The asset pipeline has the same tidiness. Every texture inside the GLB models gets re-encoded to ETC1S, a GPU-native compressed format, at the encoder's maximum quality setting of 255, UI art ships as WebP, and the originals stay in the repo beside their crushed twins so nothing is ever lost to the pipeline. You can clone it and rebuild his world from source.

The physics under the truck is Rapier, a physics engine written in Rust and compiled to WebAssembly, which is what lets the suspension squash and the collisions feel weighty at a steady frame rate. The devlogs walk through the vehicle controls and the material tricks one episode at a time.

The shader story deserves its own paragraph, because TSL is the quiet revolution here. The Three.js Shading Language is a node-based shader abstraction written in plain JavaScript: you compose functions instead of concatenating GLSL strings, and the compiler emits WGSL for WebGPU or GLSL for WebGL2 from the same source, applying its own optimizations on the way. One shader codebase, two graphics APIs, zero duplicated effort. That is why this portfolio can be a WebGPU showcase without stranding anyone on older hardware.

Restraint dressed as excess

The discipline that made the original land is still the discipline. Everything is low-poly, flat-shaded and cheap to draw, while motion and physics carry the spectacle, so the scene reads as lavish and runs on ordinary hardware. That is the whole craft of real-time graphics in one page: spend where the eye looks, starve what it forgives. Twenty years ago this was a console launch title. Today it is a contact page.

The origin story, on the record

Bruno has told the backstory in an interview with Mux, and the details are better than the legend. The original portfolio began as a teaching tool for his students. The car handling chases Micro Machines, the toy-scale racer, not any simulator. And the lighting is a magic trick: there are no real lights in the scene, just matcaps, pre-baked images of a lit sphere that get wrapped onto every material, which is how the world looks warm while costing almost nothing per frame.

His own verdict on what happened next: the thing "ended up boosting my career in crazy ways." When Mux talked to him, his course had 72 hours of video and more than 34,000 students. It has only grown since.

The genre it spawned

Half the striking portfolios on the web now trace back to this truck, and the family resemblance is easy to spot once you look. Jesse Zhou's ramen shop is a neon noodle bar you orbit in 3D, and it stays in character down to the loading screen, which cooks your ramen by percentage. Henry Heffernan's 2022 portfolio pulls you toward a retro PC on a desk until the screen becomes the site. Different rooms, same lesson: make the visitor a player and they will read everything.

For where the raw GPU side of this goes, a full fluid simulation living in a fragment shader is the sighting to open next.

The man teaches this for a living now, which tells you the portfolio worked. Three.js Journey, his course, runs 93 hours of video across 66 lessons for a $95 one-time payment, from a first scene through shaders and physics, and it is the closest thing this genre has to an official school. For what the same library does in commercial hands, a studio reel rendered live with no video file is the next tab to open.

Go drive it. Honk the horn. You will be there longer than you plan to be.

Next up

Take a mechanical watch apart in your browser, gear by gear