FlareCraft
About

The system reporting
on the platform.

FlareCraft is a hands-on evaluation of the Cloudflare developer platform — built using the platform itself. This page is the architecture reference and the honest write-up of choices made.

The thesis

A daily briefing of what developers are shipping on a platform is exactly the kind of work a developer adoption function does. So FlareCraft does that work — using the platform itself. The act of building this is the demonstration; the artifact persists as a useful tool. The system reporting on the platform is the platform.

Architecture

FlareCraft architecture diagram. Two Cloudflare Workers — flarecraft-pipeline and flarecraft-site — share data via D1, Vectorize, and R2. The pipeline runs on a daily Cron Trigger, fetches from Hacker News, five Reddit subs, and Cloudflare's Discord (via AnswerOverflow's MCP server), classifies and embeds via Workers AI, dedupes via Vectorize, and persists to D1 and R2. The site Worker reads from D1 in the SSR request path. Beehiiv handles public subscribe and Resend handles email delivery.
Eight Cloudflare primitives. Three sources. Two Workers. One product.

Two Workers in one repo, sharing eight Cloudflare primitives plus three external services (Beehiiv for audience, Resend for delivery, AnswerOverflow's MCP server for Discord):

Workers
Two of them: flarecraft-pipeline (cron + AI + writes) and flarecraft-site (this SSR site, reads). Same runtime, different roles. One Worker per concern is the cleaner production pattern.
Workflows
The pipeline is a WorkflowEntrypoint. Each step (fetch → classify+persist → finalize → notify) is a checkpointed step.do with its own retry policy. A step.sleep between persist and digest forces a fresh Worker invocation so the digest doesn't share the heavy step's subrequest budget. Durable execution is a primitive of the platform — no Temporal sidecar.
Cron Triggers
One line in wrangler.jsonc ("crons": ["0 12 * * *"]) registers the daily 07:00 CT run. The cron handler instantiates a Workflow and returns; the Workflow runs durably in its own context.
Workers AI — Llama 3.3 70B
Classifies each Hacker News post with structured JSON output (response_format: json_schema). The schema enforces the exact shape downstream storage expects — no parsing brittleness. Quality matters more than latency for a daily-cron workload, so 70B over 8B.
Workers AI — BGE Base (768d)
Generates embeddings of title + one_liner for semantic dedup. Different model, same inference platform, same binding.
Vectorize
Holds the embedding corpus. Each new item queries topK: 1; if cosine similarity exceeds 0.92 against any existing vector, it's treated as a duplicate and skipped. Catches the case where the same launch gets posted multiple times across HN threads — hash-on-URL would let those through; semantic dedup catches them.
D1
Two tables: briefings (one row per pipeline run) and items (classified posts). Pipeline writes; this site reads in the SSR request path. Same database, two Workers, different bindings — capability-based separation.
R2
Archives raw normalized post JSON keyed by date/source/id. Egress-free storage means the entire corpus can be re-classified later when the prompt or model improves, without re-fetching from HN.
Pages / Static Assets
This site is server-rendered on a Worker via @astrojs/cloudflare, so dynamic data from D1 lands in the request path with no rebuild needed. Static assets (favicons, fonts, brand) are served by the same Worker via the ASSETS binding.
Beehiiv (external)
Public subscribe page at flare-craft.beehiiv.com. Audience layer — owns growth, archive, list management. Beehiiv's programmatic publish API is enterprise-only, which surfaced at runtime; the resulting dual-platform architecture is actually more honest than a single-vendor stack.
Resend (external)
Transport layer for the daily digest. Single POST per send, no SDK weight. Sends from notes@flarecraft.dev via verified domain (SPF/DKIM/DMARC auto-written to the Cloudflare zone by Resend's add-domain integration — a great two-platform handshake).
AnswerOverflow (external) — via MCP
Cloudflare's developer community lives in Discord (89,684 members in the official guild). We can't directly index Discord without violating its TOS, so we go through AnswerOverflow — an open-source community indexer that the Cloudflare server has chosen to surface in. AO exposes a public MCP server, so the integration is server-to-server JSON-RPC, no scraping. We run a battery of platform-keyword searches scoped to the Cloudflare guild (serverId: 595317990191398933), filter by recency (7-day window), and feed the resulting Q&A threads through the same classifier as HN and Reddit — with a new q-and-a angle and a structurally-derived resolved boolean from AO's solution field.

Choices I deliberately didn't make

Honest tradeoffs and known frictions

About the builder

Andrew Moore is a Founder, Product Executive, and Builder. Learn more about his current and prior work here.

Live at https://flarecraft.dev · source on GitHub.