Back to the comparison

One home, not another meter.

The billing records and production incident that led me from metered managed platforms and fragmented AWS infrastructure to one consolidated Hetzner operating surface.

Published 12 August 20268 minute readOwner billing records · identifiers removed

I did not move because managed platforms failed at being managed platforms. I moved because their billing and limits turned ordinary development activity into operational risk for the way I build.

In April, one Vercel receipt reached $137.06. In July, customcapbd.com crossed a Supabase cached-egress allowance and its production requests were restricted. Meanwhile, an AWS stack forecast $213.76 for the month. The causes were different, but the pattern was the same: I was renting separate meters for work I wanted to operate as one system.

19 APR 2026

Shipping code became a billable event.

During this period I was pushing frequently. Production pushes triggered automatic builds, and the receipt made build activity—not application traffic—the dominant charge.

Unexpected did not mean unexplained once the bill arrived. It meant ordinary development cadence had become another usage meter I needed to watch.

Redacted Vercel receipt lines showing 1,070 build minutes charged at $115.14 and a total of $137.06.
Vercel receipt · public cropPaid 19 April 2026

The receipt records 1,070 build minutes at $115.14. The complete paid total was $137.06.

Redacted Vercel receipt lines showing build CPU minutes, build minutes and a total of $48.44.
Following Vercel receipt · public cropPaid 24 May 2026

The following receipt separately records build CPU minutes and build minutes inside a $48.44 total.

Build minutes
1,070
$115.14 on the April receipt
Paid total
$137.06
Receipt paid 19 April 2026
Following total
$48.44
Build CPU and build minutes both present

11 JUL 2026

A quota became a production event.

customcapbd.com crossed the cached-egress allowance. Supabase restricted production services and requests returned HTTP 402 until the plan was upgraded or the billing cycle reset on 26 July.

The database was not deleted: dashboard database access remained available. But the production path was blocked. I paid $21 for the immediate upgrade instead of leaving the business stalled, and the interruption broke my momentum on the artwork/KAI build.

Supabase usage screen stating that all services are restricted and showing 29.269 gigabytes of cached egress against a 5 gigabyte allowance, or 585 percent.
Supabase usage · public screenBilling cycle 26 June–26 July 2026

The production screen records 29.269 GB of cached egress against 5 GB and states that project requests respond with HTTP 402 while restricted.

Cached egress
29.269 GB
5 GB fair-use allowance
Allowance used
585%
Recorded on the usage screen
Production response
HTTP 402
Requests restricted until upgrade or reset
Immediate recovery
$21
Owner-paid upgrade instead of waiting for 26 July

The separate free-project inactivity pause shown in the private source folder is not part of this incident and is intentionally excluded from this record.

Redacted AWS cost summary listing monthly service costs with a total of $188.70 month to date and a $213.76 month-end forecast.
AWS cost summary · public cropCaptured 12 August 2026

The owner-captured summary records $188.70 month to date and a $213.76 month-end forecast. Resource identifiers and topology were removed.

12 AUG 2026

The AWS bill was a stack of responsibilities.

AWS solved each infrastructure concern with a capable service. The operating problem was accumulation: compute, container tasks, ingress, managed data, networking and support each introduced another meter and another surface to understand.

EC2 compute + overhead
$90.24
Fargate + load balancing
$31.75
RDS + ElastiCache
$23.60
Support + VPC
$41.20

These grouped lines describe the owner-captured month, not current AWS list prices or a claim that every AWS architecture costs the same.

NOW

One machine changed the unit of cost.

$70–$80

One monthly server bill

The consolidated Hetzner machine now carries the server work together. Inside its physical capacity, shipping another build, adding another backend, or moving data between local services does not create another provider usage line.

  • DeliveryCoolify deployments, domains, health checks and rollbacks
  • DataPostgres, Redis, vector search and application storage
  • BackendsNode, Rust and Python services on shared compute
  • Background workCRON, workers, queues, scraping and browser systems
  • AI infrastructureAgents, gateways and supporting model services

“Unlimited” here means there is no internal per-build, per-backend or per-database meter. It does not mean infinite compute, storage, bandwidth or resilience; the physical machine is the boundary.

Control moves responsibility, too.

  • Patch and harden the host and every exposed service.
  • Maintain backups, test restores and keep a recovery path outside the machine.
  • Monitor capacity, health, storage and network behavior before users feel it.
  • Design for one larger failure domain instead of pretending consolidation removes failure.

Specialist services still earn their place.

A server does not become an identity provider, an email-delivery network or an observability product merely because it has spare capacity.

Clerk
Identity, MFA and organisations
Resend
Transactional email delivery
Sentry
Errors, tracing and uptime

The lesson was not “self-host everything.”

The lesson was not “self-host everything.” It was to stop paying unrelated meters for workloads that naturally belonged together, while keeping specialist services where they still earn their place.