Skip to main content
Available for work

The Blog.

Notes on development, design, and the things I build.

One Codebase, Six Branded Sites
October 18, 2026 3 min read

One Codebase, Six Branded Sites

Six property developers each wanted their own sales site. Building six projects would have meant six codebases drifting apart. Here is the config-driven alternative, and where it stops being a good idea.

ArchitectureNext.jsMulti-tenant
The Bugs That Report Success
October 14, 2026 3 min read

The Bugs That Report Success

A save that fails loudly gets fixed on Tuesday. A save that fails and returns 200 gets found in a quarterly audit. Two real examples, and what they have in common.

DebuggingPostgresEngineering
Five Languages on a Serverless Runtime
October 10, 2026 3 min read

Five Languages on a Serverless Runtime

Module-level state is fine until two requests share a process. Here is why the translation dictionary went into a per-request context instead, and the performance pass that came with it.

i18nPerformanceCloudflare Workers
No Framework, No Build Step, No package.json
October 6, 2026 3 min read

No Framework, No Build Step, No package.json

Three static files, PostgREST, and Row Level Security doing the authorization. When the boring stack is the correct one — and the one place it bit back.

ArchitectureSupabasePostgres
Build the Tool That Makes the Grind Possible
October 2, 2026 3 min read

Build the Tool That Makes the Grind Possible

Placing 87 navigation hotspots by hand in a JSON file is miserable work. The fix was not discipline. It was two days building an in-app authoring mode.

ToolingWebGLDeveloper Experience
A Padlock Is Decoration
September 28, 2026 3 min read

A Padlock Is Decoration

The lock icon on a paid lesson protects nothing. Designing content protection for a training platform meant being precise about where the real boundary is — and saying so in the README.

SecurityProduct DesignArchitecture
Available for work

Let's create your next big idea.