← ls posts/

Clean Code, Dirty Web

Aug 16, 2026 · ~ 8 min read

#ai#opinion#hosting

A near-perfect Lighthouse score still only got a B on carbon usage. So whats the point? when AI crawls it anyway, and keeps the world on fire 🔥

web crawlers climbing over a headless body

A Perfect Score, A B Grade, and the Slow Realisation the Party Already Moved On

For a while back in my last role, I was maintaining client websites and ecommerce on WordPress, which, if you've never had the privilege, can often feel like being a slumlord for other people's buildings. You're not fixing anything. You're doing the digital equivalent of nailing a "mind the gap" sign over a hole in the floor, calling it a day, and praying to god it doesn't cave in and take hours of your life with it, at least between 9 and 5. Somewhere on every one of those sites was a 3MB slider library doing a job a CSS transition could handle, but alas, the theme's page builder locked "custom CSS" behind a pro subscription (imagine doing this btw, taking something 100% free, then gating it... what a dick move), so the plugin stayed, because a client once asked for "something like that other site." Not to mention the form plugin that loaded on every single page, including the ones with no forms, because turning it off risked the whole thing coming down. You didn't fix it. You kept the lights on and hoped nobody looked too closely at the wiring.

So getting a genuinely clean Lighthouse score on my own site, with no bloat, no zombie plugins, nothing shipped "just in case", has been a thing I've wanted for myself for a while now, just to acknowledge I can do it. Not a 100 across the board necessarily. Just all green. Proof I could build something that wasn't secretly dying the moment I stopped looking at it.

I got there. 93 performance, 100 on accessibility, best practices, and SEO. That will do I guess.

Lighthouse score for jamjam.dev

Its green, thats all that matters

Then out of curiosity I ran jamjam.dev through websitecarbon.com, expecting top scores, and got a B instead. "Cleaner than 79% of web pages globally" it told me, like that was meant to be comforting. I mean it's not bad though, so I should curb my expectations a bit.

I mean, I did everything right. Minimal JS, images optimised within an inch of their life, a stack (Next.js, Payload, hosted on Vercel, Cloudflare on DNS duty, Neon for the database, both Vercel and Neon set to Sydney because Melbourne isn't on the region list) chosen specifically because it's lean. And the ceiling is still a B, because a big chunk of a page's carbon score isn't code quality at all, it's the physical distance the data travels and the energy mix of the grid serving it. No amount of tree-shaking fixes geography.

Look to be fair to anyone that does read this, underneath the green bit, was a bunch of red and yellow warnings, some of them I could fix, some I can't, and overall I just don't care enough.

Then I realised I might be optimising for an audience that's already leaving

While I was busy thinking about all this for no apparent reason, someone out there was asking an AI chatbot how to make pancakes. Instead of landing on a 4MB recipe blog with 20 ads, and layout shift that conveniently moves the "jump to recipe" button only to then load a video ad that takes up a third of the page, you dismiss that and read a back story on the author's granny.

The AI just answers.

Somewhere behind that answer, a data centre burns through however much energy an LLM query costs, and the person who asked gets their pancake recipe.

My first instinct was, and still is: great, so all this careful, lean, low-carbon engineering I've been chasing is basically a waste of time considering what AI is about to do to web traffic and the environment. It felt a bit like optimising the fuel efficiency of a horse and cart in 1910, utterly pointless.

Except, and I actually went and checked the numbers on this rather than just vibing my way to a conclusion, because that felt important. Turns out it's not that simple.

Google's own published data puts a standard Gemini text answer at about 0.24 watt-hours, less energy than watching nine seconds of TV. Sam Altman said the average ChatGPT query is around 0.34 Wh, roughly what an oven uses in a second. Meanwhile a bloated ad-heavy recipe blog page can run to several megabytes, dozens of ad and tracking hosts, and real-time ad-bidding auctions that a peer-reviewed 2026 study found add 34% more energy on their own, just for the privilege of deciding which mattress ad to show you mid-recipe. One working paper puts a typical ad-supported search session at roughly 5× the electricity of an equivalent AI answer.

So per query, for a standard model, the AI answer can genuinely be the more carbon-efficient way to get that pancake recipe. That's not the outcome I expected going in. The honest caveat: this flips the moment you're talking about a heavier reasoning model doing multi-step "thinking" rather than a quick lookup, some of those can burn 8–9× more energy than a standard query. And the real problem with AI was never really the cost of one question, it's the sheer volume of questions, compounding at a scale ad-tech never had to.

And then there's the geography, which I also went and checked

I picked Sydney for everything specifically so the round trip is short for the people actually reading this (hi, amores). But it turns out that doesn't matter nearly as much as I assumed, because the crawlers doing the AI training scraping barely have a presence outside the US at all. GPTBot runs out of exactly three cities: Phoenix, Atlanta, Des Moines. Perplexity's crawler is functionally just Virginia. Anthropic doesn't even publish where ClaudeBot lives (typical Anthropic), but there's no sign it's any more distributed. The round trip from Sydney to US-East is a genuine ~185–210ms each way, a real, physical distance tax that no amount of edge caching on my end fixes, because the bottleneck isn't my infrastructure, it's theirs.

That being said: the bot that actually fetches a page live when someone asks ChatGPT a question about it does have a Sydney node, same as Googlebot. So real-time lookups get served locally. It's specifically the bulk training crawlers, hoovering up the web to feed the next model, that are making my three blog posts do a return trip to Iowa for the privilege of being distilled into one sentence nobody will ever trace back to me.

The nice thing nobody's saying out loud

Buried in all this doom is something worth admitting: not dealing with the ad-festation anymore is genuinely nice. No RTB auctions running in the background of your reading experience, no eleven tracking scripts fighting for a spot in the waterfall, no "jump to recipe" button because there's no ad inventory to scroll past on the way down. AI can parse a page and hand you the actual content, stripped of the fifteen years of accumulated monetisation cruft the ad-web bolted onto everything. That's a genuine improvement, and I don't think it's fair to pretend it isn't.

But, and this is the thing, the web was never actually free. "You are the product" is the cliché for a reason. Gmail isn't free. That pancake recipe was never free, you were just paying in eyeballs and data instead of dollars, and somebody made real money on the difference. Trading one invisible payment for another isn't the web suddenly becoming generous. It's a new toll booth, run by a new set of people, on the same road.

What I think

Cloudflare's proposal, making the web "readable, discoverable, callable, and payable" for agents, so a small publisher gets paid in fractions of a cent per fetch instead of being scraped for nothing, is, I think, the right direction. It's the first serious attempt at fixing where the value actually flows: from the people making things to the people summarising them.

So here's my actual take, not the hot one: keep building things lean, because that's just good engineering regardless of who's reading, whether its your mum or a crawler in Des Moines. Treat "agent readable" as a real constraint now, same as accessibility and performance. And keep an eye on whether pay per fetch ever gets real volume behind it, because that's the first mechanism in years that might pay someone like me for three blog posts nobody reads, instead of just summarising them out of existence for free. I mean, I do have some real ideas beyond this canary of a website ( I use it to test PayloadCMS things...)

My carbon score's still a B. The agents are still crawling from Iowa. The grid's still burning what it burns. So might as well try and make things that are efficient.

// author

Jamie - whilst filming the Mountain Pygmy Possum film for NECMA

Jamie McNeil

Creative developer based in NE Vic.

I build websites, web apps, and AI-powered tools, then usually rebuild them once I've figured out a better way. Currently looking for my next role.