← All projects / FIRE Calculator
Shipped · ready to deploy

FIRE Calculator

A friendly retirement-planning website with an AI assistant that reads your numbers and explains, in plain English, what to do next. Built solo, end to end.

Claude Haiku Stripe-monetized Vanilla web · no frameworks 15 pages
What is this?

A website where you enter your savings, income, and goals, and it tells you whether you're on track to retire early , and what to change if you're not. An AI assistant sits alongside the calculator and answers questions in plain English ("Did the market just dropping 20% break my plan?").

Who it's for

People who've started thinking seriously about financial independence but find spreadsheets intimidating, and experienced FIRE planners who want a single place to model scenarios and stress-test their assumptions without learning a new tool.

Role
Solo, design, build, GTM
Stage
Shipped, deploy on hold
Surface
15 public pages
Stack
Vanilla JS · Netlify · Stripe · Claude
15
Public pages
5,000
Monte Carlo paths
$9 / mo
Pro tier price
30+
Live AI inputs
0
Build steps
Walk through the build

How it came together, step by step

Step 1 of 5

Spreadsheet model · v0

Annual savings$48,000
Real return assumption5.5%
Years to FI12.4
Success rate92%
FIRE number$2.84M
Manual model
Step 1 · Validate the model

Started in a spreadsheet

Before any code, I built the entire FIRE model in Google Sheets, Monte Carlo, Roth ladder, state tax. Three friends asked me to run their numbers, which confirmed it was worth shipping.

Google Sheets Manual first
🎬 Drop a screen recording here A 5-second GIF of the calculator filling itself out would shine here.
Step 2 · Port to vanilla JS

One HTML file, no build step

Ported the spreadsheet to a single 366KB index.html. No React, no bundler, the calculator needs to load instantly, work offline, and be inspectable.

Vanilla JS PWA

AI advisor · live state

You: Market dropped 22%, should I panic?

Advisor: Your plan is still in the 84th percentile. Guardrail rule: hold withdrawals flat. Want me to model a 12-month spending freeze?

Live state · 30+ fields
Step 3 · Add the AI advisor

Claude Haiku reads every input live

The chat advisor's system prompt rebuilds on every message and includes all 30+ calculator fields plus a diff of what just changed. The AI doesn't know you generally, it sees the spreadsheet you're looking at right now.

Claude Haiku 4.5 Anthropic SDK

Subscribe · Plan Optimizer

TierPlan Optimizer
Monthly price$9
Cancel anytimevia portal
What's includedAI · drift · plans
Stripe Checkout
Step 4 · Monetize

2-tier pricing, Stripe-managed

Free tier = full calculator. $9/mo Plan Optimizer = named plans, drift alerts, AI chat, FIRE Moves engine. Stripe Checkout + webhook + customer portal in Netlify Functions. No custom billing UI.

Stripe Netlify Functions
📐 Drop a launch-page screenshot here A clean grab of launch.html with the animated demo would land well.
Step 5 · Ship the surface area

15 pages, 4 SEO posts, GTM kit

Built the supporting cast: 4 SEO posts (4% rule, Roth ladder, retire at 50, how much), methodology and comparison pages, beta-feedback flow, sitemap, PWA manifest, plus a GTM folder with launch checklists.

SEO blog Launch-ready

The goal

Most FIRE calculators are spreadsheets pretending to be web apps: they take a few inputs, run one simulation, and tell you "you'll be fine" or "you won't." I wanted a tool that behaved like an actual planner, Monte Carlo for sequence-of-returns risk, Roth ladder modeling for early retirees, Guyton-Klinger guardrails, US state tax, and a chat advisor that could see all 30+ inputs and tell you what to actually do when something drifts.

The bigger goal: prove I could ship a monetizable AI product end-to-end, from problem framing to Stripe webhooks to a Product Hunt launch checklist, without leaning on a team.

FIRE Calculator a glimpse
Verdict
On Track
92% success across 5,000 Monte Carlo paths
FIRE Number
$2.84M
4% rule · adjusted for state tax
Years to FI
12.4
Coast FIRE in 6.1 years
YOU

Market dropped 22%, should I panic?

FIRE ADVISOR · CLAUDE HAIKU 4.5

Your plan is still in the 84th percentile of success paths because you saved 38% last year. The Guyton-Klinger guardrail says hold withdrawals flat; don't increase. Want me to model a 12-month spending freeze?

The process

Week 1 · Spreadsheet first

Manual model before automation

Built the entire FIRE plan in a Google Sheet first, Monte Carlo via 5,000 random-return paths, Roth ladder by year, state tax tables. Following my own rule: automation has to follow a proven manual workflow.

Week 2 · Single HTML file

Port to vanilla JS, no build step

Ported the model to a single 366KB index.html. No React, no bundler. Decision was deliberate, the calculator needs to load instantly, work offline, and be inspectable. Build steps would have been a tax with no payoff.

Week 3 · The chat rail

Claude Haiku 4.5 with live state awareness

Added a side-panel advisor. The system prompt rebuilds on every message and includes all 30+ calculator fields plus a changedSinceLastMessage diff. The AI doesn't "know" you generally, it sees the spreadsheet you're looking at right now.

Week 4 · Monetization layer

Stripe + 2-tier pricing

Free tier = full calculator. $9/mo Plan Optimizer = named plans, drift alerts, AI chat, FIRE Moves engine. Stripe Checkout + webhook + customer portal, all in Netlify Functions. No custom billing UI, let Stripe own the surface.

Week 5 · Surface area for SEO + GTM

15 pages, 4 SEO posts, launch assets

Built out the supporting cast: 4 long-form SEO posts (4% rule, Roth ladder, retire at 50, how much to retire), methodology page, comparison page, beta-feedback flow, sitemap, robots, PWA manifest, and a GTM folder with Reddit/HN/Twitter/PH launch checklists.

Hiccups (and what I learned)

Hiccup #1 · The chat hallucinated numbers

Early versions had Claude inventing return assumptions and savings rates that didn't match the calculator. The advisor sounded right but was operating on vibes.

Fixed by rebuilding the system prompt every message with the full live calculator state, and surfacing a changedSinceLastMessage diff so the model can react to what you just changed instead of reciting your average.

Hiccup #2 · Single-file architecture vs. SEO

The single-page calculator is great for performance but terrible for SEO, Google needs a surface to rank against "FIRE calculator" queries.

Split the architecture: launch.html as the marketing landing page with the animated demo, index.html as the app itself, and blog/ as a static folder of long-form SEO posts. Each page gets its own meta tags and keyword target.

Hiccup #3 · Stripe live keys ≠ Stripe test keys

The webhook flow worked perfectly in test mode, then fell over the moment I tried to wire live keys because the live products didn't exist yet and the price IDs were hardcoded in the frontend.

Moved price IDs into Netlify env vars and added a startup check that fails loudly if env is missing. The lesson: any "magic ID" the frontend depends on belongs in environment, not source.

Hiccup #4 · Anthropic credit cliff

The chat feature is dead the moment credits run out, and there's no graceful fallback message, just a 500.

Currently soft-blocking deploy until credits are refilled, but the durable fix (queued for v2) is a circuit breaker that switches the chat panel to "Advisor offline, try again later" with a tiny rules-based summarizer in its place.

Hiccup #5 · Drift detection without a backend

I wanted "you saved 38% less this month, your plan slipped 4%" alerts, but I had no database, no auth, no cron.

Drift detection runs entirely in localStorage with a monthly snapshot. Alerts surface in-app on next load. The full email-cron version (Supabase + Resend) is a v2 item, but the in-product version ships today with no infrastructure.

How I iterated

The FIRE Calculator went through three distinct shapes. Each version came from a real failure of the previous one, not from a roadmap.

v0.1, Personal tool

"Will I retire at 50?"

Spreadsheet. Just for me. Confirmed I had a model worth shipping when three friends asked me to run it for their numbers.

v0.5, Public calculator

Free, single-page, no chat

Vanilla JS port. Got it in front of 10 people from r/financialindependence. The complaint was always the same: "ok, but what do I do with this?" That was the gap.

v1.0, SaaS

Calculator + AI advisor + Stripe + GTM

Added the Haiku chat rail to answer "what do I do." Added named plans, drift detection, FIRE Moves engine, blog, launch page, pricing. This is the version on hold for deploy.

Tools used

Claude Haiku 4.5
advisor model
Anthropic SDK
chat + caching
Vanilla JS
no build step
Netlify
hosting + functions
Stripe Checkout
payments
Stripe Webhooks
subscription state
PWA / Service Worker
offline mode
localStorage
plan persistence
Claude Code
build agent
Sitemap + Schema.org
SEO surface

Roadmap


← Back to all projects