01
The rule, and what it cost
The template was built under one rule: nothing in the <script> budget. Not a smaller framework, not a lighter animation library — nothing. The rule is easy to state and it starts costing you things immediately, which is the part worth talking about. A hamburger menu needs JavaScript to open, so the navigation wraps onto a second row instead. Submitting a form without a page reload needs a fetch handler, so the contact form is a native HTML POST and the visitor lands on a thank-you page.
Both of those are marginally worse than what everyone else ships, and both were taken anyway, because of what comes back the other way: a page with nothing to block on. Build it, grep dist/ for a .js file, and there is nothing to find.
02
What it measured
Run against the live demo on 2026-07-31, on mobile, with Lighthouse 12.8.2.
- Performance
- 100
- Accessibility
- 100
- Best practices
- 100
- SEO
- 100
The whole page is three requests and 7.2 KB — the document, one stylesheet and the favicon. Total Blocking Time is 0 ms and Cumulative Layout Shift is 0, which is roughly what you would expect from a page with no script to block on and no webfont to swap in. The run is reproducible against the demo, which is the only reason it is quoted here; an unverified score is worse than none.
03
Keeping it workable
The harder problem was not removing the JavaScript — that part is easy — but leaving something pleasant to work on afterwards. Layout is driven entirely by CSS custom properties: one type scale and one spacing scale, each interpolating with the viewport through clamp(). What that buys is a codebase with no layout breakpoints to keep in step, which matters far more six months in than it does on the day.
Exactly one width query survives, and it is not a layout query — it offsets in-page anchors against the sticky header, whose height steps when the nav wraps. It carries a comment explaining how to re-measure it, because that number was measured rather than reasoned and nobody would guess it otherwise.
04
Contrast, measured where it bites
This is the decision that took longest and the one most worth defending. It is easy to publish a contrast ratio taken against the page background and be quietly wrong, because the real floor is a link sitting inside a card, on a lighter surface than the page. Measured there, the template's worst pairing is 6.9:1 against the 4.5:1 that WCAG AA asks for.
Dark-only is a choice for a related reason rather than a corner cut. Honouring prefers-color-scheme is cheap; honouring it well is not. Better to ship one theme that has actually been checked than two where the second has not.
05
The launch switch
The most satisfying detail is the smallest one. A single flag, SITE_NOINDEX, drives both the robots.txt route and every page's robots meta tag, so a site can be built, shared and reviewed before it is findable.
The counter-intuitive part is what it deliberately does not do: while the site is hidden, robots.txt still allows crawling. Adding Disallow: / reads as the stricter option and is the one that gets people indexed — block the fetch and the crawler never reads the noindex, so a URL can sit in results on inbound links alone, a title with no page behind it. robots.txt is a generated route rather than a static file precisely so it cannot drift away from that flag.
06
Where it came from
One last thing, because it is the honest version and also the more interesting one: the template was not written fresh. It was extracted from this site by de-branding it, which is why the engine underneath both is the same engine.
That is a real constraint rather than a marketing line. The two now sit in separate repositories with nothing keeping them in sync, so a fix to shared code has to be carried across by hand. So a manifest and a drift check now exist to make that failure loud, which is roughly the shape most "we'll just copy it over" decisions take eventually.
