The Boring Stack That Lets Us Ship
Every few months someone asks what our "stack" is, expecting a list of trendy tools. The honest answer is boring on purpose: .NET 10, Blazor, PostgreSQL, and Cloudflare. That's most of it. The boring part is the point.
Boring means we spend our time on the product
Exciting stacks come with a tax: the framework churns, the ecosystem argues, and you spend your week keeping up instead of shipping. We'd rather spend that week building the thing a customer actually asked for.
Our whole product shelf — the marketing site, the SaaS apps, the admin tools — runs on the same handful of pieces:
- Blazor Server for the UI, so one language (C#) spans front and back and we're not maintaining two mental models.
- EF Core + PostgreSQL for data, boring and bulletproof.
- One shared server running everything in Docker Compose behind a Cloudflare Tunnel — no load balancers to babysit, no per-app infrastructure to reinvent.
None of that will win a "hot new tech" award. All of it lets a small team run a dozen apps without drowning.
The multiplier: a template, not twelve snowflakes
The real trick isn't the stack, it's that every app starts from the same stack. We keep a starter template with auth, billing, admin, and analytics already wired up. A new product doesn't begin at zero — it begins at "the boring 80% is done." When we improve the template, we ship the improvement out to the other apps as a patch.
That's how one weekend can turn into a live product instead of a login screen.
Boring where it counts, sharp where it matters
Being boring about infrastructure buys us the freedom to be interesting about the actual product — the feature that solves your specific annoyance. The customer never sees our database or our container setup, and that's exactly how it should be. They see a tool that works.
So no, we're not going to rewrite everything in the framework that trended last month. We're going to keep shipping.
This is a draft — edit the voice, trim it, or expand any section before publishing.