Independent · Browser game · Free to play

LIGHTS OUT

A full open-wheel racing game that runs in your browser.

Free, with nothing to install. Best on a desktop with a keyboard or gamepad.

26
Circuits, plus 3 reverse layouts
3
Car classes: 2026, 2025 and F2
240 Hz
Physics, in a Web Worker
11
Languages, engineer's voice included
856
Tests, all passing
Area
Independent
Role
Designed and built by George Hu, with Claude Code as an AI pair-programmer.
Status
Live
Stack
TypeScript · three.js (WebGPU) · Vite · Web Audio · Web Workers
What it is

What it
is.

A season of 2026-regulation racing, with physics, AI, careers and multiplayer, in a single web page.

LIGHTS OUT is a personal, non-commercial racing game modelled on the 2026 open-wheel season. It runs at phf1.com with nothing to install, on WebGPU with a WebGL 2 fallback, in Chrome, Safari and Firefox, and it can be installed as an app that opens full screen in landscape.

Game modes

Every way
to race.

A gold trophy on a podium under confetti and floodlights.
Championship
A driver in a red race suit.
Driver career
A team boss in a factory.
My TeamTeam career
A driver on a pit wall.
Story
A car on a wet street circuit.
Challenges
A car in the rain under a green flag.
Scenarios
Two teal cars at dusk.
Co-op

Also time trial, local split screen and online multiplayer.

In the game

From inside
the game.

Real captures from the game. Select any to see it full size.

Chase camera behind a car on the grid with three red start lights lit, gauges for battery, gear and speed below.
The chase camera as the start lights come on.
Cockpit view on the grid: the halo and steering wheel in front, cars ahead, five blue lights, a timing tower on the left and a track map below it.
On the grid from the cockpit, with the timing tower and the track map.
Three steps of the race-start panel: four blue lights while the turbo spools, then a red light as the start begins.
The launch panel: spool the turbo, then shift up at lights out.
A car on a time-trial lap with the lap timer, a minus delta, the track map, eighth gear and 306 km/h on screen.
Time trial at 306 km/h, with the full driving display.
Two players side by side on one screen, each with their own car, timer, map and gauges, one under a double yellow flag.
Local split screen on one computer.
A media pen panel titled The press asks what made the difference on a pole lap, with three answers to choose from.
After the race, the press asks a question and you choose your answer.
Three drivers on a podium under a LIGHTS OUT sign, with fireworks over the grandstand at night.
A night podium with fireworks.
What is modelled

Built like
a season.

Cars
2026-regulation cars, 2025 cars and an F2 car. Each is a hand-built 3D model in several levels of detail, with original liveries and no sponsor logos.
Circuits
26 circuits plus 3 reverse layouts, built from public survey data.
Physics
A 240 Hz simulation in a Web Worker, calibrated against public telemetry: tyres, aerodynamics with active aero, gearbox, brakes, and energy deployment and harvesting.
Race weekends
Practice, qualifying, sprint and race. Formation lap, start lights, pit stops, tyre compounds, wear and temperature, flags, penalties, safety car, VSC and red flag, damage, and weather with a drying line.
AI rivals
Racecraft and race strategy.
Media
A press conference after the race, a podium ceremony with fireworks at night races, photo mode and replays.
Languages
11, including the race engineer's voice: English, French, Italian, German, Spanish for Spain and Latin America, Dutch, Polish, Brazilian Portuguese, Japanese and Simplified Chinese.
Controls
Keyboard, gamepad (Xbox or PlayStation) and racing wheels, all rebindable.
Audio
Music, sound effects and voice. The car surface textures were generated with ElevenLabs.
How it was built

Under
the bodywork.

~70,000
Lines of TypeScript
668
Commits since 30 Sep 2026
856
Tests in 122 files, all passing
2,000+
QA screenshots kept as evidence

As of 18 October 2026.

TypeScript, three.js on WebGPU, Vite and Web Audio. The only runtime dependency is three.js.

One simulation, three places

The simulation is pure TypeScript, with no DOM, no rendering and seeded randomness. It runs the same in the game's worker, in Node tests and in headless calibration bots, and the main thread draws the snapshots the worker sends it.

Every number has a source

Every physical parameter is traced to a public source in a source ledger and a parameter table. Nothing was extracted from any retail game.

Tested like a product

Automated headless QA captures, one-hour soak runs of the rendered game with sound, two-hour simulation runs, and a lint that blocks raw colours and pixel values outside the UI kit.

Fitting the GPU

The car shader was cut from 18 to 15 sampled textures to fit WebGPU's limit of 16 per stage, and audio unlocks properly in Safari.

Finished as a website

Installable as an app with a web manifest, full screen and in landscape, with Open Graph and Twitter cards, schema.org VideoGame data, a sitemap and HTTPS.

Five red lights,
then go.

Free in your browser at phf1.com.

Personal, non-commercial project. Not affiliated with or endorsed by Formula 1, the FIA, any team, or any game publisher. Built from public real-world references.