The self-host line looks flat. Then the GPU runs out of hours.
Breakeven plots API cost against self-hosting cost on one token axis and reads off the crossover. The self-host line is flat, but only until the GPU runs out of seconds in the month.
Every "should we just self-host the model?" thread dies the same way. One person quotes a per-million-token API price. Another quotes a GPU rental rate. Neither number amortizes the hardware, neither counts the electricity, and nobody mentions that a 4090 sitting idle at 2am is still a 4090 you paid for. It's an argument of vibes, and it never produces a number anyone can act on. Breakeven turns it into one chart with one crossing point.
Two lines, one axis
Put monthly token volume on the x-axis and cost per month on the y-axis, and the whole decision is two lines.
The API line is boring in the useful way: it's linear. tokens / 1,000,000 × price per
million. Send twice the tokens, pay twice the money, straight through the origin.
The self-host line is the interesting one, because it's flat. You buy the GPU once, so its cost per month is the purchase price spread over its useful life, plus electricity:
gpuPrice / lifetimeMonths
+ powerDrawWatts / 1000 × hoursPerDay × 30.44 × utilization × pricePerKwh
That 30.44 is the average days in a month, and it's the only slightly clever constant in the formula. Notice what isn't in it: token volume. Whether you push a million tokens through that box or a billion, the monthly cost is the same, right up until the hardware can't keep up. So on the chart it's a horizontal line, and the point where the rising API line crosses it is the whole product: below that volume, paying per token is cheaper; above it, owning wins. The answer is a single number, like "42M tokens/mo," and everything else on the page exists to make that number trustworthy and adjustable.
The flat line is a lie past the ceiling
Here's the honest part, and the reason I didn't just draw a horizontal line to infinity. A single GPU cannot serve unlimited tokens. It has a throughput, tokens per second, and a month only has so many seconds. Multiply serving speed by the hours the box actually runs by your utilization factor and you get a hard ceiling: the most tokens that one card can produce in a month. Past that point, "flat cost" is a fantasy, because to go further you have to buy a second GPU and the whole cost line steps up.
Plenty of calculators would quietly extrapolate the flat line off the right edge of the screen and hand you a breakeven that assumes one 4090 can do the work of ten. Breakeven refuses to. Past the ceiling the self-host line goes dashed, with a note that you're now in second-GPU territory. It would have been easier to leave it solid. It also would have been a lie, and the entire point of the tool is to replace a lie with a number.
Nothing is a hidden constant
The reason these debates never converge is that everyone's assumptions are invisible. Electricity is $0.12/kWh in one place and triple that in another. Utilization is rarely the 100% people quietly assume; hardware is almost never pegged. Amortization life is a guess. So in Breakeven every one of those is an editable field with a documented default, not a magic number baked into the source. Four real GPUs ship in the catalog (RTX 3090, 4090, A100, H100), each with a cited basis for its price, power, and serving speed, and four API reference prices you can override by just typing your own.
There's no backend, because there's nothing to store: the catalog and the math are static data and client-side JavaScript, and the cost model lives in one pure-function file unit-tested apart from the chart. Your whole scenario, the GPU, every assumption, the token volume, encodes into the URL, so "copy shareable link" is the entire sharing story. No account, no upload.
Try it
Open Breakeven, drag the token slider, and watch the API line sweep up until it crosses the flat one; that crossing is your answer. Then do the honest thing: set utilization to what your box actually runs, not 100%, and set the power price to your real bill. The breakeven moves, sometimes a lot. Push the slider far enough right and watch the self-host line go dashed, then copy the link and drop it in the next "should we self-host?" thread instead of a vibe.
This post is part of the build log: every app my automated factory ships gets written up here, honestly. Browse everything at apps.charliekrug.com. Comments are open below.
Loading comments…