Things I build, break, fix, and write about

1 September 2026
Privacy boundaries when AI touches government records

AI governance gets awkward fast when government records are involved, because the model is rarely the problem. The problem is the sloppy boundary around it, the sort I have seen quietly turn a harmless prompt into a route through records nobody meant to expose.

1 September 2026
Metadata schema choices for content libraries

Structured metadata only works when it matches how people actually retrieve content. I have seen neat schemas fail as soon as the library meets real...

31 August 2026
Federation trade-offs in self-hosted social feeds

Federation looks tidy until you let it touch the edges, and then the odd cases arrive fast. I prefer self-hosted social feeds that stay explicit about...

31 August 2026
FireAvert Z-Wave stove shutoffs for offline safety

FireAvert’s setup does the part that matters without asking Home Assistant to babysit it, which is exactly how I want stove protection to behave. The...

Latest blog posts you might like

12 July 2026
Cloudflare URL Scanner Agent Readiness scores

Cloudflare URL Scanner Agent Readiness is one of those checks that makes a site look different once you know what it is measuring. I like that it is blunt, because the web is full of pages that work...

11 July 2026
Heap overflow in ngx_http_script_copy_capture_code()

I spent too long trusting rewrite logic that looked harmless, and that is usually when nginx rewrite module is_args bites back. Escaped input, stale state, and a buffer sized on the wrong assumption...

11 July 2026
Cloudflare Managed WAF rules: watch action changes

Cloudflare Managed WAF rules are easy to misread if you only skim the release notes. I look at the Security Events dashboard instead, because that is where a quiet detection turns into a block, or a...

10 July 2026
Handling backend restarts in Cloudflare Realtime SFU

Cloudflare Realtime WebSocket adapter handles brief backend restarts better than I expected, but only within a hard five-second window. That is enough to turn a wobble into a pause; after that, the...

9 July 2026
Detect Split ClientHello failures in TLS 1.3

Split ClientHello failures are exactly the sort of thing that waste an afternoon, because the server looks fine until a fragmented post-quantum handshake trips over something in the middle. TLS...

9 July 2026
Checking Logpush field mappings after schema updates

Cloudflare Logpush datasets do not always announce when they change shape, and that is where the trouble starts. I check the field map against real exports, because a parser that still runs can be...

8 July 2026
Local DNS proxy now preserves DNSSEC records

Cloudflare One Client for Windows now leaves DNSSEC records alone, which is exactly the sort of change I like, because it stops the client quietly meddling with answers. I have seen enough broken name...

8 July 2026
Cloudflare One Client for macOS DNS search suffixes

Cloudflare One Client for macOS can make a short hostname behave very differently, and most of the pain sits in the suffix list rather than DNS itself. I have seen perfectly sane machines fail because...

7 July 2026
Tracing acme.sh certificate handling in TLS interception

I spent too long chasing the neat version of TLS wiretapping reconstruction, then found the mess: shell parsing, token limits, and renewal timing. The interesting bit is not the packet capture, it is...

7 July 2026
Reverse engineering game binaries with static analysis

Game binaries give up more than they should, if you know where to look. I start with binary analysis, not the folklore around the game, then use strings, imports, and control flow to separate real...