Background
Bilton Projects · Build in Public

The Journal

Field notes from building TokenScale in the open, the real traffic numbers, the honest retrospectives, and the occasional failure caught in the act.

This is the build-in-public journal for TokenScale. Every few days I post the real traffic numbers, what they mean, and where I think things are heading. I try to explain everything in plain terms, the same way the tool tries to make AI pricing make sense.

New here? The numbers will make more sense if you know the story first. TokenScale was built on a phone, over 11 months of AI conversations, by an animation professional who'd spent years earlier as a software QA engineer, I could code, but never called myself a full developer. The story page is the right place to start. Then come back here to follow along.

The closing chapter

The Last Screw Went In From a Phone

This is the last build post of TokenScale's first chapter. The tool is finished. Not abandoned, finished. And the way the final piece went in says everything about how the whole thing was made. I didn't fit it at a desk. I fitted it from my phone, on the road, thumbing questions into a Cowork session while the code wrote and tested itself. Which is exactly, almost eerily, how this all started.

The working session that moved the statistics onto Cloudflare's servers didn't end when I left the desk. The conversation simply followed me, picked up on mobile as if nothing had happened, and the final pieces were built, tested, and switched on from wherever I happened to be sitting.

The last screw

The final piece is the one I now think every automated system deserves most. A month of failures taught me that the dangerous state was never "broken": it was broken and quiet. Every one of those three strikes ran silently for days before anyone noticed. So the collector now publishes a tiny public pulse: one line, no numbers at all, just "ok" and a timestamp. Every morning an automated checker reads it. If the nightly collection ever misses a beat, I get an email in plain words: what stopped, when it last worked, where to look. On good days: silence.

"An automation isn't finished when it works. It's finished when it can tell you it has stopped working."

With that in place, there was nothing left to prop up. The prices verify themselves each night. The Mac wakes for a couple of hours each evening to build them, then sleeps again. The watchdog watches. The last screw went in, and it went in from a phone.

Eleven months, and a circle I didn't plan

Here is the part that stopped me when I noticed it. The earliest conversations on this account are from July 2025, and they were all built on a phone: a QR-code generator, a fish-identification game, a slot-machine toy, a Wordle clone. All of it vibe-coded, none of it the work of a developer. I'd spent years as a software QA engineer and could hold my own in code, but building things like this from scratch was new, just ideas typed into a chat while waiting for something else to happen.

TokenScale is that same instinct, grown up. Eleven months of conversations, from "wait, what actually is a token?" to a nightly-verified price dataset spanning twenty-two providers, a design system, a changelog, a graveyard for dead models, and this journal. It was built on a phone. And this week, its plumbing was torn out, rebuilt, and switched back on from a phone. I didn't set out to close a loop. I just looked up one afternoon, somewhere on the road, and realised the story had quietly folded back onto its own beginning.

"It began as an idea typed into a phone by an animation professional who tested software for years but had never built a product. It ends as a working system, maintained from a phone, by the same person. The circle closed without me planning it."

What eleven months taught me

I'm not a career developer. I came from animation, with years in software QA before that, and I won't pretend the lessons below are new to people who build for a living. But they were hard-won for me, and writing them down is the whole point of building in public. If you take one thing from TokenScale, take the ledger, not the tool:

01Start with the tool already in your hand. Mine was a phone. It was never the right tool, and it never stopped being enough. The barrier to building was never the hardware, it was deciding to start.
02You don't need the title to do the work. I spent years as a software QA engineer and could code, but I never called myself a full developer, then or now. It turns out you can build a real, used, load-bearing thing by being clear about what you want and asking good questions for eleven months.
03Be wrong in public, quickly. Hours before launch I found our hero number, $0.04, was the input cost only; the real figure was $0.06. I corrected it out loud, in the changelog, before the traffic arrived. The correction became a better story than the launch.
04Keep exactly one source of truth. Every bug that scared me came from two copies of the same fact drifting apart. The cure is always the same: make one place authoritative and re-derive everything else from it.
05A number can be true without being honest. For a week in mid-July, the nights of 13 to 20 July, while I was away, the price chart drew a clean daily line that was really yesterday's figure carried forward, night after night. The data wasn't wrong, it was just wearing more confidence than it had earned. So the un-checked days now render in grey. Same data, honest presentation.
06Don't make a personal computer pretend to be a server. Three silent failures in one month taught me that a Mac assumes a human is nearby to click "Allow." A job that must run at 2am belongs somewhere with no lid to close. So the 2am statistics job moved there. The Mac still wakes for a couple of hours each evening to build the day's prices, but its all-night duty is over.
07Finish the quiet parts. The watchdog, the daily report, the one-click backup, none of it is visible on the site, and all of it is why I can walk away without worrying. Boring plumbing is what lets a solo project outlive its own attention span.
08The unglamorous discipline is the moat. One verified price per provider, every night, for months. It was tedious. It is also the one thing about TokenScale that can't be cloned in a weekend.
09Ship the simplest thing that can possibly work. TokenScale is one HTML file dragged onto Cloudflare. No framework, no build server, no backend. It has survived every traffic spike at a cost of exactly zero. Simple scaled; clever would have broken.
10Finish it, then move on with confidence. The hardest discipline of all is deciding a thing is done. TokenScale is done. That's not an ending to mourn; it's a foundation to build the next thing from.

Update-proofing the last screw

The last screw earned a postscript, and I am glad it did. The day after I wrote the section above, a routine macOS update did the one thing a personal computer will always eventually do: it quietly reset a security permission, and the nightly price job lost the right to write its own file. It found the single blind spot in the watchdog I had just praised, that watchdog checks the live site, and the live site stayed current through a second path, so the local job could stumble without tripping the alarm. That is the kind of gap you only find by running long enough to hit it. Once found, you close it completely.

Two changes did that, and between them they cover both halves of the problem. First, the job no longer runs through a shared system program an update can re-lock: it runs through its own private, re-signed copy that macOS treats as mine and leaves alone, so the permission now survives every future update. Second, the job emails me the instant it cannot reach its files, in plain words: what failed, when it last worked, the one setting to check. The class of failure that caused this is gone, and any surprise I haven't imagined now announces itself immediately instead of hiding.

"A finished system isn't one that never fails. It's one where every failure it has ever had was caught, and closed for good."

No published number was affected. The price history stayed a clean, continuous line throughout, and the build's own integrity check refused the single bad data point the recovery tried to introduce. Find it, fix the class, verify, move on: that is the whole discipline in one line, and it is the note I want this chapter to end on.

What happens now

Nothing dramatic, which is the goal. The site stays exactly where it is, doing exactly what it does: verifying prices every night, keeping its own history, telling me if it ever falls over. This journal will go quiet for a while, not because the story ended but because the building did. There are other ideas waiting, and I already know how I'll build them: out loud, in public, one honest correction at a time, and, if the last eleven months are any guide, probably from a phone.

Thank you for following along. It really did help to know someone might be reading. If you've only just arrived, the story page is where the circle starts, go back to the beginning, and then you'll see why finishing it from a phone meant so much.

And in case it needs saying: none of this final work measures anything new. The pulse line the watchdog reads carries no statistics whatsoever, that's the point of it. The privacy contract is exactly where the last post left it.


👉 TokenScale · The story, from the beginning · What we do and don't measure

20 July 2026: the closing post of TokenScale's build chapter. The analytics system gained a self-reporting watchdog, and the last of the work was done over a mobile Cowork session while traveling, closing an eleven-month circle that began on a phone in July 2025. The next day, a macOS update tried to reset the price job's file access; the job was rebuilt to survive OS updates and to email on any access failure, and no published price was affected. Nothing new is measured; the privacy rules are unchanged.

The Anonymous Visitor Count Leaves the Mac

As of today, TokenScale's daily statistics collection no longer runs on the Mac in my office. What it gathers is anonymous counting only: how many people visited, from where, and what they read, never anything about who they are. It runs on the server side, inside Cloudflare, the same network that already serves the site, where it files away each day's numbers automatically, every night, whether my Mac is on, asleep, or unplugged. This post is the story of why, because the "why" is three failures in one month, and this journal doesn't skip those.

If you read the last post, you know the nightly automation had been teaching me lessons the hard way. What I didn't know when I wrote it was that the Mac had one more lesson queued up.

Three strikes

The job that gathered each day's visitor numbers lived on my Mac mini and ran in the small hours. In a single month it went down three separate ways:

  • 5 July, the certificate error. Python on the Mac stopped trusting the internet. Fixed in a couple of days.
  • 8–15 July, the permission lock-out. macOS decided that a scheduled job may not write files into my own Documents folder, and said so to no one. A week of blank digests.
  • 16 July, the stranger. A routine software update replaced Python with a newer copy, and macOS treated the new copy as an unknown program, denied, again silently. Every 8am run died with "Operation not permitted" until I went looking.

Three different failures, one common shape: none of them were about my code. They were about asking a personal computer to behave like a server. A Mac's security model assumes a human is present to click "Allow"; a nightly job at 2am has no human. After the third strike I stopped treating these as bugs to fix and started treating them as a verdict:

"A scheduled job on a personal computer isn't automation: it's a chore wearing automation's clothes. If a job must run every night, it should live somewhere that has no lid to close."

What moved, exactly

The whole measurement pipeline. A single small program now lives on Cloudflare's network, the same place the site itself is served from, and does three things: it receives the site's anonymous engagement events (as before), it serves me a plain-words daily report, and every night at 2:10am it files a permanent snapshot of the day just finished: how many real people visited, from which countries, what they read, which AI models they compared. Those snapshots are kept forever, the raw events themselves expire after about 90 days, so the nightly filing is what turns a rolling window into a history.

On its first day, the new collector also reached back and recovered every day Cloudflare's own memory still held, about three months of history, rebuilt in one click. And because "your data lives on someone's server" should never mean "your data is stuck on someone's server", the archive has a download-a-backup button: one click, one dated file, my own copy on my own disk.

Worth saying plainly: this is the statistics pipeline. The nightly price checking, the verified-with-dates price history that the site is actually about, is its own process with its own story (see the previous post), and the same migration logic is on its list. One pipeline at a time.

What didn't change

The privacy contract. The measurement is the same anonymous, cookieless counting it has always been, no IP addresses, no fingerprints, nothing personal, Do-Not-Track honoured, and the nightly snapshots are aggregates only: counts per day, never records of people. The full details live on the privacy page, which gets updated in the same build as any change to what's measured. That lockstep rule is the whole deal: if the site starts counting something new, the privacy page says so the same day.

The Mac mini, meanwhile, is down to a single night-time job. Everything else that used to keep it awake now lives on Cloudflare, the site serves itself, the statistics file themselves, and only the nightly price build still needs the machine in my office to wake for a couple of hours. That is a far more turn-key footing than a month ago: one clearly-bounded task left on the desk, and honestly the kind of thing that could become its own project the day I move the prices onto a server too. It built this site, and it has earned most of its sleep.


👉 TokenScale · What we do and don't measure · How it ships

19 July 2026: the daily statistics collection moved from a Mac mini to Cloudflare's servers after three unrelated failures in one month. It now runs nightly with no local machine involved, keeps a permanent day-by-day archive, and ships with a one-click backup. The privacy rules are unchanged.

The Log Nobody Reads

Automating a daily job isn't one build, it's a few weeks of the thing quietly teaching you what you got wrong. TokenScale's nightly price check has been settling in, and it handed me three failures in a row. Each was caught late. Each is now fixed for good. And each was a different flavour of the same lesson: a number can be true and still not be honest.

This is a build-in-public journal, so here's the unglamorous side of building in public, the fortnight where the automation stopped behaving like a feature and started behaving like a colleague who occasionally lies to you with a completely straight face.

1. The failure that only wrote to a log

For three nights, 13, 14 and 15 July, the nightly job died and nobody noticed. Not the Mac, not the schedule, not permissions. The job ran. It even wrote to its own log, on time, every night. One step inside it failed, and the code that was meant to catch that failure did this:

except Exception: print("ERR")

It threw the actual error away. So the log dutifully recorded the word "ERROR" five times, with no cause, in a file nobody opens. The only reason I caught it at all is that the site started to look stale to the naked eye. A warning system you can only read by staring at the thing it's supposed to be watching isn't a warning system.

"A failure that only writes to a log is a silent failure. If you actually want to be told something broke, the alert has to interrupt you, not wait politely in a file."

The fix: the job now surfaces the real exception instead of swallowing it, raises a notification on the Mac the moment something breaks, and writes a dedicated health-alerts.log. The bar is no longer "did it log?" It's "did it shout?"

2. Drift, in four flavours

The second lesson wasn't a crash at all. It was drift, the slow, quiet way two copies of the truth wander apart when you're not looking. In one fortnight I found four different kinds:

  • Record drift. My local "shipped" folder believed the site was on version 63 while the live site was already on 67. Fix: stop trusting local bookkeeping, the live site's own BUILD.txt is now the single source of truth for what's actually deployed.
  • Card-vs-history drift. The price on a model's card and the price in its chart were read from two different places, and they quietly disagreed. Two sources, one number, no referee.
  • Version drift. A hand-saved v282.zip turned out to be stamped v277 internally, on all 18 pages. A clean rebuild reconciles the label with the contents.
  • Model drift. I was still tracking Llama 3.1 405B on hosts that had quietly delisted it, and one provider had moved over to GPT-OSS entirely. The menu had changed; my copy of the menu hadn't.

Four symptoms, one disease: anything you maintain in two places will drift. The cure is always the same, make one place authoritative, and let everything else be re-derived from it rather than remembered alongside it.

3. The uncomfortable one

The third one I sat with for a while before writing it down, because it's the sort of thing you'd rather quietly fix than publish.

Every night, without fail, the job appended a fresh dated row to the price history, and the chart drew a clean day-by-day line. It looked like a daily measurement. It wasn't. The job has no network access, so what it actually did each night was copy the previous day's number forward:

a.append({"date": day, "i": last["i"], "o": last["o"]})

That's the whole "capture." A thermometer log where you write down yesterday's temperature every morning without ever opening the window. Now, and this matters, the numbers were real. They trace back to genuine, verified price checks (23 June and 6 July), and when I re-checked one provider live against its own pricing page, every figure matched to the cent. Nothing was fabricated, and nothing was lost.

But a row per day implied a measurement per day, and that measurement wasn't happening. The problem was never that the numbers were wrong. It's that a true number was being shown with more confidence than it had earned.

"The integrity risk wasn't a wrong figure. It was a right figure wearing a lab coat it hadn't earned, presented as freshly measured when it had only been carried forward."

So the carried-forward days went grey

Here's the fix, and it's the whole point of the site in miniature. Carrying a price forward when you can't reach a source is completely legitimate, it's the honest floor, better than inventing a number or leaving a gap. What's not legitimate is showing a carried-forward day as if it were a checked one.

So now they look different. Any day after a provider's last verified check renders in grey, the chart dots, the value labels, the table rows, with a legend and a short explainer spelling out exactly what grey means. A verified price is stated plainly; a carried one wears its status on its sleeve. Same data, honest presentation.


None of these were dramatic. No outage, no lost data, no wrong prices on the site. That's rather the point, the failures that matter most in a data project are the quiet ones: the error nobody's told about, the two copies drifting apart, the true number that looks more certain than it is. The nightly job is more robust for having made all three, and it'll keep flagging the truth even when the truth is "I didn't actually look tonight."

👉 See the price history · How the numbers are verified · Tracked nightly since 12 May 2026

Three failures caught 13–15 July 2026: a swallowed exception, four flavours of drift, and carry-forward shown as measurement. All three now fixed, alerts that interrupt, one source of truth, and grey for every day that wasn't checked.

Basic Mode: For Everyone Who Preferred Plain-Text Email

TokenScale now has a second face. Basic mode is the whole site, the price table, the full price-change history, this journal, the changelog, condensed onto one plain, fast page. No slot machine, no sound effects, no animations. Same verified numbers. Everything one click apart.

I'll be honest about why this site is playful: numbers are not really my thing. The slot machine, the sounds, the Manager's Notepad, that's me turning a pricing table into something I actually want to look at. It's how I make sense of this stuff, and plenty of visitors have told me it's how they make sense of it too.

But I also spent years in an R&D department alongside about fifty engineers, and if that taught me one lasting thing, it's that not everyone wants the show. I remember when HTML email arrived, colours, fonts, embedded pictures, and half that room simply refused it. They kept their mail clients set to plain text and would ask you, politely at first, to do the same. It wasn't stubbornness. It was a philosophy: say the thing, skip the decoration, respect my time.

So this one's for the plain-text people

tokenscale.dev/basic opens straight onto the table: all 22 providers, sortable by any column, with the same content-size landmarks (yes, The Hobbit is still there, its word count is verified, which is the least fun fact on the whole site and therefore perfect for Basic mode). Three more tabs sit beside it: History lists every price change we've ever recorded in plain terms, what the rate was, what it became, "43% cheaper" or "×3.8 pricier", sortable by date, provider, or size of the move. Journal and Changelog show every entry as a dated headline; tap one for the gist, follow the link if you want the whole story. It defaults to a light page, and the palette picker in the top corner offers the same dark options as everywhere else, pick once and it follows you across the site.

To be clear, the full experience isn't going anywhere, it's still the front door, and it's still where I have the most fun. And a small confession from those R&D years: some of the plain-text crowd, the very same engineers, were also the first to write elaborate ASCII art into their signatures. People are wonderfully inconsistent. So both modes stay, both get the same nightly-verified numbers, and you're welcome to be a different person on different days.

Basic mode lives at tokenscale.dev/basic. If it's missing something you need, or has one toy too many left in it, tell me.

You Can't See How Much Claude You Have Left. So I Built a Fuel Gauge.

Claude runs on a weekly limit you can't see, until you slam into it mid-thought. The Claude Fuel Gauge turns that invisible budget into something you can read at a glance: a fuel tank that starts full each week and drains as you work. It's free, and it runs entirely on your own machine.

The Claude Fuel Gauge, a dial sweeping up to the current fuel level

The blind spot

If you use Claude every day, there's a strange gap: there's no quarter-tank warning light. Usage runs on a weekly cycle, but most of the time you only learn where you stand the moment you hit the wall, no glance, no heads-up, just plenty of room right up until come back next week. For anyone pushing Claude hard, that's a quiet anxiety: you're spending something you can't see.

The gauge

The Claude Fuel Gauge is a single HTML file. You open it in your browser and the needle sweeps up to your current level, green when you've got headroom, drifting toward empty as the week wears on. That's the whole experience: open it, read the tank, get on with your day.

It works by having Claude keep its own gauge topped up. After a session, Claude jots a tiny note inside the file, the date, the model, an estimate of tokens in and out, and the next time you open the page it draws your level from those notes. You never touch a number. And because it only ever reads a log that lives inside the file itself, nothing leaves your machine: no account, no sign-in, no calls to us or to Anthropic.

The one requirement is Claude Desktop (Cowork), the version that can write to a file on your computer. Setup takes about a minute, once. After that, reopening the page is the entire ritual.

Your week, measured in novels

Tokens are an abstraction nobody can feel. So alongside the gauge, the tool shows your week in a unit you can actually picture: novels. One novel ≈ The Hobbit ≈ 95,356 words ≈ 127,000 tokens, the same yardstick behind our Novel Index. "Nine novels read, half a novel written this week" tells you something real in a way "1.3M tokens" never will.

"You don't get a fuel gauge for Claude. So I made one, and the hard part wasn't the needle, it was admitting how much a single long session actually burns."

An honest gauge, not a billing statement

It's a friendly estimate, not a meter wired into Anthropic's billing. Real limits are rolling, model-weighted windows, so the numbers here are approximations, tuned to feel right and to move with real use. For exact figures your Claude settings stay the source of truth; this is the at-a-glance companion to that page, not a replacement for it. It's also yours: free to use, modify, and share.


👉 Get the Claude Fuel Gauge · See the Novel Index · Free, runs on your own machine

Claude Fuel Gauge: a single offline HTML file. Estimates usage from session logs Claude writes locally. Not affiliated with Anthropic; not connected to billing. Use at your own risk.

DeepSeek Just Cut Prices Another 75%, and June Isn't Over Yet

A frontier reasoning model is now priced like a mid-tier one. DeepSeek dropped its V4 Pro tier by 75% on 11 June. It's the second time this month the cheapest way to do serious AI work got cheaper, and we logged every step of it.

Every night, TokenScale checks the price of every model we track and writes it down. Most nights nothing moves and the chart draws another flat step. DeepSeek does not let many nights stay flat.

What happened

On 11 June, DeepSeek made the cut to its V4 Pro tier permanent: $1.74 to $0.435 per million input tokens, and $3.48 to $0.87 per million output. That's a 75% reduction on a model that competes at the frontier on reasoning. A flagship-class model, now selling at mid-tier money.

It's the second leg of a month-long undercut. Back in mid-May the same tier ran a 75% promo, the discount briefly became the list price on 1 June, snapped back to $1.74 on 4 June, and then on 11 June DeepSeek made the low number the real number and kept it there. The chart caught the whole wobble.

DeepSeek V4 Pro · list price $/M input · nightly
$1.74
May
15
$0.44
Jun
1
$1.74
Jun
4
$0.44
Jun
11

Promo, list, revert, permanent. Four nights of price archaeology on a single tier, the kind of thing you only see if someone is writing the number down every night instead of trusting the marketing page.

What it means in real content

Token prices are abstract. So here is the part TokenScale exists to translate. The Novel Index asks one question every night: what's the cheapest price to make an AI write a whole novel, The Hobbit, 95,356 words? The floor has held near half a cent for weeks, and it stays there precisely because providers like DeepSeek keep undercutting each other to hold it down. A 75% cut on a frontier tier is what that floor looks like from underneath.

DeepSeek's reputation is the cheap-and-cheerful lite tier, V4 Flash at $0.14 per million. What changed on 11 June is that the frontier reasoning tier now sits at mid-tier prices too. The aggressor on price just brought the fight upmarket.

"The cheapest way to run a serious reasoning model dropped 75% in the middle of the month, and the month wasn't over. If you priced your AI budget in May, it's already wrong."

Why the chart still shows the wobble

We don't smooth it out. On TokenScale a flat line means a price held and a step means it moved, so DeepSeek's promo-then-revert-then-permanent fortnight stays on the chart as a small permanent record: the two prices this tier wore in June, and the exact night the low one stopped being a promo and became the truth. The marketing page only ever shows you today. The chart remembers the path.


👉 See the Novel Index · June's biggest price moves · Tracked nightly since 12 May 2026

DeepSeek V4 Pro: $1.74/$3.48 to $0.435/$0.87 per 1M tokens. Cut made permanent 11 June 2026. Logged the same night.

The Three-Day Model

A frontier AI model launched on a Tuesday and was switched off by the government on Friday. Our price chart caught the whole thing.

ANTHROPIC
Claude Fable 5 (high) · Flagship tier
$10 in · $50 out / 1M tokens

Opened: 6/14/2026Check: 1
Order: Backend DB projectReplies: 1

1  Message 1$119.70
   $19.95 in + $99.75 out

Sticker price (msg 1)$119.70
TOTAL$119.70

Pay with Batch:$59.85 −50%
Pay with Cache:$101.75 −15%
17% of this check is re-reading
— Thank you! Come again —
The receipt the night Fable 5 was live, $10/$50, 2× Opus. See it live →

Every night, TokenScale checks the price of every model we track and writes it down. It is the least dramatic job in the world. Most nights nothing has changed, so the chart draws another flat step and goes back to sleep. A flat line is the usual result, and that is the point: boring is what trustworthy data looks like.

This week the line moved.

What happened

On 9 June, Anthropic released Fable 5, its first generally available "Mythos-class" model, a tier above Opus. The next night, our Anthropic flagship slot jumped: $5 / $25 to $10 / $50 per million tokens. Twice the price of Opus 4.8. On the chart, the flagship line stepped up.

Anthropic flagship · list price $/M input · nightly
$5
Jun
9
$10
Jun
10
$10
Jun
11
$5
Jun
12

It held there for two nights.

Then, on the evening of Friday 12 June, the US government handed Anthropic an export-control directive ordering it to cut off Fable 5 and its sibling, Mythos 5, for any foreign national, inside or outside the country. Because an order that broad reaches everyone, including Anthropic's own staff, the only way to comply was to switch the models off for the whole world. Anthropic did it within hours. Every other Claude model stayed up. (The reported trigger, via Axios: another company claimed it had jailbroken Mythos.)

By our next price check, the flagship slot was Opus 4.8 again. $5 / $25. The line stepped back down.

Two nights up. Then gone.

Why the chart still shows it

We do not erase the spike. On TokenScale a flat line means a price held and a step up means it rose, so the Fable 5 episode is now a small permanent marker on the Anthropic chart: the two nights a model sold at twice the price of Opus, bracketed by the day it launched and the day it vanished. You cannot buy it anymore. The chart remembers that you briefly could.

I had just rebuilt the part of TokenScale that renders this: the interactive receipt, where the model list is the menu and the receipt is your check. It was an idea I had been sitting on for a while. It landed in a single night and a handful of prompts, and came out leaner than the thing it replaced, about 20% fewer lines of code than I started with. The first real event it ever printed was the death of a frontier model.

"I built a tool to log AI prices every night because most nights are boring. Then a model lived for three days, and the boring little tool was the only thing watching."

TokenScale's nightly price-history chart, the orange Anthropic line spikes to $10 for two days when Fable 5 was on sale, then drops back
Two nights at twice the price of Opus: Fable 5's brief spike, caught in the nightly log. See it live →

👉 See the Anthropic chart · Tracked nightly since 12 May 2026

Fable 5: launched 9 June 2026. Pulled 12 June 2026. Logged in between.

The Chart: AI Models Ranked Like the Pop Charts, Except the #1 Is Yours

A new sister-site experiment: this week's AI models, ranked like a singles chart. Lean toward price, brains, speed or energy and the whole thing re-ranks, live. Play the Chart →

The PriceScale Chart: this week's top AI text models ranked, with Gemini Flash-Lite at number one
This week's text models, leaning cheap. Lean it your way →

Pop charts have been counting down the hits since 1913. That summer, Billboard printed its first ranking, "Last Week's Ten Best Sellers Among The Popular Songs", based on sheet music people bought to play on the piano at home. The format outlived the piano, the record, and the radio. We still love a countdown.

So I built one for AI models.

The problem with a "best model"

Ask which AI model is best and you'll get an argument, because everyone's asking a slightly different question. Some people want the cheapest thing that works. Some want the sharpest answer regardless of cost. Some want speed. A few of us care about energy.

Those are four different charts. Most rankings pretend they're one.

TokenScale already does the hard part, turning "$5 per million tokens" into money you can picture. The Chart is the playful sibling: it takes the same nightly price data and lets you lean.

How it works

There's a dial. Pull it toward price 💸, brains 🧠, speed ⚡ or energy 🌱, and the whole chart re-ranks in front of you. The model that suits you rises to the top and gets the crown 👑. Lean a different way and someone else takes it.

Then there's the time machine. Every rate on the Text chart comes from our own price checks, logged nightly since 12 May 2026. Scrub the dial back through the log and watch models climb and fall as prices moved, a countdown that runs backwards as well as forwards. It's the same idea as a singles chart. The difference is that the audience of one is you.

What it is, and isn't, yet

This is an early beta, and I'd rather say that plainly than oversell it. The price log is young, a few weeks deep and growing every night. We used to show a hand-reconstructed 2023–2025 era here and I pulled it, because this page should only say things we can back with our own data. The Creative chart is still hand-curated for now.

So treat it as a toy that's becoming a tool. Have a play, lean it your way, and if a number looks wrong, tell me, that's literally how the history gets better.


👉 Play the Chart

Five New Labs: TokenScale Now Tracks 21 Providers

When TokenScale launched, it compared 16 providers. As of tonight it compares 21. I added the five names that had become impossible to leave off, four Chinese frontier labs and Meta's own first-party API.

Providers tracked
21
was 16
New labs added
5
2 June 2026
Price points / night
63
21 × 3 tiers
Infra cost
$0
still Cloudflare free

Who Joined

DeepSeek used to be the lone Chinese lab on the board. That stopped making sense, there are now four open-weight labs people genuinely compare against each other every day:

  • Alibaba Qwen, Qwen-Flash, Plus and Max. Leads the open-weight tool-calling benchmarks.
  • Zhipu GLM, GLM-5 tops several open-weight leaderboards and is MIT-licensed.
  • Moonshot Kimi, K2.6 is a favourite for agentic and coding work.
  • MiniMax, the M-series, cheap and popular for agent workloads.
  • Meta Llama, Meta now hosts Llama on its own API, so you no longer have to go through a reseller to get a first-party price.

Why It Matters

The whole reason TokenScale exists is to show that the floor keeps dropping. Four of these five are open-weight, and they price like it, a Qwen-Plus or a Kimi sits an order of magnitude below a US frontier flagship for many jobs. Putting them next to GPT and Claude in plain content terms is the clearest way to see how much pressure the open labs are putting on price.

Being Honest About the Data

Two caveats, because this is a build-in-public journal and not a press release. A few top-tier prices, Kimi's Turbo variant, MiniMax's Pro tier, Meta's Behemoth, aren't published yet, so those are careful estimates I'll correct the moment real numbers appear. And the new providers start with a flat price line: the nightly tracker only began watching them tonight, so their history builds from here, the same way every other provider's did.

Same as always: one HTML file, no framework, verified each evening. Now just five labs wider.

12 Days In: 1,400 Visitors, a Netherlands Mystery, and What Comes Next

TokenScale launched on 18 May 2026. No budget, no team, no existing audience. Just a single HTML file on Cloudflare and a LinkedIn post.

Twelve days later, here's what the data looks like. And more importantly: what I think it means for where LLM pricing is heading.

The Numbers

Unique visitors
~1,400
May 18 to 30
Peak day
486
May 20 · launch
Cache hit rate
92%
Cloudflare avg
Infra cost
$0
Cloudflare free

The Shape of the Launch

Unique visitors per day · May 18 to 24
70
May
18
69
May
19
486
May
20
164
May
21
119
May
22
94
May
23
86
May
24

May 20 was the day I posted to Hacker News (Show HN) and LinkedIn simultaneously. Traffic jumped from a 70/day baseline to 486 unique visitors. The following days settled into a floor of around 85 to 90 per day. Nobody paid for that. It just held.

Product Hunt went nowhere. I launched cold with no community, ended at #82 with 2 points. That was expected. PH rewards existing audiences, not new ones. Hacker News was the real driver.

Where Traffic Came From

1
🇳🇱 Netherlands
309
2
🇺🇸 United States
190
3
🇩🇪 Germany
51
4
🇸🇪 Sweden
34
5
🇨🇦 Canada
29

Netherlands at #1 with more traffic than the US. I still don't know exactly why. Hacker News skews heavily toward Northern European readers, so that is probably part of it. Something may also have been shared in a Dutch or German developer community I'm not aware of. If you came from one of those: I'd genuinely love to know where.

What I do know: EU developer communities responded faster than the US ones. That's useful information for where to focus outreach next.

What the Pricing Chaos Showed

May 2026 was one of the most volatile months in LLM pricing history. On or around May 15: OpenAI's o3 Pro dropped 80%. xAI Grok dropped 83%. DeepSeek dropped 75%. Gemini Pro went up 60%.

These are enormous moves. And most developers had no simple way to track them. The tool launched at exactly the right moment. Not because I planned it that way, but because AI pricing has become genuinely hard to follow.

The nightly price history in TokenScale is now 12 days old. Every day that passes adds something no competitor can buy back.

How It Was Built

One HTML file. No framework. No backend. No build step. Hosted on Cloudflare Pages for free. Built entirely on my phone, using Claude, over about 11 months of conversations.

I'm not a developer in the traditional sense. I'm an animation professional, with years earlier as a software QA engineer, so reading and writing code was never foreign to me, who started building things by talking to AI in 2025 and couldn't stop. The nightly price check that now runs automatically at 8pm? That's also a prompt. It searches 16 provider pages, writes a JSON file, takes a backup, and tells me what changed. No server. No pipeline. Just a scheduled task.


My Prediction

Prediction Written 30 May 2026. I'll respond to these next post.
Price change events will become the main growth driver. Every time a major provider moves pricing, developers search for comparisons. TokenScale should catch that traffic organically, without any promotion. The nightly update cadence exists exactly for this.
The baseline will hold at 80 to 100 visitors per day until the next catalyst: a Reddit post, a Dev.to article, or a significant model price announcement. Those are the levers I haven't pulled yet.
The price history dataset becomes a citation. By September, if the nightly data keeps running, TokenScale will have the most complete public record of LLM pricing changes available anywhere. Journalists and researchers will eventually link to it. That is the long game.
Pricing will keep falling, fast. The 80% drop in o3 Pro is not an anomaly. It is the direction of travel. Commoditisation is happening at speed. The tools that help developers navigate it will matter more, not less, as the noise increases.

Next update in a few days. Drop me a note if you have a question or a pricing anomaly worth investigating: willbilton@gmail.com