Work
You're looking at the portfolio.
There are no client case studies on this page. The studio is early, and putting up logos or invented mockups would mean showing you something that isn't real.
So judge the site instead. It was built by whoever would build yours, under the same constraints, with no client to blame for the compromises. The figures on the right were measured on and you can repeat any of it from the page you're standing on.
The calendar, honestly
The studio is taking on work right now.
This is the least busy the studio will ever be.
Nothing in that is a sales tactic. A studio with no case studies has more room than one with a waiting list, and the sentence stops being true the first time it stops being true. If you want the version of this where your project is the only thing on the board, that window is open now and it closes on its own.
Everything happens at one desk.
The person who reads your first email is the person who draws the layouts and writes the code. No account manager relaying it, no junior picking up the build. That's the good part, and it's also the constraint, because one desk only fits so much at a time.
Projects start in the order they're booked.
There's no queue-jumping and no rush fee, because a rush fee is just a way of charging someone else's client for being late. When the calendar is full the answer is a date, not a discount.
Calendar checked . A test fails if nobody checks again, the same way every other number here works.
- Trackers, analytics or cookies
- 0
No third-party script runs on this site. The content security policy allows outbound connections to this origin only, so one couldn't be added quietly.
- Automated accessibility violations
- 0
axe-core against WCAG 2.2 Level A and AA, on every page, at phone, tablet and desktop widths. Worth saying plainly: automated tools catch only the machine-checkable barriers. This is a floor, not a pass mark, and nobody who uses a screen reader daily has audited this site.
- Pages that work without JavaScript
- 12 / 12
Every page loaded in a browser with scripting switched off: the heading paints at full opacity and real size, the text is in the page as delivered, and the contact form still submits and still validates. Checked in a real browser, not inferred.
- Slowest page to appear, 60 runs
- 1.7 s
Largest Contentful Paint on the deployed site, which matters because a local build is where this problem was hiding. Measured in Chrome with 4× CPU throttling and Fast 4G emulation, cold browser cache, on six pages at two widths, five runs each, with the browser warmed first so the figure is the site rather than a cold browser. The slowest of the sixty was 1.7 seconds and the middle one 1.5. The threshold this is judged against is 2.5 seconds. Every one of the sixty runs recorded a single candidate, which is the part worth checking: it means the largest thing on the page was painted in the first frame and nothing arrived afterwards to displace it. Before this rebuild the same measurement returned 9.5 seconds. Two caveats, because you would find them eventually. Every page here is rendered on demand, so in the moment just after we publish a change there's no server running yet and something has to start one: an earlier sweep caught that once, at 2.5 seconds, with the first byte taking 1.2 of it. We make that first request ourselves as part of publishing, so a visitor gets the warm one, and in this sweep no run caught a cold start at all: the slowest first byte of the sixty was under half a second and the middle one under two tenths. And the measurement is only as trustworthy as the machine taking it: run on a laptop that had been building and testing for hours, the same sweep reported half a second slower across the board, which was the laptop. This one was taken cold.
Decisions
Four choices made on this page, and what each one cost.
A portfolio of finished work shows you the outcome. This shows you the reasoning, which is the part that transfers to your project. Every trade-off below is live on the site you're reading.
Every page is rendered on demand. None of it is cached at the edge.
The content security policy issues a fresh single-use token per request, which is what makes an injected script impossible rather than merely unlikely. A token like that can't be baked into a page that was cached an hour ago for someone else.
What it costs
We give up the CDN cache hit and pay a server render on every visit. On a site this size that's a few milliseconds. On a larger one it would be the wrong trade and we would make it differently.
There's no analytics on this site. No tag manager, no pixel, no session recorder.
It's the only way the privacy policy can be short enough that someone actually reads it, and true enough that we can point at the code behind every sentence in it.
What it costs
We don't know how many people read this page, how far they scroll, or which link brought them here. We find out when someone writes to us, and not before.
One theme, tuned once. There's no light mode.
A second theme doubles the number of colour pairs that have to hold their contrast ratios and halves the attention each one gets. We would rather one scheme be right than two be approximately right.
What it costs
If you prefer light interfaces, this site doesn't offer you one. That's a real cost to a real group of people and we aren't going to pretend otherwise.
No icon library. The arrows are text characters.
Six glyphs didn't justify a dependency, a build step and a network request. The ones here are ordinary characters the font already contains.
What it costs
Anything more complex than an arrow has to be drawn by hand as SVG, which is slower to author than picking from a set.
When a project ships and the client is happy for us to talk about it, a case study lands on this page, with the same accounting of what it cost as the four decisions above. Until then the page stays as it is, which is the honest version of a portfolio for a studio at this stage.