◈ MISSION CONTROL

Case study · how this was built

ONE
FILE

Every page on this site is a single self-contained file. No bundler, no framework, no build step, nothing installed. This is an argument for that — and it is built the way it argues.

SCROLL

01 · THE CLAIM

This page is one file.

Not a page assembled from one file. The thing your browser fetched is a single document with its styles and its behaviour inside it. You can read the whole program top to bottom, and you do not have to take my word for any of this — the numbers below are measured by the page, about the page, as you look at it.

SELF-MEASUREMENT READING…

THIS DOCUMENTuncompressed, everything included
SCRIPTS FETCHEDno bundle, nothing to download
THIRD-PARTY REQUESTScounting…

02 · THE REST OF IT

So is everything else here.

Seven files make the whole site: the hub, two games, three case studies and a 404. Two of them are substantial programs — a playable résumé and a pseudo-3D racer — and each one is still a single document you can open in a text editor.

index.html · the hub258 KB
career-quest.html · game one346 KB
homeworld-run.html · game two80 KB
humaine.html · case study30 KB
techbag-iq.html · case study25 KB
towing-the-fleet-forward.html24 KB
404.html4 KB

7 FILES · 12,141 LINES751 KB TOTAL

03 · WHAT ISN'T HERE

The interesting part is the absence.

A normal project of this size arrives with a support structure larger than itself. Here is that structure, and here is how much of it this repository contains.

package.jsonNONE
package-lock.jsonNONE
node_modules/NONE
webpack.config.jsNONE
vite.config.jsNONE
tsconfig.jsonNONE
a CI pipelineNONE
an analytics snippetNONE

What deploying looks likeCopy the files to a folder. That is the deploy. There is no step between what I wrote and what you are reading — the file on my disk and the file in your browser are the same bytes.

04 · THE NORMAL WAY

The default is a tree you did not write.

None of this is an attack on build tools — they exist because large teams working on large software genuinely need them. It is a claim about proportion. A personal site does not need a supply chain, and accepting one anyway means accepting everything that comes with it.

A MODEST BUILD

One direct dependency pulls its own, and those pull theirs. You review the first one. You inherit the rest.

THIS SITE

One file. Nothing under it. Nothing to audit, nothing to upgrade, nothing that can change underneath you while you sleep.

05 · THE HONEST ACCOUNTING

It costs something. Here is what.

An argument that only lists its own advantages is advertising. These are real trade-offs and I make them on purpose, not because I have not noticed them.

WHAT I GIVE UP

  • No hot reload. Save, then refresh, like it is 2004.
  • No type checking. Mistakes are found by running the thing.
  • No reuse across files. The design tokens are copied into every page by hand and kept identical by discipline, not by an import.
  • The files get long. The hub is 4,379 lines. You navigate it by searching, the way you would a long document.
  • Not a team workflow. This works because one person holds the whole thing in their head. It would not survive four people and a merge queue.

WHAT I GET BACK

  • It still works in ten years. There is no toolchain to rot, because there is no toolchain.
  • No supply chain. Nothing here can be compromised through a package I have never read.
  • Nothing to upgrade. No dependency alerts, no breaking majors, no afternoon lost to a version bump.
  • View-source is the documentation. Every decision is commented next to the code that makes it, including the wrong turns.
  • It loads instantly. One request, no waterfall, no framework to boot before anything appears.

And the part that would be easy to leave outIt is not zero. These pages fetch webfonts from Google, and the hub calls a public weather API so the range panel can report real conditions. Three third-party hosts, none of them essential, all of them things I chose to keep. Claiming zero would have been a better line and a worse fact.

06 · WHY IT DOESN'T COLLAPSE

A long file needs rules.

Without a build step there is nothing structural stopping a file from becoming a swamp. What replaces it is a small set of rules, written into the source and enforced by hand. These are the real ones, quoted from the files they govern.

01Design tokens are shared verbatim across every page. If something needs a colour, it is already in :root.
02No filter or drop-shadow on anything that animates every frame. Glow is faked with wide low-alpha gradient stops.
03Adding a project is a one-row edit. Nothing downstream of the content model knows any specific entry by name.
09Session-only state. Nothing is written to your device — close the tab and the site forgets you were ever here.
24A game is never a dead end. Every screen has a route back.
34A transform cannot change a grid track's intrinsic height. Learned the hard way, written down so it is only learned once.
The wall does not breathe. Any readout whose text changes at runtime gets a pinned height and clips, so no live value can shove the layout sideways.

Every one of those exists because something broke first. That is the other thing a single file gives you: the comment explaining why sits directly above the line it is defending, and it cannot drift away into a wiki nobody opens.

You do not need a build step
to build something.

This page made its own case and then let you check it. If you want to see how any of it works, the whole program is one keystroke away.