<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>khoa.work — writing</title>
    <link>https://khoa.work/writing</link>
    <description>Notes on design, code, and life, from Khoa in Hội An. Full content, latest 30.</description>
    <language>en</language>
    <atom:link xmlns:atom="http://www.w3.org/2005/Atom" href="https://khoa.work/feed.xml" rel="self" type="application/rss+xml"/>
    <item>
      <title>Letting an agent write to production</title>
      <link>https://khoa.work/writing/agent-write-to-production</link>
      <guid>https://khoa.work/writing/agent-write-to-production</guid>
      <pubDate>Thu, 02 Jul 2026 00:00:00 GMT</pubDate>
      <description>The moment an agent writes to production instead of just reading it is where things break. Six rules that make it safe — and why default-deny is the whole game.</description>
    </item>
    <item>
      <title>An agent you can trust on a live store</title>
      <link>https://khoa.work/writing/agent-on-a-live-store</link>
      <guid>https://khoa.work/writing/agent-on-a-live-store</guid>
      <pubDate>Thu, 02 Jul 2026 00:00:00 GMT</pubDate>
      <description>Setting up custom-made products by hand took me six months for one line. A guard-railed AI agent did a collection in a week — how, and why to start now.</description>
    </item>
    <item>
      <title>Measuring AI citations when there's no analytics for it</title>
      <link>https://khoa.work/writing/measuring-ai-citations</link>
      <guid>https://khoa.work/writing/measuring-ai-citations</guid>
      <pubDate>Fri, 26 Jun 2026 00:00:00 GMT</pubDate>
      <description>There's no Search Console for ChatGPT. Here's how I track whether AI is citing a brand — the proxies, the manual checks, and what's actually worth watching.</description>
    </item>
    <item>
      <title>What llms.txt is — and whether it earns its place</title>
      <link>https://khoa.work/writing/llms-txt</link>
      <guid>https://khoa.work/writing/llms-txt</guid>
      <pubDate>Fri, 26 Jun 2026 00:00:00 GMT</pubDate>
      <description>A tiny markdown file that hands AI a clean map of your site. What it does, how to write a good one, and an honest take on whether it's working yet.</description>
    </item>
    <item>
      <title>Make your site legible to a machine that answers</title>
      <link>https://khoa.work/writing/legible-to-ai</link>
      <guid>https://khoa.work/writing/legible-to-ai</guid>
      <pubDate>Fri, 26 Jun 2026 00:00:00 GMT</pubDate>
      <description>Before an AI can cite you, it has to read you. Server rendering, clean structure, and schema are the line between being quoted and being skipped.</description>
    </item>
    <item>
      <title>Generative engine optimization, end to end</title>
      <link>https://khoa.work/writing/generative-engine-optimization</link>
      <guid>https://khoa.work/writing/generative-engine-optimization</guid>
      <pubDate>Fri, 26 Jun 2026 00:00:00 GMT</pubDate>
      <description>GEO isn't a new dark art — it's SEO pointed at machines that answer instead of rank. The whole playbook: who's reading, what gets cited, and how to measure it.</description>
    </item>
    <item>
      <title>Two different animals</title>
      <link>https://khoa.work/writing/two-different-animals</link>
      <guid>https://khoa.work/writing/two-different-animals</guid>
      <pubDate>Thu, 25 Jun 2026 00:00:00 GMT</pubDate>
      <description>Half of SoiTarot is built for machines to crawl. The other half is built for a person to play with. They share a brand and almost nothing else.</description>
    </item>
    <item>
      <title>The fence around the machine</title>
      <link>https://khoa.work/writing/the-fence-around-the-machine</link>
      <guid>https://khoa.work/writing/the-fence-around-the-machine</guid>
      <pubDate>Thu, 25 Jun 2026 00:00:00 GMT</pubDate>
      <description>When generating a page costs nothing, the page isn't the product. The gate that decides whether it ships is. Here's how I built that gate for SoiTarot.</description>
    </item>
    <item>
      <title>The bottleneck moved</title>
      <link>https://khoa.work/writing/the-bottleneck-moved</link>
      <guid>https://khoa.work/writing/the-bottleneck-moved</guid>
      <pubDate>Thu, 25 Jun 2026 00:00:00 GMT</pubDate>
      <description>I built a thousand-page site in about a week with a room of AI agents. The interesting part wasn't the speed — it was where the bottleneck moved to.</description>
    </item>
    <item>
      <title>Ship evidence, not features</title>
      <link>https://khoa.work/writing/ship-evidence-not-features</link>
      <guid>https://khoa.work/writing/ship-evidence-not-features</guid>
      <pubDate>Thu, 25 Jun 2026 00:00:00 GMT</pubDate>
      <description>How I'm building a marketing tool by proving it works — one side-by-side demo at a time — instead of stacking features nobody trusts yet.</description>
    </item>
    <item>
      <title>One house style, a thousand images</title>
      <link>https://khoa.work/writing/one-house-style</link>
      <guid>https://khoa.work/writing/one-house-style</guid>
      <pubDate>Thu, 25 Jun 2026 00:00:00 GMT</pubDate>
      <description>The thing that keeps a thousand AI-generated images from reading as slop isn't a better model. It's one art direction, held without mercy.</description>
    </item>
    <item>
      <title>Motion under a Core Web Vitals budget</title>
      <link>https://khoa.work/writing/motion-under-a-cwv-budget</link>
      <guid>https://khoa.work/writing/motion-under-a-cwv-budget</guid>
      <pubDate>Thu, 25 Jun 2026 00:00:00 GMT</pubDate>
      <description>How SoiTarot got animation that feels alive on the interactive pages without wrecking performance across fifteen thousand SEO ones.</description>
    </item>
    <item>
      <title>MCP-first marketing ops</title>
      <link>https://khoa.work/writing/mcp-first-marketing-ops</link>
      <guid>https://khoa.work/writing/mcp-first-marketing-ops</guid>
      <pubDate>Thu, 25 Jun 2026 00:00:00 GMT</pubDate>
      <description>Why I wrapped every data source — Shopify, Meta Ads, Search Console — as its own MCP server instead of one big script. The boring decision that makes it composable.</description>
    </item>
    <item>
      <title>Marketing engineering</title>
      <link>https://khoa.work/writing/marketing-engineering</link>
      <guid>https://khoa.work/writing/marketing-engineering</guid>
      <pubDate>Thu, 25 Jun 2026 00:00:00 GMT</pubDate>
      <description>I named it Jarvis. It pulls every scattered marketing number — Meta, Google, TikTok, Search Console — into one place a business owner can actually read.</description>
    </item>
    <item>
      <title>The inbox that drafts itself</title>
      <link>https://khoa.work/writing/inbox-that-drafts-itself</link>
      <guid>https://khoa.work/writing/inbox-that-drafts-itself</guid>
      <pubDate>Thu, 25 Jun 2026 00:00:00 GMT</pubDate>
      <description>The newest slice of Jarvis: a support inbox that reads the thread, checks the order, and writes the reply — as a draft, never sent.</description>
    </item>
    <item>
      <title>Designing a brand before a line of code</title>
      <link>https://khoa.work/writing/designing-a-brand-before-code</link>
      <guid>https://khoa.work/writing/designing-a-brand-before-code</guid>
      <pubDate>Thu, 25 Jun 2026 00:00:00 GMT</pubDate>
      <description>How SoiTarot got a look before it got a build — three directions, one locked art direction, and a design system a machine could hold the line on.</description>
    </item>
    <item>
      <title>Combinatorial SEO</title>
      <link>https://khoa.work/writing/combinatorial-seo</link>
      <guid>https://khoa.work/writing/combinatorial-seo</guid>
      <pubDate>Thu, 25 Jun 2026 00:00:00 GMT</pubDate>
      <description>Why one person can win a content-hungry niche: a lot of search demand is just combinations, and combinations are exactly what a system is good at.</description>
    </item>
    <item>
      <title>The answer engines haven't called</title>
      <link>https://khoa.work/writing/answer-engines</link>
      <guid>https://khoa.work/writing/answer-engines</guid>
      <pubDate>Thu, 25 Jun 2026 00:00:00 GMT</pubDate>
      <description>I did the AEO work — llms.txt, structured data, doors open to every AI crawler. ChatGPT still hasn't cited SoiTarot once. Here's why that's exactly what I'd expect.</description>
    </item>
    <item>
      <title>A room of agents</title>
      <link>https://khoa.work/writing/a-room-of-agents</link>
      <guid>https://khoa.work/writing/a-room-of-agents</guid>
      <pubDate>Thu, 25 Jun 2026 00:00:00 GMT</pubDate>
      <description>One agent doing everything is a mess. The trick to building SoiTarot solo was a small team of them that could hand work off without me in the middle.</description>
    </item>
    <item>
      <title>The cost of a default</title>
      <link>https://khoa.work/writing/cost-of-a-default</link>
      <guid>https://khoa.work/writing/cost-of-a-default</guid>
      <pubDate>Mon, 02 Feb 2026 00:00:00 GMT</pubDate>
      <description>Every default is a decision someone made for a thousand people. Most of them are wrong. Here's what I changed, and what it cost me to find out.</description>
    </item>
    <item>
      <title>Notes on shipping slowly</title>
      <link>https://khoa.work/writing/shipping-slowly</link>
      <guid>https://khoa.work/writing/shipping-slowly</guid>
      <pubDate>Wed, 12 Nov 2025 00:00:00 GMT</pubDate>
      <description>A defense of the unhurried build, written for an audience of one — me. Why shipping slowly is a feature, not a bug, when the work is the point.</description>
    </item>
  </channel>
</rss>