Skip to content
WC.

Writing & Ideas

A living record of my evolving thoughts on engineering, products, and the friction of building software.

Skip to theme navigation

Architecture

Systems design and static-first approaches

Read-along audio without a server

Read-along audio on a website usually implies a server. Someone hits play, a server runs text-to-speech, streams the result, or at least looks up a recording…

3 min readArchitecture
staticaudionextjs
Build-Time Validation as a Product

"Fail in production" is the default. A broken link ships. A typo in a theme descriptor slips through. Frontmatter is missing a required field and the build…

3 min readArchitecture
validationstatic-siteszod
Building Static-First in an Era of Dynamism

There is a growing trend to render everything on the server dynamically. With the advent of Edge computing, we're told that dynamic rendering is basically…

3 min readArchitecture
nextjsstaticperformance

Developer Tools

AI, agents, and developer experience

Progressive Disclosure in Agent Skills

The more you put into a skill, the more useful it becomes — until it isn't. A single SKILL.md that tries to cover every content type, schema, and voice rule…

4 min readDeveloper Tools
skillsagentscursor
Teaching an Agent Your Voice

You're reading a blog post written by an AI agent. But it sounds like me. That's not an accident. I built a skill — a reusable instruction set — that teaches…

4 min readDeveloper Tools
skillsagentscursor

Infrastructure

Hosting, email, and platform choices

GitHub as Your Backend

You can run a static site with comments and activity without running a database or an API. The trick is to treat GitHub as the backend you never have to…

2 min readInfrastructure
githubgiscusstatic-sites
Recurring Newsletter as a Build Step

Most advice for sending a recurring digest assumes you need a scheduler. A cron job, a Lambda on a timer, or a hosted service that runs "every Tuesday at 9."…

3 min readInfrastructure
newsletterstatic-sitesci
Comments Without a Backend

I wanted a comment section on writing and project pages without running a database or a custom API. Static sites are great until you need state that lives…

2 min readInfrastructure
giscuscommentsstatic-sites
Choosing a Marketing Email Provider

Picking an email provider for a newsletter or marketing drip feels like it should be simple. You need to send emails, collect subscribers, and maybe track…

5 min readInfrastructure
emailresenddeveloper-tools
The Friction of Static Site Email

Adding email to a static site should be a solved problem. I just needed to receive contact form submissions and send replies from my own domain. It sounds…

2 min readInfrastructure
infrastructuremailgunstatic-sites
Ditching Netlify

I used Netlify for years. It was the first platform that made deploying a static site feel effortless — git push, wait thirty seconds, done. For a long time,…

4 min readInfrastructure
netlifycloudflarehosting
Why I Build on Cloudflare

Every project starts with the same unglamorous decision: where does this thing actually run? Most developers treat hosting as a checkbox. Pick the default,…

4 min readInfrastructure
cloudflarehostinginfrastructure

Workflow

How we build and ship

Vibe Coding a Website in a Day

I built this entire website in a single day. Not a landing page. Not a template with swapped colors. A statically exported Next.js site with MDX content…

5 min readWorkflow
vibe-codingcursoragents
Pitch the Idea Before You Vibe Code

I do not start a new project in Cursor. I start in ChatGPT. Before there is a repo, there is an idea. And before there is an implementation plan, there is…

6 min readWorkflow
vibe-codingcursorskills

Back to top