← Zero To Apex

Engineering · the developer behind Zero To Apex

Jose Manuel Vicente

I build Zero To Apex on my own: a career engine in C++17, a desktop app in Tauri and React, and a small cloud backend. This page shows how it fits together and how decisions get made: by measuring what the system does, not by trusting what it was told to do.

How it fits together

The engine knows nothing about a user interface. Every operation is a method name and a JSON payload in, JSON out. That one shape lets several front ends sit behind the same engine: the desktop app next to the game, a WebAssembly build in the browser, and fixed fixtures for tests and demos.

Diagram: the desktop app, the career engine, the game integration and the cloud backend, and how they talk to each other

Decisions, checked rather than assumed

A setting that did nothing

Problem
A difficulty setting was meant to control how consistent AI drivers are from lap to lap. It stayed in for months, because nothing about using it looked broken.
What I did
Logged thirteen races at different settings and compared the lap-to-lap variation against the setting and against traffic.
Result
The variation followed traffic, not the setting. The assumption went, and the model was rebuilt on what was measured.
Lap-to-lap variation follows traffic, not the setting

The instrument was the anomaly

Problem
A watchdog flagged a share of races as anomalous, and that share was quoted as a health metric.
What I did
Checked every flagged race by hand instead of trusting the rate.
Result
71% of the flags were an artefact of how the watchdog sampled its own data. The real anomaly rate was 5%.
71% of flagged races were artefacts of the watchdog; the real anomaly rate was 5%

Count the grid that actually raced

Problem
A grid was configured to split 3, 17 and 5 cars across three skill tiers.
What I did
Counted the grid that reached the track instead of reading back the configured value.
Result
It raced as 9, 8 and 8: something downstream renormalised the split. Writing a value and reading it back are two different tests.
Configured split of 3, 17 and 5 cars against the raced split of 9, 8 and 8

How it gets built

Most of the implementation goes through an AI coding agent, under plain rules. Development is test-driven, against an engine harness whose exit code is the number of failing tests. A behaviour is measured before it is changed. And any check that means auditing a large surface, such as every file that could contradict a claim, goes to an agent that runs the exhaustive version a person tends to cut short.

Read the code

A sanitised export of the career engine (contracts, transfer market, calendars, grids and ratings) runs on an invented world of fictional series and drivers, with its own CI. Published for review, not reuse.