The blog
AUG26

We Hit the Free Tier. On Purpose, Sort Of.

This week: a real ticketing system with QR codes and Stripe payouts landed. And in the same stretch, we got an email saying we'd used 100% of our free database compute allowance. On a site with, and we want to be honest about this, barely any users yet.

Our first reaction was “that can't be right.” It was, mostly, right, but not for the reason we assumed. It wasn't real people. Three newer pages had zero caching on them, so every single hit, bot, crawler, or human, re-asked the database the same question from scratch, every time. And separately, buried in an account setting nobody had gone back to check, the database was still allowed to scale up to eight times its intended size under load, when it should've been pinned down months ago. Two real, fixable things, not “too popular for our own good.”

Then, digging into that, we found something bigger: the site had been silently failing to deploy anything at all for five days. Not one alert. Not one person noticing. The app had genuinely grown past what a free hosting tier is built for: real payments, real ticketing, real infrastructure. And the free tier just quietly stopped letting new code out the door until someone went looking for why.

We fixed the caching. We fixed the database setting. And for the deploy limit itself, rather than reach for the chequebook at midnight, we temporarily held back the newest ticketing code, the part still dark behind a flag anyway, wrote down exactly what and why in the codebase itself, and got building again. The bigger decision (pay for more headroom, or properly re-architect how the app is split) is still open. We'd rather make that call properly than rush it to make an alert go away.

Building something real means eventually outgrowing the free version of everything underneath it. That's not a failure, it's just what “real” costs. We'd rather write that down honestly than pretend everything about running a startup is smooth.

And somewhere in the middle of all that, we started writing this blog, which is either a very on-brand way to process a stressful week, or just further proof we can't help narrating things as we go. Probably both.