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…
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.
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.jsonpackage-lock.jsonnode_modules/webpack.config.jsvite.config.jstsconfig.jsona CI pipelinean analytics snippetWhat 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.
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.