// writing

SRE & DevOps Blog

Notes on SRE, DevOps, infrastructure, and platform engineering. Real problems, real solutions.

16 posts
Privacy-First Analytics on Cloudflare Workers with Analytics Engine
01
2026-06-18 · 5 min read
Privacy-First Analytics on Cloudflare Workers with Analytics Engine
How to track page views without cookies, consent banners, or third-party scripts — and the one thing the docs bury: the binding is write-only.
Two-Layer Spam Protection Without CAPTCHAs
02
2026-06-03 · 4 min read
Two-Layer Spam Protection Without CAPTCHAs
How to stop contact form spam silently using a honeypot field and D1 rate limiting — no CAPTCHA, no third-party scripts, no false positives.
Building a Table of Contents with IntersectionObserver (and the HTML Entity Bug That Bit Me)
03
2026-05-20 · 4 min read
Building a Table of Contents with IntersectionObserver (and the HTML Entity Bug That Bit Me)
How to build a sticky ToC that highlights the active section as you scroll, and the double-encoding bug that makes apostrophes show as ' in the browser.
One Year Building on the Edge: What I'd Change
04
2026-05-20 · 4 min read
One Year Building on the Edge: What I'd Change
An honest look at building a full site on Cloudflare Workers: what works well, what hurts, and what I'd do differently starting over today.
KV vs D1: When to Use Each on Cloudflare Workers
05
2026-05-20 · 3 min read
KV vs D1: When to Use Each on Cloudflare Workers
KV is a global key-value store with eventual consistency. D1 is SQLite with strong consistency but regional writes. Choosing wrong costs you later.
Automating Post Publishing from a Mobile Device with GitHub Actions
06
2026-05-19 · 3 min read
Automating Post Publishing from a Mobile Device with GitHub Actions
How I publish blog posts from my phone without touching a laptop — using GitHub Actions, Cloudflare Workers, and a CI pipeline that handles everything automatically.
Server-Side Syntax Highlighting Without a Library
07
2026-05-19 · 4 min read
Server-Side Syntax Highlighting Without a Library
Why I wrote a custom tokenizer instead of using Prism or highlight.js on a Cloudflare Worker, and how a left-to-right token scanner works.
Adding a Blog to a Cloudflare Worker Without a CMS — Cloudflare KV as a Database.
08
2026-05-18 · 4 min read
Adding a Blog to a Cloudflare Worker Without a CMS — Cloudflare KV as a Database.
No database, no admin panel, no origin server. Just Markdown files, a publish script, and Cloudflare KV.
Hosting a Personal Site on Cloudflare Workers with a Custom Domain — What Nobody Tells You.
09
2026-05-17 · 3 min read
Hosting a Personal Site on Cloudflare Workers with a Custom Domain — What Nobody Tells You.
Three problems no tutorial mentions: apex domains, wildcard routes, and DNS parking pages.
Staging Without Duplicating Infrastructure
010
2026-05-16 · 3 min read
Staging Without Duplicating Infrastructure
Running a staging environment on Cloudflare Workers that shares KV, R2, and D1 with production. The tradeoffs are real but manageable.
CI That Writes Back to the Repository
011
2026-05-15 · 4 min read
CI That Writes Back to the Repository
The pattern where CI generates artifacts, commits them to main, and uses [skip ci] to avoid infinite loops. When it's the right tool and when it's not.
R2 as an Image CDN: The Complete Pipeline
012
2026-05-14 · 3 min read
R2 as an Image CDN: The Complete Pipeline
From a 5MB PNG to a 100KB WebP in R2, served with the right headers. The full publish pipeline for images on Cloudflare Workers.
Why I Didn't Use a Framework (And What It Actually Cost Me)
013
2026-05-13 · 3 min read
Why I Didn't Use a Framework (And What It Actually Cost Me)
No Next.js, no Astro, no Hono. Just a 1600-line JavaScript file. Here's an honest accounting of the tradeoffs.
014
2026-05-12 · 3 min read
Workers AI in Production: Expectations vs. Reality
BART summaries, M2M100 translations, rate limits, and the KV caching pattern that makes it all usable at the edge.
D1 SQLite on the Edge: What the Docs Don't Tell You
015
2026-05-11 · 3 min read
D1 SQLite on the Edge: What the Docs Don't Tell You
D1 is Cloudflare's serverless SQLite. It works great for simple use cases, but the edge model changes some assumptions you'd make with a traditional database.
Edge Caching on Cloudflare Workers Without a Paid CDN
016
2026-05-10 · 3 min read
Edge Caching on Cloudflare Workers Without a Paid CDN
Your Worker is already the CDN. Here's how to use Cache-Control and s-maxage to serve images and static assets at near-zero cost.