How LLM Radar works
One Cloudflare Worker, one cron trigger, one KV key. No framework, no database, no build step.
Pipeline
- Cron triggerevery 30 min
- refresh()38 source adapters in parallel
- Workers KV1 key · 26.0 KB
- Worker renderHTML per request
- Your browser1 request, inline CSS/JS
Last refresh
Duration5.4 s
Sources OK38 / 38
Items127
1 · Ingestion
A Cron Trigger runs the Worker's
scheduled() handler every 30 minutes. It calls every source adapter at once with
Promise.all, each with an 8-second timeout, so one slow site can't hold up the rest.
All 38 sources and their adapters
| Source | Used for | Adapter |
|---|---|---|
| New models · OpenRouter | Feed · Models | OpenRouter models API (JSON) |
| Trending · Hugging Face | Feed · Models | Hugging Face models API (JSON) |
| arXiv · LLM inference | Feed · Inference | RSS / Atom |
| vLLM Blog | Feed · Inference | RSS / Atom |
| NVIDIA Inference | Feed · Inference | RSS / Atom |
| PyTorch Blog | Feed · Inference | RSS / Atom |
| Together AI | Feed · Inference | RSS / Atom |
| The Go Blog | Feed · Go | RSS / Atom |
| Rust Blog | Feed · Rust | RSS / Atom |
| This Week in Rust | Feed · Rust | RSS / Atom |
| Perl.com | Feed · Perl | RSS / Atom |
| blogs.perl.org | Feed · Perl | RSS / Atom |
| Cloudflare Blog | Feed · Cloud | RSS / Atom |
| AWS What's New | Feed · Cloud | RSS / Atom |
| Google Cloud Blog | Feed · Cloud | RSS / Atom |
| OpenTofu | Feed · IaC | RSS / Atom |
| HashiCorp | Feed · IaC | RSS / Atom |
| Hugging Face Blog | Feed · AI | RSS / Atom |
| Simon Willison | Feed · AI | RSS / Atom |
| Hacker News | Feed · General | RSS / Atom |
| LWN.net | Feed · General | RSS / Atom |
| vLLM | Release · Inference | GitHub releases.atom |
| SGLang | Release · Inference | GitHub releases.atom |
| llama.cpp | Release · Inference | GitHub releases.atom |
| Ollama | Release · Inference | GitHub releases.atom |
| Go | Release · Languages | go.dev/dl JSON |
| Rust | Release · Languages | GitHub releases.atom |
| Perl | Release · Languages | MetaCPAN API (JSON) |
| OpenTofu | Release · Infrastructure | GitHub releases.atom |
| Terragrunt | Release · Infrastructure | GitHub releases.atom |
| tflint | Release · Infrastructure | GitHub releases.atom |
| Alpine Linux | Release · Infrastructure | alpinelinux.org releases.json |
| PostgreSQL | Release · Infrastructure | postgresql.org versions RSS |
| Redis | Release · Infrastructure | GitHub releases.atom |
| Cloudflare | Status | Atlassian Statuspage JSON |
| GitHub | Status | Atlassian Statuspage JSON |
| AWS | Status | AWS Health RSS |
| Google Cloud | Status | Google Cloud incidents JSON |
2 · Processing
- Parsing. Workers have no
DOMParser, so RSS and Atom go through a ~60-line regex parser that handles CDATA, entities and both link styles. JSON APIs are mapped directly. - Normalising. Every adapter returns the same shape —
{ title, link, date, meta }— so the page renders all sources the same way. - Release filtering. Release candidates, betas and nightlies are dropped; the remaining versions are sorted numerically, so
1.13.1beats1.12.7whatever order the feed lists them. - Failure handling. Sources are isolated. If one fails, its previous copy is kept and marked stale instead of blanking the card. If KV is empty the first request refreshes inline; if the data is over 2 hours old (cron paused), a request triggers a background refresh.
- Not yet built: cross-source dedupe and ranking. Items are shown per source, newest first.
3 · Storage
- Workers KV — used. The whole snapshot is one JSON value. There is one writer (the cron job) and many readers, and data that changes every 30 minutes doesn't need strong consistency, which is what KV is built for. 48 writes a day, well under the free tier's 1,000.
- D1 — not used yet. Nothing needs querying today. It becomes the right tool once the radar keeps history: dedupe across runs, trends, "new since your last visit".
- R2 — not used. There are no files or blobs to store.
4 · Serving
- Rendering. HTML is built from template strings in the Worker. The page is a single response with inline CSS and about 2 KB of JavaScript.
- Caching. KV reads use a 5-minute edge cache (
cacheTtl: 300); browsers cache the page for 60 seconds. - Latency. p50 ≈ [p50] ms (from Workers Observability).
5 · Cost
Runs for about [$X]/month on Cloudflare's [free / paid] plan.