73 thousand pages. One worker.
Suite of free dev/creator browser tools — static-first, pSEO-deep, ad-fundable. Astro 6 Islands, Cloudflare Workers + Assets, GSC-steered index. No backend, no tracking, one developer.
Why this exists.
Anyone looking to quickly generate a hash, crunch percentages, or compare time zones ends up today at Calculator.net, RapidTables, or UnitConverters. It works — but with ad banners that load before the tool, UI from another decade, and almost no editorial depth per calculator. The audience is end users who need the tool right now, don't want to install an app, don't want to sign up, and certainly don't want to click through a cookie manager.
ToolPrime is an attempt to fill that gap: modern, fast, programmatically deep — and kept viable as a one-person operation on ad revenue. No venture scale, no 40-person SEO agency behind it. One developer, one repo, and an infrastructure that handles the entire delivery on Cloudflare Workers Paid for $5/month, no matter how much traffic shows up.
The box it had to fit in.
How it runs.
Four deliberate choices.
Astro 6 static-first + Islands instead of Next.js SSR.
Cloudflare Workers + Assets instead of Pages or Vercel.
Local deploy via ./deploy.sh instead of GitHub Actions.
workflow_dispatch backupProgrammatic SEO as template × dataset.
Things that were not obvious.
GSC analyzer against widget cannibalization
scripts/analyze-gsc.mjs parses GSC export ZIPs, automatically finds categories where position is good but CTR is null — and flags them for noindex. Result: ~52,000 pages dropped from sitemap + noindex'd, crawl budget redirected to the ~21,000 pages that aren't cannibalized by Google's own widgets. Recovery window per GSC trend: 4–8 weeks — not a quick win, just hygiene.Canonical duplicates via build.format: 'file'
/tool/index.html with trailing-slash redirects. At 73K pages that's 343 canonical duplicates — same URL, different normalization, visible as coverage errors in GSC.Switching to
build.format: 'file' + trailingSlash: 'never' produced flat .html outputs without an intermediate redirect. One commit, the problem was gone. Sometimes the fix is a config flag you should have set four months ago.Zero-origin despite file processing
browser-image-compression, jszip, html2pdf.js. sharp only at build time for thumbnails.No upload, no backend, no GDPR headache — user data never leaves the browser. Requires clean web-worker handling for large files so the UI doesn't freeze. But it saves every thought about storage, moderation, abuse, GDPR DPAs, and processor agreements. The best server is no server.
Wrangler push as the deploy hot path
That completely changes the deploy loop: a template fix in one tool deploys in ~30 seconds instead of 8 minutes. That allows iterative fixing directly against production — which, in ad-revenue terms, also means repairing broken revenue pages in 30 seconds instead of waiting out a CI run.
What's running.
What I learned.
SEO is a feedback system, not an upload.
I started with the illusion that you "build and deploy" pSEO. Reality: you build, deploy, measure, kick half of it back out, deploy again. The GSC analyzer was the difference between a tool page and a tool index. Without the feedback loop I would have kept 73K pages alive that together bring in less traffic than 21K focused ones. Every pSEO project needs that back channel from day 1 — not only once the index is too big for the crawl budget.
Flat pricing is a feature.
Workers Paid at $5 flat cleared my head. No revenue forecasts anchored to infra anxiety, no working out worst-case DDoS bills. The traffic is allowed to explode, the cost model stays the same. That's gotten rare — and for a solo developer still running SEO analyses at night, worth more than any premium-feature blog post.