Northal /·Work·2026·In flight

The decisions, not the features.

The site you're on, built the same way I build client work. No dark mode kept for its own sake, no shortcut on the one comparison that actually needed to be credible. Just decisions that hold up, and a site that does what it says.

Client
Northal · in flight
Year
2026
Services
Brand · Web · Copy
Stack
Next · Payload
Role
Studio of one
The Northal homepage, showing the hero headline and the opening of the reel
[ studio · self-build ]Fig. 01
the site you're reading
§ 01 · Brief

Including the parts that don't flatter it.

A studio site has one job: make the case that I can build. So I didn't reach for a template or a page builder. I built it the way I'd build yours, and left every word editable from a plain admin panel, the way a client would run their own.

That includes the decisions a feature list would quietly leave out. Dark mode was built, then deleted: it doubled the contrast work for a theme nobody was choosing, and one theme is one thing to get right. There's no single published price on the site: every project is different enough that one number would flatter the simple jobs and undersell the complex ones, so each gets scoped and quoted individually instead. The retainer has no lock-in: cancel any time and the site keeps working, you just lose the person maintaining it.

The clearest example is the comparison on my own homepage. The first version measured the new build against a "before" site I built myself, a proper period-piece rig, deliberately slow and cluttered. It scored 71, comfortably faster than the real median of 59 it was meant to represent, because a site built to make a point is never as slow as one a real business actually ended up with. That gap is exactly why it got replaced: the comparison needed to be measuring something real, not something convenient, so what ships now is the measured median of ten actual North Yorkshire joinery sites, on mobile, none of them named.

A site built to make a point is never as slow as a real one.
§ 02 · System

Measured, not estimated.

Built on Next.js with Payload as the CMS, Postgres for data and Vercel Blob for media. The page copy, home, studio, services, work and contact, plus the nav, footer, brand details and even the email templates are all CMS fields, so the site runs without touching code. Edits publish in seconds via on-demand revalidation.

The contact form runs four separate gates before anything is saved: a honeypot, a time trap, a per-address limit and a per-network one. Verified by trying to break it, which is the only verification worth the name. The honest submission goes through. The honeypot one writes nothing and sends nothing. A fresh address doesn't buy you a way around the network limit.

Nineteen town pages run the same structured data and generated sitemap as the rest of the site. Deployed PageSpeed: 99 on mobile, 100 on desktop, measured on the deployed URL over a throttled connection rather than on my own machine. The one third-party script is the privacy-friendly analytics beacon, and it's the only one.

Speed
99/100
Form gates
4, all live
Third-party
1 script

Thinking about
a project like this?

Tell me a little about it. Every email goes straight to the studio lead, reply within two working days.

Start the conversation →