← writing

The stack we build every site on.

We get asked, often, why we don't pick the framework that shipped six months ago. The honest answer is unflattering to the framework: it doesn't have enough bugs yet. What you want from a stack is not novelty but coverage — of edge cases, of failure modes, of the obscure deployment your one weird customer is running.

Coverage takes years. A dependable stack is one where every error message you'll ever see has already been seen by someone else, written about, and answered. That's not innovation. That's accretion, and accretion is what we want.

what we mean by boringBoring isn't grey. It's settled.

"Boring" is the wrong word for what we do, but it's the only word that survives contact with marketing. What we mean is settled: tools that have stopped changing because they've arrived. Most of the moving parts on a web request — DNS, HTTP, TCP, SQL, the C runtime — are settled. We try to keep the rest of the stack in the same shape.

Concretely, in 2026, that means a server-rendered framework (we use next.js in static mode), a real relational database (postgres), and a CDN in front of the whole thing. The interesting decisions happen above this line. Below it, we want nothing interesting to happen at all.

  • One database. Postgres until proven otherwise.
  • One language on the server. Whichever one the team already knows.
  • As little JavaScript on the client as the design allows.
  • A CDN doing the heavy lifting on read.
name = "the-boring-web"
compatibility_date = "2026-04-01"

# everything pre-rendered at build; no workers, no kv,
# no client framework. it's a directory of html files.
assets = { directory = "./out" }
routes = [{ pattern = "theboringweb.co/*" }]

That file is the entire deploy surface. Push to main, Cloudflare builds, the site is global in under thirty seconds. We have nothing clever to say about the build pipeline because there isn't one to talk about, which is the point.

"If the answer to 'how does it work' is a diagram with more than four boxes, you have not finished designing it." — a senior engineer, on a Tuesday.

what we won't doThe shape of a refusal.

We're asked about edge computing, vector databases, agents, and two-letter file-format companies on a near-monthly basis. The refusal is always the same shape: not yet, and probably not for this site. A marketing site for a plumber in Hackney is not the place to discover whether a brand-new query engine has the failure modes the docs implied.

When the answer should be yes, it'll be obvious. We'll be the ones telling you. Until then, this site loads in under a second on a phone in a basement, and that is the only metric the plumber's customers will ever notice.

§ — next
next →Your business doesn't need a rebuild every two years.
← previousthis is the first post.

Boring websites, built to last. We make those.

get in touch →