Skip to content
Go back

Netlify Pulled The Plug β€” And Exposed The Vendor I Never Chose πŸ”Œ

Every URL on this site started returning a 503 at a quarter to three on a Thursday morning. Not a slow build, not a half-finished deploy β€” every single page, with a one-line body reading usage_exceeded.

The part I keep coming back to is what the billing page said at that exact moment: the month’s credits, untouched. The enforcement fired while the meter read zero, and there was nothing in the dashboard I could press to clear it. An error state I could not reach, applied to a resource I was apparently not using.

Nobody noticed for hours, on account of the hour. For a blog that is almost a non-event β€” you wait, or you file a ticket, and the words come back either way. But the blog was not the only thing living behind that account.

Diagram comparing the publishing chain before and after leaving Netlify, as two rows of five boxes flowing left to right. The top row, labelled before and two hosting vendors, shows git push as the only trigger, then an orange Netlify box labelled builds, then a second orange Netlify box labelled serves the origin, then a green Cloudflare box labelled edge, then the reader. The bottom row, labelled after and one hosting vendor, shows git push, then a grey Actions box labelled builds, then a green Worker box labelled serves the origin, then a green Cloudflare box labelled edge, then the reader. A caption panel underneath explains that Netlify's two boxes are gone, that its build moved to GitHub Actions and its origin moved onto the company already running the edge so serving went from two accounts to one, and that the markdown file, the build and the reader are unchanged.

Three sites, one shared bucket

Three things lived on Netlify: this blog, Aura β€” a multi-store platform where inventory is shared across stores rather than duplicated per shop β€” and BitzyStore, my own small site that syncs against the same inventory as my eBay store. I built BitzyStore that way because I do not need Shopify’s full wardrobe of features, and because the budget is a shoestring, not a basket.

RoleRiff, my career-tech SaaS, was never on Netlify. It runs on Cloudflare, and Cloudflare handles it entirely, end to end. Hold onto that, because it turns out to be the whole argument.

I pay for GitHub and I pay for hosting, and between them the quotas go quickly. That is normal, and it is fine β€” you buy what the work needs. What is not fine is discovering the ceiling by falling through it, or paying one vendor to do a job a second vendor I already own is doing for nothing.

The one vendor I never actually picked

Here is the embarrassing part. When I restarted this whole journey, Netlify was still the new thing everyone recommended, I had used it and liked it, and so I used it again. No comparison, no spreadsheet, no evening spent reading pricing pages. I just went with what I already loved.

That is not how I choose anything else. It is not even close.

How I pick when I actually pick

When I sat down and did this properly the last few times, the reasoning was obvious in retrospect:

Every one of those got a proper look. Netlify got nostalgia.

What it was costing, since that is what this comes down to

NetlifyCloudflare
Hosting this blogUS$9.99 a monthFree tier
Running RoleRiffβ€”Already on it
DNS and the edge for every projectAccount number twoAlready on it
What I hand over each monthUS$9.99US$0

I want to be careful with that table, because US$9.99 is not a lot of money and I am not going to pretend this move was about saving it. A static blog asks almost nothing of a CDN, so I am sitting comfortably inside Cloudflare’s free tier β€” but if this site needed a paid plan tomorrow, I would buy it without the flinch.

That is the actual change. I am not avoiding paying for Cloudflare. Cloudflare already runs RoleRiff end to end and serves every other project I have, so I have effectively already decided it is worth money to me. What ended was the second invoice β€” a vendor charging me to do work the vendor I had already chosen was doing anyway.

Fewer bills, and not a smaller one. Both of those are wins, but only the second one was the point.

Why Cloudflare, specifically

Three things, in order:

  1. It was already half the chain. Cloudflare sat in front handling DNS and the edge β€” the nameserver move I wrote about a few weeks back. So the site already touched it on every request.
  2. The free tier covers the entire job. This is a static site. It builds to files, and Workers serves files. There is no server to keep alive and no seat to buy.
  3. It removes a vendor rather than adding one. After the move, one company does the DNS, the edge and the serving. Fewer accounts, fewer invoices, fewer quotas to run into at a quarter to three on a Thursday.

The thing that had kept me on Netlify was never a feature. It was a habit I had never taken out and looked at.

What the pipeline does now

The shape barely changed:

Astro still builds the same dist/, and the _headers file still decides what the site is allowed to be remembered for β€” though Cloudflare applies it differently enough to Netlify that I had to rework it, and that follow-up is already planned. The deploy is a single wrangler deploy as the last step of the build, so a type error fails the run while the live site keeps serving the previous version.

The only real change is that the middle two boxes now belong to the same company as the edge.

What I would tell someone starting again

Do the analysis on every vendor, including the one you already like. Liking a product is a perfectly good reason to evaluate it β€” it is not a reason to skip the evaluation, because the thing you loved two years ago is not necessarily the thing you are paying for today.

And if a hosting provider can take your whole site offline over a meter you cannot see, that is worth an evening of comparison shopping before it happens again.


If you have moved a site off Netlify β€” or you have a vendor you stayed with longer than you should have, I would like to hear about it. πŸ‘‡


Share this post on:

Previous Post
130 Changes In One Commit β€” Then I Tried To Break It πŸ”¬