CASE · 082026 — LIVESOLOSTATIC · pSEO · WORKERS
◦ TOOLPRIME · toolprime.dev

73.000 Seiten. Ein Worker.

Suite kostenloser Dev-/Creator-Browser-Tools — static-first, pSEO-tief, ad-finanzierbar. Astro 6 Islands, Cloudflare Workers + Assets, GSC-gesteuerter Index. Kein Backend, keine Cookies, ein Entwickler.

ToolPrime — Screenshot
live · toolprime.dev
§ 01 — Problem · motivation

Warum es das gibt.

Der Tool-Portal-Markt ist funktional, aber visuell und inhaltlich auf dem Stand von 2010. Langsam, zugemüllt, Cookie-Banner-Hölle.

Wer schnell einen Hash generieren, Prozente rechnen oder Zeitzonen vergleichen will, landet heute bei Calculator.net, RapidTables oder UnitConverters. Funktioniert — aber mit Werbebannern, die vor dem Tool laden, UI aus einer anderen Dekade und fast keiner inhaltlichen Tiefe pro Rechner. Zielgruppe sind Endnutzer, die das Tool jetzt brauchen, keine App installieren, sich nicht registrieren und auch keinen Cookie-Manager durchklicken wollen.

ToolPrime ist der Versuch, diese Lücke zu füllen: modern, schnell, programmatisch tief — und als Ein-Mann-Betrieb über Ad-Revenue tragfähig zu halten. Kein Venture-Scale, keine 40-Mann-SEO-Agentur im Rücken. Ein Entwickler, ein Repo, und eine Infrastruktur, die auf Cloudflare Workers Paid für $5/Monat die gesamte Ausspielung übernimmt — statische Assets kosten dort nichts extra.

§ 02 — Constraints · operating box

Der Rahmen, in den es passen musste.

Jede Architektur-Entscheidung musste an diesen Constraints vorbei.
C/01 · OPS
Solo-Dev. Code, SEO, Deploy — alles in einer Hand. Kein Team, keine Hand-off-Punkte.
C/02 · BUDGET
Infrastruktur hart gedeckelt auf < 10 €/Monat — realistisch $5 CF Workers + Domain.
C/03 · ZERO-ORIGIN
Keine DB, kein Backend-Server. Alles statisch gebaut oder clientseitig berechnet.
C/04 · SCALE
~73.000 generierte HTML-Seiten — sprengt das 20K-Limit von CF Pages und die 504-Timeouts von GitHub Actions.
C/05 · SEO = PRODUKT
Traffic muss organisch kommen. Bezahlte Akquise ist bei Ad-Revenue unwirtschaftlich.
C/06 · PRIVACY
Keine Third-Party-Cookies, nur selbst gehostetes, cookieloses Analytics (Umami). Werbung ist noch nicht geschaltet; das Setup ist auf einen Einstieg bei Mediavine/Raptive ab 50K Sessions/Monat ausgelegt.
C/07 · TRAFFIC
Spiky Long-Tail-SERP, persistente Baseline auf Haupt-Tools. Extrem bursty, ohne Vorhersagbarkeit.
C/08 · STATE
Keine Sessions, keine Nutzerkonten, keine Moderation. Jeder Page-Load ist zustandslos.
§ 03 — Architecture · pSEO feedback loop

Wie es läuft.

Template × Datensatz → Build-Farm → Wrangler → CF Workers Edge. Dann: GSC-Signal zurück in den Analyzer, noindex-Filter ins Template. Der Index atmet.
build.live·pages 73,359·indexable 20,812·noindex 52,547
deploy —·cost/mo $5
INPUT · 01
pSEO Template
/src/pages/[cat]/[a]-to-[b].astro
active13
CONTENT · 02
MDX collections
tool prose · per-category copy
formatfile · /never
DATASET · 03
Data matrix
n × n · currency · units
rows1,814
SITEMAP · 04
Crawl-budget config
noindex + sitemap-exclude
indexable~21k
BUILD · 05
Astro 6 · Islands
static-first · hydrate-on-need
THUMBS · 06
sharp · build-time
og · thumb · minify
assets73,473
SHIP · 07
wrangler 4 · ./deploy.sh
incremental manifest diff
last-deploy~30s
EDGE · 08
CF Workers + Assets
$5/mo base · 330+ cities
cache-hit94%
OUTPUT · 09
Organic long-tail
privacy-first · mediavine-ready
sess/24h0
SIGNAL · 10
Search Console export
weekly ZIP · impressions/CTR
queries89,412
ANALYZE · 11
scripts/analyze-gsc.mjs
cannibalization detect
POSCTRCAT
FILTER · 12
Category kill-switch
noindex + sitemap-exclude
kicked52,547
EVENT LOG · ./deploy.sh · wrangler · analyze-gsc.mjs
04:18:22wranglerdeploy · 412 deltas · 28s · skipped 73,061 unchanged
04:18:14astrobuild · 73,359 routes · format:file · 187s
04:18:09analyzercannibal-detect · 18 cat · pos<5 · ctr<.5%
04:18:04filterkick · category:percent · 1,402 routes → noindex
04:17:58sitemaprebuilt · 20,812 indexable · 52,547 excluded
04:17:52sharpog · 73,473 thumbs · 1024×512 · cached
04:17:44gscexport · 7d · 89,412 queries · csv → /tmp
04:17:36tplcollected · 13 templates · n×n dataset · 1,814 rows
04:17:28cfworkers · req 12,408 · hit 94% · cost $0.00
04:18:22wranglerdeploy · 412 deltas · 28s · skipped 73,061 unchanged
04:18:14astrobuild · 73,359 routes · format:file · 187s
04:18:09analyzercannibal-detect · 18 cat · pos<5 · ctr<.5%
04:18:04filterkick · category:percent · 1,402 routes → noindex
04:17:58sitemaprebuilt · 20,812 indexable · 52,547 excluded
04:17:52sharpog · 73,473 thumbs · 1024×512 · cached
04:17:44gscexport · 7d · 89,412 queries · csv → /tmp
04:17:36tplcollected · 13 templates · n×n dataset · 1,814 rows
04:17:28cfworkers · req 12,408 · hit 94% · cost $0.00

◦ Schematische Darstellung, Zahlen illustrativ.

§ 04 — Decisions · trade-offs

Vier bewusste Entscheidungen.

Pro Entscheidung: was gewählt, statt was, warum.
D/01

Astro 6 Static-First + Islands statt Next.js SSR.

chosen
Alle Tool-Seiten vorgerendert, Interaktion nur in React-Islands — keine Server-Runtime im Request-Pfad
instead of
Next.js SSR/ISR mit Node-Runtime bei jedem Request
reason
Bei einem Werbemodell zählt jeder Cent Compute. SSR hätte pro Tool-Interaktion Compute-Minuten gekostet und CDN-Caching unterwandert. Static + Islands gibt sehr gute Lighthouse-Werte ohne Tuning, CDN cached alles, und die React-Inseln hydrieren nur, wo echte Interaktion gebraucht wird — nicht in der Tool-Beschreibung und nicht im Footer.
D/02

Cloudflare Workers + Assets statt Pages oder Vercel.

chosen
CF Workers Paid $5/mo · Wrangler 4 · bis 100K Files
instead of
CF Pages (20K-Limit) · Vercel (Traffic-scaled pricing)
reason
Pages scheitert hart am 20K-File-Limit — und wir produzieren 73K Seiten. Vercel skaliert Preise mit Traffic, was bei spiky Long-Tail-SEO unkalkulierbar wird. Workers Paid ist berechenbar: $5/Monat Grundpreis, statische Assets ohne Aufpreis, Worker-Requests erst über dem Kontingent. Für ein Ad-Revenue-Modell ist das überlebenswichtig — ein kalkulierbarer Kostensockel, egal wie stark der Traffic schwankt.
D/03

Lokaler Deploy via ./deploy.sh statt GitHub Actions.

chosen
Wrangler lokal, inkrementeller Upload — CI nur als workflow_dispatch-Backup
instead of
GitHub Actions push-on-main mit Full-Deploy
reason
Actions lief zuverlässig in einen 504 Gateway Timeout beim Upload von 146K Build-Assets an Cloudflare. Nicht mal theoretisch — reproduzierbarer Fehlschlag. Wrangler lokal pusht inkrementell, sieht, was sich geändert hat, und lädt nur Deltas. CI ist jetzt Backup für den Notfall, nicht der Hot-Path.
D/04

Programmatic SEO als Template × Datensatz.

chosen
Ein .astro-Template pro Kategorie, n × n-Kombinationen aus Daten → tausende Long-Tail-Seiten
instead of
Handgeschriebene Seiten pro Tool-Kombination
reason
Long-Tail-SERP bedient man nicht mit 40 handgeschriebenen Seiten. Template-Ansatz bedient echte Suchintention (z. B. USD to EUR, EUR to JPY …) in einem Commit. Und — entscheidend — er erlaubt evidenzbasierte Steuerung: wenn eine Kategorie nicht rankt, wird sie per noindex + Sitemap-Filter komplett abgeschaltet, ohne Code-Delete. Kategorie ein, Kategorie aus — ein Config-Flag.
§ 05 — Highlights · interesting bits

Was nicht offensichtlich war.

Edge-Cases und Details, die erst beim Bauen klar wurden.

GSC-Analyzer gegen Widget-Kannibalisierung

H/01
Google rankt pSEO-Seiten wie „5% of 200“ auf Position 8–10 — mit 0 % CTR, weil Googles eigenes Calculator-Widget direkt in der SERP antwortet. Traffic-Illusion auf Position, Null an Besuchern.

scripts/analyze-gsc.mjs parst GSC-Export-ZIPs, findet automatisch Kategorien, wo die Position gut ist, aber die CTR null — und flaggt sie für noindex. Ergebnis: ~52.000 Seiten via noindex + Sitemap-Filter aus dem Crawl-Budget genommen, das Budget umgelenkt auf die ~21.000 Seiten, die kein Google-Widget kannibalisiert. Recovery-Fenster laut GSC-Trend: 4–8 Wochen, kein Quick-Win, sondern Hygiene-Maßnahme.

Canonical-Duplicates per build.format: 'file'

H/02
Astro erzeugt per Default /tool/index.html mit Trailing-Slash-Redirects. Bei 73K Seiten sind das 343 Canonical-Duplikate — gleiche URL, unterschiedliche Normalisierung, sichtbar als Coverage-Errors im GSC.

Umschalten auf build.format: 'file' + trailingSlash: 'never' produzierte flache .html-Outputs ohne Redirect-Zwischenstufe. Ein Commit, das Problem war weg. Manchmal ist der Fix ein Config-Flag, das man vor vier Monaten hätte setzen sollen.

Zero-Origin trotz File-Processing

H/03
Image-Compressor, PDF-Tools, ZIP-Extractor — alles, was normalerweise Upload braucht, läuft komplett im Browser. browser-image-compression, jszip, html2pdf.js. sharp nur zur Build-Zeit für Thumbnails.

Kein Upload, kein Backend, keine DSGVO-Baustelle — Nutzerdaten verlassen den Browser nie. Erfordert sauberes Web-Worker-Handling bei großen Dateien, damit die UI nicht einfriert. Aber spart jeden Gedanken an Storage, Moderation, Abuse, GDPR-DPA, AV-Verträge. Der beste Server ist keiner.

Wrangler-Push als Deploy-Hot-Path

H/04
Bei ~146K Build-Assets (HTML plus OG-Thumbnail je Seite) wird jeder Upload-Mechanismus zur Frage der Lebensqualität. Wrangler 4 hat endlich inkrementelle Manifest-Diffs — es lädt nur Files hoch, die sich gegen den CF-Side-State geändert haben.

Das verändert den Deploy-Loop komplett: ein Template-Fix in einem Tool deployt in ~30 Sekunden statt 8 Minuten. Das erlaubt iteratives Fixen direkt gegen Production — was für ein Werbemodell auch heißt, kaputte Seiten in 30 Sekunden zu reparieren statt einen CI-Lauf abzuwarten.
§ 06 — Stack · in production

Was läuft.

Eingesetzte Toolchain im Produktivbetrieb — nichts Theoretisches.
Astro 6React IslandsTypeScriptMDX · Content CollectionsCloudflare Workers + AssetsWrangler 4pSEO Templatessharp (build-time)browser-image-compressionjszip · html2pdf.jsGSC AnalyzerSitemap filterPrivacy-first · no cookies
§ 07 — Reflection · takeaways

Was ich gelernt habe.

Projekt läuft. Diese Dinge nehme ich in die nächsten mit.

SEO ist ein Feedback-System, kein Upload.

Ich bin mit der Illusion gestartet, dass man pSEO „baut und deployt“. Realität: man baut, deployt, misst, kickt die Hälfte wieder raus, deployt neu. Der GSC-Analyzer war der Unterschied zwischen einer Tool-Seite und einem Tool-Index. Ohne den Feedback-Loop hätte ich 73K Seiten aufrechterhalten, die gemeinsam weniger Traffic bringen als 21K fokussierte. Jedes pSEO-Projekt braucht diesen Rückkanal ab Tag 1 — nicht erst, wenn der Index zu groß für das Crawl-Budget ist.

Berechenbares Pricing ist ein Feature.

Workers Paid für $5 Grundpreis hat mir den Kopf freigemacht. Keine Revenue-Prognosen zur Infra-Angst, kein Ausrechnen von Worst-Case-Rechnungen für die statische Auslieferung. Der Traffic darf explodieren, ohne dass die statische Auslieferung teurer wird. Das ist selten geworden — und für einen Solo-Entwickler, der nachts noch SEO-Analysen macht, mehr wert als jeder Premium-Feature-Blogpost.

◦ NEXT CASE · 09 / 10
Ludotek → ↗
← alle Projekte