← Back to blog

We saved $82,920/year. Here's how.

We run Eulerpool, a financial data platform that serves millions of page views per month. In March 2026, we migrated our entire infrastructure from Fly.io + Vercel to Hetzner Cloud servers. Our monthly bill dropped from $7,370 to $460. This is the full story — the numbers, the pain, and why it led us to build RAW.

The bill that started everything

It wasn't one invoice — it was the pattern. Every month, the total crept higher. We were running a lean team, but our cloud bill looked like we had a 50-person SRE department. Here's what we were paying:

Monthly Cloud Invoice
Fly.io (compute, volumes, bandwidth)$4,044
Vercel (Pro, bandwidth, edge functions)$3,326
Total (before)$7,370/mo
Total (after — Hetzner)$460/mo
Annual savings$82,920
Cost reduction94%

What we were running

Eulerpool is a financial data and analytics platform — think Bloomberg, but accessible. We serve equity research, financial statements, and market data for thousands of companies to a global audience.

Our stack:

  • Next.js frontend on Vercel (~80 routes, SSR + ISR)
  • Node.js API servers on Fly.io (3 services, multi-region)
  • PostgreSQL on Fly.io (primary + read replicas)
  • Redis on Fly.io for caching
  • Cron workers on Fly.io for data pipelines
  • Custom ETL jobs for financial data ingestion

Where the money went

We broke down every line item. The results speak for themselves:

ServiceBeforeAfterChange
Compute$2,880$340-88%
Database$760$80-89%
Bandwidth / Egress$2,100$0-100%
Frontend hosting$1,230$0-100%
Redis / Caching$280$40-86%
Cron / Workers$120$0-100%
Total$7,370$460-94%

The migration

Migrating wasn't painless. Here are the five hardest parts:

  1. SSL certificate management. Vercel and Fly handle this automatically. On bare metal, we had to set up Caddy with automatic Let's Encrypt renewal for every domain and subdomain.
  2. Zero-downtime deployments. No blue-green toggle. We wrote our own deployment scripts with health checks, rolling restarts, and automatic rollback on failure.
  3. Database migrations. Moving a live PostgreSQL database with zero downtime required pg_dump streaming, logical replication, and a carefully timed DNS cutover at 3 AM.
  4. Observability. No built-in dashboards. We had to wire up Prometheus + Grafana for metrics, Loki for logs, and build our own alerting pipeline.
  5. DNS and networking. Private networking, firewall rules, reverse proxies — all things the PaaS abstracted away. We spent a week just on networking.

The realization

After the migration, we had a working system that saved us $82,920/year. But the process took three engineers four weeks. We kept notes on everything — every script, every config, every gotcha.

And we thought: What if all of this was one command?

What if you could type raw deploy and get a production server on Hetzner — with SSL, Docker, health checks, CI/CD, and monitoring — in 90 seconds?

That's when RAW became a product instead of a migration script.

Why this matters beyond us

We're not the only ones doing this. The "cloud repatriation" trend is real:

  • 37signals moved off AWS, saving $7M+ over 5 years
  • David Heinemeier Hansson documented "leaving the cloud" extensively
  • Hetzner's revenue grew 25% YoY as startups discovered bare metal pricing
  • A 2025 Andreessen Horowitz study found the median startup overpays for cloud by 2–3×

The cloud premium made sense when managing servers was hard. But modern tooling — Docker, Caddy, systemd, GitHub Actions — has closed that gap. The only thing missing was the developer experience. That's what RAW provides.

How RAW pricing works

We built RAW on four principles:

01

No markup on compute

You pay Hetzner prices. We don't resell CPU hours at 5× markup like AWS.

02

Zero egress fees

Bandwidth is included. No surprise bills for serving traffic.

03

Flat monthly pricing

You pick a server size, you pay a fixed price. No usage-based surprises.

04

Open source CLI

The tooling is open. You can eject anytime. No lock-in, no proprietary runtime.

What RAW looks like

Here's the full workflow. Two commands to go from zero to production:

Deploy to production
$ npx rawhq deploy
# Provisioning CX22 in Falkenstein...
# Installing Docker, Caddy, monitoring...
# SSL configured for app.example.com
# Health check passed ✓
# ✅ Live at https://app.example.com (91s)

Import an existing project with zero config:

Import existing project
$ npx rawhq import --from fly
# Detected: 3 services, 1 database, 2 volumes
# Migrating database (streaming pg_dump)...
# Rewriting Dockerfiles...
# Configuring reverse proxy...
# ✅ Migration complete. Estimated savings: $6,910/mo

The bottom line

We built Eulerpool on the cloud because it was easy. We left the cloud because it was expensive. And we built RAW so the next team doesn't have to choose between the two.

If you're paying more than $500/month for cloud hosting and you don't need multi-region, auto-scaling, or an SLA backed by a Fortune 500 company — you're probably overpaying.

We were. By $82,920/year.

Try it yourself

One command. 90 seconds. See what your infrastructure costs on RAW.

$ npx rawhq deploy
Get Started Free