Writing
Writing on building for the web, mostly on Cloudflare.
4 posts202652 minutes of reading
20 min
Every Cloudflare product, and which ones this site runs on
Every Cloudflare developer product as of September 2026 in one table: what Workers, D1, KV, R2, Queues, Durable Objects, AI Search and the rest actually do, and which ones a complete site runs on, where, and why. With the refusals and the constraints, dated.
11 min
Site search on Cloudflare D1 with SQLite full-text search
How to build site search on Cloudflare D1 with SQLite FTS5: two indexes for stemmed and exact matching, reciprocal rank fusion in place of raw bm25, section-level records, a browse path for filter-only queries, and the D1 export problem every FTS5 user has.
15 min
How this blog stores posts in git and serves them from D1
How to build a content pipeline where markdown in git is the source of truth and D1 serves every read: one deterministic renderer shared by the build and the Worker, a gate verified by breaking it, atomic commits through the GitHub API, and the two bugs to expect. Updated August 2026, when the committed artifact came out in favor of provenance hashes, a deploy-time drift table, and a self-repairing health check.
6 min
Where should a blog store its words?
Two content models for a Cloudflare-native blog, one database, and the four arguments that settled it.