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…
Writing & Ideas
A living record of my evolving thoughts on engineering, products, and the friction of building software.
Architecture
Systems design and static-first approaches
"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…
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…
Developer Tools
AI, agents, and developer experience
You've seen the same site a hundred times. Same rounded corners, same gray-on-white cards, same hero with a gradient and a CTA. It looks fine. It also looks…
I get asked how wchen.ai handles multiple languages and how I keep English, Spanish, and Chinese in sync without drowning in copy-paste. The short answer: the…
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…
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…
Infrastructure
Hosting, email, and platform choices
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…
A static site doesn't run code when someone hits a page. That's the point. But a newsletter requires dynamics: accept a signup, send a confirmation email,…
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."…
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…
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…
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…
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,…
Every project starts with the same unglamorous decision: where does this thing actually run? Most developers treat hosting as a checkbox. Pick the default,…
Workflow
How we build and ship
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…
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…
The first time I used spec-kit, I fed it a vague paragraph about what I wanted and hit run. The spec it produced was technically valid — and practically…
Occasional updates when I publish new writing. No spam, unsubscribe anytime.
Or follow via feed
Subscribe via RSS