Felipe Lachowski
← The series Episode 5 of 7

Costs: about $15 a month

HurricaneWise used to cost about $9 a month. Now it's about $15, and about $40 in a stormy peak month, mostly because the server got $2.35 more expensive and the AI runs repairs now too. The monthly numbers are estimates from my cost model, and the usage behind them comes from a script I run against every provider.

October 2026

What went up

The figures below are estimates from my cost model, informed by provider usage. My hours aren't included.

Earlier in 2026 it ran on about $9 a month. My cost model now says about $15 in a typical month and about $40 in a stormy peak month, and only two lines went up, the server and the AI.

The Hetzner server went from $5.25 to $7.60 ($6.99 for the box and $0.60 for the public IP). It's the only fixed charge on the bill.

The AI went from roughly $3.60 to roughly $7 because it now runs repairs as well. Before, all it did was write the weather interpretation. Now when something breaks a session investigates and writes the fix, and the postmortem gets written once the fix is live. That work is metered on its own API key with its own budget, and it has its own episode.

Neon, Cloudflare R2, Vercel, Grafana Cloud and GitHub Actions are all $0 on free tiers.

LineTypeWasNow
Hetzner VPSfixed$5.25$7.60
Anthropicusage~$3.60~$7
Neon Postgresfree tier$0$0
Cloudflare R2free tier$0$0
Vercelfree tier$0$0
Grafana Cloudfree tier$0$0
GitHub Actionsfree tier$0$0
Totaltypical estimate~$9~$15

Keeping the database asleep

Neon bills for the time the database is awake. After a few idle minutes it suspends.

The pipeline checks the National Hurricane Center every 60 seconds using signals that never touch the billed database. It wakes the database only when an advisory actually changes, roughly 8 to 15 times a day plus a few discussion updates, and the rest of the time the compute stays suspended.

Monitoring costs

Health monitoring is in its own Neon project, so it's metered separately from the product.

Four checks run from outside the infrastructure on Grafana, where a run costs me nothing: the fastest every 60 seconds and the others every 3 minutes. The internal loop watches slow-moving things with alarm thresholds measured in hours, so it only runs every 15 minutes and the database gets to sleep.

The $7.60 server runs six recurring jobs (the pipeline timer, the health loop, the Grafana sync, the resolver, the telemetry agent, and an OS-posture timer every 15 minutes). Quota projection and the daily SRE check run on my own machine instead of the box.

Grafana's free plan

I run a cost snapshot, a script that pulls usage from every provider and shows the bill and the quota headroom line by line. A free tier that fills up just stops serving, and the snapshot shows me one getting close. The usage numbers in this post come from that script.

The binding constraint on the whole system is Grafana's free plan, which allows 100,000 synthetic check runs a month. The monitoring is designed to use about 86% of that. Storage, bandwidth and database time are far below their limits.

In the table below the Grafana row is the design target, and the other rows come from the July 2026 snapshot.

Free tierUsedLimit%
Grafana synthetic checks~86,000 (designed)100,00086
GitHub Actions minutes4652,00023
Neon ops storage100 MB512 MB20
Vercel invocations78,4501,000,0008
Cloudflare R2 storage~010 GB0

Spending caps on the AI

The AI is billed on usage, so it's the one line that can grow. In a 2026 McKinsey survey about one in five organizations said AI operating costs, tokens included, have held back their AI use. The AI does two jobs here, interpretation and repair, and I capped each one separately.

Interpretation has three caps: one on what a single pipeline run can spend, a $1 daily ceiling in production, and a hard account limit at the provider behind both.

Repair has two more. A soft cap of $15 per session flags it for my review but doesn't stop it, and a $50 daily ceiling stops everything. A session also ends at 80 turns or 2 hours, and no more than 12 run in a day. It runs on its own API key, so repair spend and product spend are metered separately. The internal dashboard has a switch for the resolver and a separate one for its deploy permission.

That $50 ceiling is per day. My estimate for a typical month is about $15, so one bad day of repair sessions could cost more than that.

Why five lines are $0

The rest of the stack is Neon, Cloudflare R2, Vercel, Grafana Cloud and GitHub Actions. They're all on free tiers at $0, and I set things up to keep them there. The NHC poll runs every minute on Hetzner, but only wakes the core database when an advisory changes. The health loop runs every 15 minutes. Grafana's external checks have their own allowance, and the monitoring is designed to use about 86% of the free plan's 100,000 monthly checks.

Where the increase went

The repair sessions spend real money on their own key, under the $15 soft cap and the $50 daily ceiling, and the snapshot script shows that spend next to the server and the pipeline. If a session hits a stop condition it gets marked for me and nothing from it deploys.

Of the increase, about $2.35 is the server and roughly $3.40 is the repair sessions.