Behind the scenes of a global SaaS
Published {$created} by Carsten Blum
In this post I'll describe the Nureti tech stack - the reason for this page is really two fold; a bit of insight for the tech interested among us, and a bit of self promotion on my part.
You don’t need to be an AWS-certified hacker-guru to build a fast, global SaaS. You just need solid code, sensible tools, and a bit of stubbornness.
Design Philosophy: Speed, Simplicity, and Sanity
Here’s a peek behind the curtain at how we built Nureti (time tracking for freelancers & teams) and its sibling ftpGrid – both blazing fast, fully GDPR-compliant, and running without a single line of AWS config.
Landing pages have to be fast. Really fast. Especially on mobile. Both Nureti and ftpGrid hit high 99% on Google Pagespeed Insights (mobile too), and I’ll be honest: I still obsess over that missing 1%. But I like images. And videos. And I haven’t fully wrangled the JavaScript yet. So it stays.
The bigger point: performance doesn’t require hyperscaler magic. You just need smart, lean design and an infrastructure stack you can reason about.
Infrastructure: EU-First, Self-Managed, No Hype
We don’t host our own data center (though I dream of it). Instead, we rely on fast, affordable, EU-based providers that give us the control we need:
CDN/DDoS: Bunny.net – their Shield & CDN combo is rock solid, priced right, and privacy-respecting.
Servers: Hetzner Colocation in Germany. We own the hardware, they provide the space, bandwidth, and reliability.
OS: Debian 12 across the board. Eyeing Debian 13 for later this year.
SMTP: Maileroo – not EU-based, but the only SMTP provider that met our reliability and deliverability needs.
DNS: Bunny handles most zones; ClouDNS is our registrar of choice.
CI/CD: Self-hosted GitLab – simply because it works and stuck with me from my early Git days.
I am AWS Certified (Practitioner, Dev, Architect) and a Certified Kubernetes Admin – but I don’t use either here. Why? Because launching a SaaS MVP with EKS and managed Postgres is massive overkill.
One well-specced server (4 cores, 16 GB RAM, fast SSD) can handle thousands of concurrent requests – if you know your indexes and write sane code. This setup grew from MVP to production and still holds strong.
DevOps Stack: Bare-Bones, Battle-Tested
Here’s the backbone:
A handful of beefy servers (with room to scale)
Portainer for simple container management
Docker Compose for orchestration
Prometheus for metrics
Grafana for visualization
Node Exporter + cAdvisor for host/container insights
Caddy for managing HTTPS + ingress from Bunny CDN
Internal Docker networks handle service communication. It’s clean, minimal, and fast.
Software Stack: Simple ≠ Weak
Database:
PostgreSQL – because it’s reliable, well-documented, and I’m a fan.
Backend:
Go, using the Gin framework. Go is like C with guardrails – performant, elegant, and a joy to maintain.
Frontend:
Originally Angular… but after a few weeks of endlessly creating components, I switched to React + Vite + Tailwind. It’s faster, leaner, and honestly, more fun.
Landing page:
Plain old PHP. No, really. Static HTML rendered server-side, pushed via Bunny CDN. Why? Because SEO tools kept choking on my JS bundles, and I got tired of debugging phantom warnings from Ahrefs and Semrush.
Nothing beats opening a blank editor page and typing:
<? phpinfo() ?>
It felt like 2005 again – and I loved it. Nostalgia aside, the outcome speaks for itself: 124 pages, 100% health score in Ahrefs.! Yeah!
Final Thoughts: Stop Overbuilding
You don’t need hyperscale architecture to build a reliable, performant SaaS.
You need your code to be clean, a lean infrastructure, tools you understand and do remember those database indexes. 😉
We’ve shipped two products running globally, with great performance, full EU compliance, and total control – without touching AWS or Kubernetes.
Sometimes, “boring tech” is the best kind.