
The hard part
Simulating competing airlines, with route profitability, demand, fleet economics and rival carriers reacting to the player's moves, is usually server work because it is expensive to compute. Running it entirely in the browser means the backend can never become the bottleneck, the cost or the outage. The price is that all of that computation has to stay fast on the player's own machine.
The simulation is written by hand, with no game engine underneath. The server is deliberately thin: it serves static files and offers a file-based save API, and nothing more. Performance is held to a measured budget in continuous integration, so a slower turn is caught as a number before it reaches a player.
1,341 commits on 21 working days; a 500-route turn computed in a median of 60 ms against a 2,000 ms budget; restored saves checked byte for byte over 64 quarters.
What the measurements mean
Only what is unusual for this project. Every sentence names the field it came from; nothing here is asserted that cannot be checked against the data.
- At 304,238 authored lines it is one of the larger things here, roughly 36x the median project in this estate. authored_linesfrom authored_lines
- It exists in 2 folders under the same name, so which one is current has to be established rather than assumed. possible-copy single_copysee the evidencefrom family
- It serves 13 HTTP endpoints and declares port 3000, so it runs as a service rather than a script.see the evidencefrom assets.routes, assets.ports
- The code defines 16 functions, 0 methods and 0 classes.see the evidencefrom pythonAst.counts, pythonAst.coverage
How it works
Economic simulation of this shape is normally server work. Every turn recomputes demand across a route network, the costs of the fleet and the responses of competing carriers. Running it in the browser means the backend can never become the bottleneck, the cost or the outage. It also means the whole simulation has to fit within a browser's budget, with no game engine underneath it. The server is deliberately thin. It is a Node/Express static file server with a file-based save API (Python alternatives are kept), supporting manual save slots, autosave and JSON import and export. A hardening pass in September 2026 added schema validation to the automated build checks (CI) and indexed the economics lookups. A turn with 500 routes and 1,000 aircraft measured 60 ms median in CI, well inside a 2,000 ms budget. The pass also added a long deterministic soak test: 64 quarters with four players taking turns on one machine, in which saves restored every eight quarters must match an uninterrupted run byte for byte.
What kind of engineering this is
Six signals counted from the source: files that run models locally, that act without being asked each time, that check their own output, that survive failure, that touch parsers and protocols, and that were measured then improved. Every axis carries its file count.
The API, by shape
Routes read out of the source by a parser and grouped by their first path segment. They come from the code rather than the README, because a README can fall behind the code it describes.
What it is written in
Share of code bytes. Vendored bundles and generated output are set aside before this is computed, which is why it differs from a simple file count.
What stands out
- The entire economic model runs in the browser; the server only serves files and stores saves.
- Competing carriers respond to the player's decisions rather than following a script.
- Up to four players can take turns on one machine (local hot-seat).
- A turn with 500 routes and 1,000 aircraft measured at 60 ms median in CI.
- A soak test checks restored saves byte for byte against an uninterrupted run.
- The simulation is built by hand, with no game engine underneath it.
Capabilities
- Start here
- Review baseline and working branch
- Run on Windows 10 or 11
- Current capabilities
- Known baseline limitations
- Project layout
Grade
Every check names the field it measured. Checks that cannot apply are excluded, never counted as failures.
- provenance71.4%
- documentation87.5%
- runnability71.4%
- maintenance50.0%
- integrity90.0%
Not met
- committed 6 uncommitted file(s), untouched 88 days; last commit 51 days ago
cd the project folder && git status - environment venv exists but cannot run
python -m venv --clear venv (in the project folder then reinstall from the manifest
Architecture
Directories carrying real modules, largest first.
src84 modules(root)3 modulesscripts3 modules
HTTP surface
13 endpoints in total.
ROUTE /api/saves/<int:slot>ROUTE /api/savesROUTE /api/saves/autosaveROUTE /ROUTE /<path:path>ROUTE /api/healthGET /api/savesPUT /api/saves/autosave
Data model
Typed structures and tables found in the source.
- saves
Vulnerable dependencies
10 declared dependencies match a published advisory. Checked offline against the OSV database; only pinned versions can be checked, so anything unpinned here is unknown rather than clean.
- Act now.
body-parser1.20.4→ 1.20.9GHSA-27r3-jxmh-p828, GHSA-v422-hmwv-36x6 - Act now.
fast-uri3.1.0→ 3.1.3GHSA-333x-w4r6-6crp, GHSA-4c8g-83qw-93j6, GHSA-7p8r-x3mc-p8w7 - Act now.
path-to-regexp0.1.12→ 0.1.13GHSA-37ch-88jc-xwx2 - Act now.
proxy-addr2.0.7→ 2.0.8GHSA-jqcg-44mw-7w3h - Act now.
setuptools63.2.0→ 78.1.1GHSA-5rjg-fvgr-3xxf, GHSA-cx63-2mw6-8hw5, GHSA-h35f-9h28-mq5c - Should fix.
ajv8.17.1→ 8.18.0GHSA-2g4f-4pwh-qvx6 - Decide.
flask3.1.2→ 3.1.3GHSA-68rp-wp8r-4726, PYSEC-2026-2151 - Should fix.
pip22.2.2→ 25.3GHSA-4xh5-x5gv-qwph, GHSA-58qw-9mgm-455v, GHSA-6vgw-5pg2-w6jp - Should fix.
qs6.14.1→ 6.16.0GHSA-4mjr-xmp4-gh2g, GHSA-6pq8-jhm2-2vcw, GHSA-q8mj-m7cp-5q26 - Should fix.
werkzeug3.1.4→ 3.1.6GHSA-29vq-49wr-vm6x, GHSA-87hc-h4r5-73f7, GHSA-g6x2-hccm-hh4m
Vocabulary
Parsed 2 of 2 Python file(s).
Functions
static_file_appserver.py:29mainserver.py:91init_databaseapi_server.py:59get_dbapi_server.py:91get_user_idapi_server.py:104validate_save_dataapi_server.py:108serialize_saveapi_server.py:122save_gameapi_server.py:141load_gameapi_server.py:197list_savesapi_server.py:228delete_saveapi_server.py:264autosaveapi_server.py:296serve_staticapi_server.py:307add_no_cache_headersapi_server.py:325health_checkapi_server.py:363mainapi_server.py:376
Command line
- --port
- --host
- --debug
- --production
- --workers
- --threads
Depth
Signals counted from the code, not asserted.
1232 commits across 20 separate working days over 9 months, 112 of them revising existing behaviour
Built from scratch
- Parser / lexer
- Scheduler / state machine
Closes its own loop
- Memory / accumulated state
Proves itself
- Golden / baseline files
- Benchmarks
- Backtesting / evaluation
- Reconciliation / audits
- Smoke tests
Survives failure
- Fallback paths
- Recovery / restore
- Logging / observability
- Timeouts
- Retry / backoff
- Rate limiting
Systems
Distributed systems
- Worker orchestration
Environment engineering
- Dependency isolation
GPU & memory management
- Quantisation
Operating-system internals
- Elevation / UAC
Working within limits
- Throttling / rate limits
Languages
- JavaScript290,724
- Python571
- PowerShell152
- Batchfile56
- Shell37
Built with
- Flask
- Express
- GitHub Actions
- npm
- pip
Recurring themes in the commit history
- validation
- aircraft
- wire
- route
- package
- aircraft-01a
- pixel
- canonical
- fit
- migrate
Evidence
Taken from the code itself: a module docstring or the opening of the README.
Production-grade static file server for AerobizX Uses Waitress (production WSGI server) to serve static files Usage: python server.py [--port PORT] [--host HOST] Defaults: Port: 3000 Host: 0.0.0.0 (all interfaces)
At a glance
- Status
- maintained
- Primary language
- JavaScript
- First commit
- 2025-12-23
- Last activity
- 2026-09-23
- Domain
- Web services & APIs
- Agent docs
- CLAUDE.md, AGENTS.md, .claude