Case study: studio build, playable from a link

A Formula race weekend in a browser tab.

You get twenty cars, sixteen corners, working DRS zones, and a pit lane, all under a live broadcast overlay. There’s no engine, no build step, and not one binary asset. Click and you’re on the grid.

Type

Racing simulation

Engine

Three.js / WebGL (no game engine)

Assets

None shipped, all generated

Status

Live and playable

The brief:
make a browser hold a race weekend.

A car on a ribbon of road wasn’t enough.
It needed a field, a circuit, and a car that has to be driven.

Racing games are the hardest thing to fake. Art direction can carry a shooter, but you judge a racing car by how it behaves in your hands, within about four corners. Apex Grand Prix set out to see whether a browser tab could hold the whole thing and still be something you can send someone as a link. That meant a twenty-car field, a five-kilometre permanent road course with sixteen named corners, three DRS zones, a pit lane that works, and tyres that heat and wear.

The constraint was the appeal. Everything an engine normally supplies is written directly against WebGL through Three.js, in vanilla ES modules on an import map. That covers the render pipeline, the vehicle model, the tyre curves, the camera director, and the timing tower. There’s no bundler, no build step, and nothing to compile. The build is readable, and every system in it is one file you can open.

The rule that shaped everything: not one binary asset. That rules out image files, audio files, and models. Every texture on the circuit (asphalt, kerbs, grass, crowd, livery, and tyre wall) is drawn procedurally with Canvas2D and noise the moment the page loads, and every sound is synthesised in WebAudio. Skipping binary files keeps a full race weekend down to a few megabytes that start in seconds. It’s also why the whole look can be re-tuned by changing a number instead of re-exporting a texture.

The handling was developed the way a real car is: by driving it and complaining. Rounds of play-testing produced specific, physical complaints (the car spins under a keyboard, the sharp turn will not close), and I chased each one to a measured cause instead of a guess. The game is live, free, and linked from this page. The production brief behind it is in the prompt shop, and the build is in the template gallery.

What was built

Every system is hand-rolled,
because there’s no engine underneath.

The circuit

Five kilometres, sixteen corners

The permanent road course has named corners, elevation, kerbs, run-off, barriers, and three DRS zones. It’s generated from a centreline instead of modelled by hand. Grandstands, crowd, marshal posts, and trackside furniture are placed procedurally along it.

The car

A vehicle model, not a lerp

Physics runs at a fixed 240 Hz behind an accumulator, so the handling is identical whatever your frame rate. The model has per-wheel load transfer, a real tyre curve with heat and wear, aerodynamic downforce, and an engine and gearbox. You can switch off ABS, traction control, and stability control one at a time.

The field

Nineteen cars that really race

The AI drives the same physics you do, with no rails and no rubber-banding cheat. Each driver has a skill profile that shapes braking points, apex speed, and willingness to defend, and the whole field can clear every corner of the circuit cleanly.

Zero assets

Every pixel and sound generated

The game contains no image, audio, or model files. Textures are drawn at boot with Canvas2D and noise, and the engine, tyres, and wind are synthesised in WebAudio. The build ships as code, which is why it’s a few megabytes instead of a few hundred.

Broadcast layer

A timing tower that tells the truth

Position, lap, sector timing, delta to your best, tyre temperatures, battery, DRS state, and a minimap are all read from the model instead of approximated. A QA suite drives a full five-lap race and checks every field against it.

The gate

Thirty-five suites, eleven metrics

Nothing ships until a headless browser drives the whole game (physics, menus, flags, pit stops, contact, and the driving line) and a visual gate compares eleven measured image metrics against a baseline. The screenshots on these pages come out of that same test rig.

Why build a racing simulation
with no engine at all?

Zero friction to play

There’s no store, no launcher, and no download. A link in a chat message is the whole distribution, and that’s what makes a playable build usable as marketing rather than a project.

Everything is inspectable

The code is readable modules instead of an engine’s black box, with no build step between the source and what runs. For a studio selling engineering, the game is the portfolio piece and the code review at once.

Measurement over opinion

Every handling complaint was chased to a measured cause, and several confident fixes were thrown out when the evidence refused them. What shipped is what survived a control arm.

It ships like a website

It’s static files with no build. Updates deploy in seconds, there’s nothing to patch, and the same pipeline that ships this studio’s websites ships the game.

From the build

Captured by the test rig,
so every run gets the same frames.

Apex Grand Prix: the broadcast camera through a fast left-hander
Broadcast camera. The timing tower is reading the real model.
Apex Grand Prix: the onboard halo view at speed
Onboard. Every texture in this frame was drawn at boot.

Questions worth asking

Yes. It’s live right here on this site, free, in any modern desktop browser. WASD or the arrow keys drive it, so a keyboard is all you need.

Because people engage more with a playable moment than with a banner, and a browser game removes the only real barrier: installation. A branded circuit that opens from a link works in a campaign, at an event booth, or as the reason people share your URL. This build shows it can also be a real simulation instead of a toy.

Engines win on tooling and raw fidelity. The browser wins on distribution and weight. An engine export to the web ships tens of megabytes of runtime before your first texture, and this build ships no textures at all, because it draws them. It starts in seconds, and every system in it is code you can read.

A gate that has to pass before anything ships. Thirty-five suites drive the real game in a headless browser, covering braking, traction, stability, contact, pit stops, flags, and the timing tower. A visual gate also compares eleven measured image metrics against a baseline. One of those suites replays a real player’s own recorded keystrokes at the hairpin, so a fix has to survive the thing that caused the complaint.

Yes. The exact production prompt behind the build, with the art direction, structure, and engineering notes, is a one-time purchase in the prompt shop. The template page has the full breakdown of what’s inside.

Want a playable moment
attached to your brand?

If it can run from a link, it can run in your campaign. That goes for games, interactive pieces, and product demos. Tell me what you’re imagining.