<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Wilson Chen | Writing</title>
    <link>https://wchen.ai/en/writing</link>
    <description>Thoughts on engineering, products, and building software.</description>
    <language>en-us</language>
    <atom:link href="https://wchen.ai/rss/en.xml" rel="self" type="application/rss+xml" />
    <lastBuildDate>Sat, 21 Mar 2026 03:45:25 GMT</lastBuildDate>
    
    <item>
      <title><![CDATA[Pitch the Idea Before You Vibe Code]]></title>
      <link>https://wchen.ai/en/writing/pitch-before-you-vibe-code</link>
      <guid isPermaLink="true">https://wchen.ai/en/writing/pitch-before-you-vibe-code</guid>
      <pubDate>Sat, 14 Mar 2026 12:00:00 GMT</pubDate>
      <description><![CDATA[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 usually a half-formed instinct that sounds…]]></description>
      <category>Workflow</category>
    </item>
    <item>
      <title><![CDATA[Read-along audio without a server]]></title>
      <link>https://wchen.ai/en/writing/static-first-audio</link>
      <guid isPermaLink="true">https://wchen.ai/en/writing/static-first-audio</guid>
      <pubDate>Sat, 14 Mar 2026 12:00:00 GMT</pubDate>
      <description><![CDATA[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 in a database. I wanted audio on this…]]></description>
      <category>Architecture</category>
    </item>
    <item>
      <title><![CDATA[Build-Time Validation as a Product]]></title>
      <link>https://wchen.ai/en/writing/build-time-validation-as-product</link>
      <guid isPermaLink="true">https://wchen.ai/en/writing/build-time-validation-as-product</guid>
      <pubDate>Fri, 13 Mar 2026 12:00:00 GMT</pubDate>
      <description><![CDATA["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 still runs—until a page renders wrong or a…]]></description>
      <category>Architecture</category>
    </item>
    <item>
      <title><![CDATA[The Cost of Generic: Default UI and Agent-Generated Design]]></title>
      <link>https://wchen.ai/en/writing/cost-of-generic-ui-agent-design</link>
      <guid isPermaLink="true">https://wchen.ai/en/writing/cost-of-generic-ui-agent-design</guid>
      <pubDate>Fri, 13 Mar 2026 12:00:00 GMT</pubDate>
      <description><![CDATA[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 like every other product that shipped last…]]></description>
      <category>Developer Tools</category>
    </item>
    <item>
      <title><![CDATA[GitHub as Your Backend]]></title>
      <link>https://wchen.ai/en/writing/github-as-your-backend</link>
      <guid isPermaLink="true">https://wchen.ai/en/writing/github-as-your-backend</guid>
      <pubDate>Fri, 13 Mar 2026 12:00:00 GMT</pubDate>
      <description><![CDATA[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 operate. Identity, storage, and activity…]]></description>
      <category>Infrastructure</category>
    </item>
    <item>
      <title><![CDATA[How This Site's i18n Works — and How Two Agent Skills Keep It Fed]]></title>
      <link>https://wchen.ai/en/writing/i18n-and-content-skills</link>
      <guid isPermaLink="true">https://wchen.ai/en/writing/i18n-and-content-skills</guid>
      <pubDate>Fri, 13 Mar 2026 12:00:00 GMT</pubDate>
      <description><![CDATA[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 site is built around a clear content…]]></description>
      <category>Developer Tools</category>
    </item>
    <item>
      <title><![CDATA[Sending a Newsletter From a Static Site With Resend and Cloudflare]]></title>
      <link>https://wchen.ai/en/writing/newsletter-static-site-resend-cloudflare</link>
      <guid isPermaLink="true">https://wchen.ai/en/writing/newsletter-static-site-resend-cloudflare</guid>
      <pubDate>Fri, 13 Mar 2026 12:00:00 GMT</pubDate>
      <description><![CDATA[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, handle the click, add the contact to a list,…]]></description>
      <category>Infrastructure</category>
    </item>
    <item>
      <title><![CDATA[Progressive Disclosure in Agent Skills]]></title>
      <link>https://wchen.ai/en/writing/progressive-disclosure-agent-skills</link>
      <guid isPermaLink="true">https://wchen.ai/en/writing/progressive-disclosure-agent-skills</guid>
      <pubDate>Fri, 13 Mar 2026 12:00:00 GMT</pubDate>
      <description><![CDATA[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 can run to hundreds of lines. The agent…]]></description>
      <category>Developer Tools</category>
    </item>
    <item>
      <title><![CDATA[Recurring Newsletter as a Build Step]]></title>
      <link>https://wchen.ai/en/writing/recurring-newsletter-as-build-step</link>
      <guid isPermaLink="true">https://wchen.ai/en/writing/recurring-newsletter-as-build-step</guid>
      <pubDate>Fri, 13 Mar 2026 12:00:00 GMT</pubDate>
      <description><![CDATA[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." That makes sense if your content lives in…]]></description>
      <category>Infrastructure</category>
    </item>
    <item>
      <title><![CDATA[Comments Without a Backend]]></title>
      <link>https://wchen.ai/en/writing/site-comments-giscus</link>
      <guid isPermaLink="true">https://wchen.ai/en/writing/site-comments-giscus</guid>
      <pubDate>Fri, 13 Mar 2026 12:00:00 GMT</pubDate>
      <description><![CDATA[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 somewhere. Comments are exactly that—someone…]]></description>
      <category>Infrastructure</category>
    </item>
    <item>
      <title><![CDATA[Choosing a Marketing Email Provider]]></title>
      <link>https://wchen.ai/en/writing/choosing-marketing-email-providers</link>
      <guid isPermaLink="true">https://wchen.ai/en/writing/choosing-marketing-email-providers</guid>
      <pubDate>Fri, 27 Feb 2026 12:00:00 GMT</pubDate>
      <description><![CDATA[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 opens. The market is crowded: Buttondown,…]]></description>
      <category>Infrastructure</category>
    </item>
    <item>
      <title><![CDATA[The Friction of Static Site Email]]></title>
      <link>https://wchen.ai/en/writing/static-site-email</link>
      <guid isPermaLink="true">https://wchen.ai/en/writing/static-site-email</guid>
      <pubDate>Tue, 24 Feb 2026 12:00:00 GMT</pubDate>
      <description><![CDATA[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 simple. Yet, the ecosystem of modern email…]]></description>
      <category>Infrastructure</category>
    </item>
    <item>
      <title><![CDATA[Ditching Netlify]]></title>
      <link>https://wchen.ai/en/writing/ditching-netlify</link>
      <guid isPermaLink="true">https://wchen.ai/en/writing/ditching-netlify</guid>
      <pubDate>Tue, 24 Feb 2026 10:00:00 GMT</pubDate>
      <description><![CDATA[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, that was enough. Then it wasn't. Death by…]]></description>
      <category>Infrastructure</category>
    </item>
    <item>
      <title><![CDATA[Lessons From Spec-Kit: Draft Before You Spec, Scope Before You Build]]></title>
      <link>https://wchen.ai/en/writing/spec-kit-lessons</link>
      <guid isPermaLink="true">https://wchen.ai/en/writing/spec-kit-lessons</guid>
      <pubDate>Mon, 23 Feb 2026 23:00:00 GMT</pubDate>
      <description><![CDATA[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 useless. Too broad, too ambitious, too…]]></description>
      <category>Workflow</category>
    </item>
    <item>
      <title><![CDATA[Vibe Coding a Website in a Day]]></title>
      <link>https://wchen.ai/en/writing/vibe-coding-in-a-day</link>
      <guid isPermaLink="true">https://wchen.ai/en/writing/vibe-coding-in-a-day</guid>
      <pubDate>Mon, 23 Feb 2026 22:00:00 GMT</pubDate>
      <description><![CDATA[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 pipelines, Zod-validated schemas, and a…]]></description>
      <category>Workflow</category>
    </item>
    <item>
      <title><![CDATA[Teaching an Agent Your Voice]]></title>
      <link>https://wchen.ai/en/writing/teaching-agents-your-voice</link>
      <guid isPermaLink="true">https://wchen.ai/en/writing/teaching-agents-your-voice</guid>
      <pubDate>Mon, 23 Feb 2026 18:00:00 GMT</pubDate>
      <description><![CDATA[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 the agent how to write in my voice,…]]></description>
      <category>Developer Tools</category>
    </item>
    <item>
      <title><![CDATA[Why I Build on Cloudflare]]></title>
      <link>https://wchen.ai/en/writing/why-cloudflare</link>
      <guid isPermaLink="true">https://wchen.ai/en/writing/why-cloudflare</guid>
      <pubDate>Mon, 23 Feb 2026 12:00:00 GMT</pubDate>
      <description><![CDATA[Every project starts with the same unglamorous decision: where does this thing actually run? Most developers treat hosting as a checkbox. Pick the default, deploy, move on. I used to do the same. But…]]></description>
      <category>Infrastructure</category>
    </item>
    <item>
      <title><![CDATA[Building Static-First in an Era of Dynamism]]></title>
      <link>https://wchen.ai/en/writing/static-first</link>
      <guid isPermaLink="true">https://wchen.ai/en/writing/static-first</guid>
      <pubDate>Tue, 10 Feb 2026 14:30:00 GMT</pubDate>
      <description><![CDATA[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 free. Run a function at the edge, return…]]></description>
      <category>Architecture</category>
    </item>
  </channel>
</rss>