<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>手记 · 长镜头</title>
    <link>https://zzwzz.site/notes/</link>
    <atom:link href="https://zzwzz.site/notes/rss.xml" rel="self" type="application/rss+xml" />
    <description>Xavier Zhou 的手记：做产品、写代码和拍照时留下的记录。</description>
    <language>zh-CN</language>
    <lastBuildDate>Sat, 24 Oct 2026 00:00:00 GMT</lastBuildDate>
    <item>
      <title>为什么个人网站从一张照片开始</title>
      <link>https://zzwzz.site/notes/why-a-photo/</link>
      <guid isPermaLink="true">https://zzwzz.site/notes/why-a-photo/</guid>
      <pubDate>Fri, 23 Oct 2026 12:00:00 GMT</pubDate>
      <description>一个真实的地方，一张留下来的照片，一个做出来的产品，最后是记录。</description>
    </item>
    <item>
      <title>我给 MeetingRelay 跑了一场 61 分钟的真实会议</title>
      <link>https://zzwzz.site/notes/meetingrelay-61-minute-meeting/</link>
      <guid isPermaLink="true">https://zzwzz.site/notes/meetingrelay-61-minute-meeting/</guid>
      <pubDate>Fri, 24 Jul 2026 09:00:00 GMT</pubDate>
      <description>一次真实设备长会验收：我看着本地 ASR、SQLite/WAL、导出和重开链路一起跑完，也把还没通过的边界留在记录里。</description>
    </item>
    <item>
      <title>两张一模一样的照片，帮我守住了 Retake Coach 的边界</title>
      <link>https://zzwzz.site/notes/picspeak-retake-coach-boundary/</link>
      <guid isPermaLink="true">https://zzwzz.site/notes/picspeak-retake-coach-boundary/</guid>
      <pubDate>Fri, 24 Jul 2026 08:00:00 GMT</pubDate>
      <description>一次 PicSpeak Retake Coach 的开发复盘：为什么重拍进步必须来自同一次成对评估，以及我怎么用边界测试守住这条线。</description>
    </item>
    <item>
      <title>一个很小的竞态，差点让 TokSync 吞掉同步事件</title>
      <link>https://zzwzz.site/notes/toksync-filestore-race/</link>
      <guid isPermaLink="true">https://zzwzz.site/notes/toksync-filestore-race/</guid>
      <pubDate>Fri, 24 Jul 2026 07:00:00 GMT</pubDate>
      <description>TokSync v0.5 的一次代码审查，把一个本地 JSON store 里的读-改-写窗口翻了出来。</description>
    </item>
    <item>
      <title>一个 Prompt 插件被 Code Review 打回之后</title>
      <link>https://zzwzz.site/notes/promptcrate-request-changes/</link>
      <guid isPermaLink="true">https://zzwzz.site/notes/promptcrate-request-changes/</guid>
      <pubDate>Fri, 24 Jul 2026 06:00:00 GMT</pubDate>
      <description>测试、类型检查和构建都已经通过，代码审查却给了 REQUEST CHANGES。接下来的一天，我才真正处理完这个浏览器插件的发布边角。</description>
    </item>
    <item>
      <title>我给学习资料设了一个入口门槛</title>
      <link>https://zzwzz.site/notes/learning-material-entry-rule/</link>
      <guid isPermaLink="true">https://zzwzz.site/notes/learning-material-entry-rule/</guid>
      <pubDate>Fri, 24 Jul 2026 05:00:00 GMT</pubDate>
      <description>我开始减少收藏资料，把每个资料源都放进练习、输出和复盘的闭环里。</description>
    </item>
    <item>
      <title>我写个人项目页时，会先把使用场景讲清楚</title>
      <link>https://zzwzz.site/notes/project-copywriting/</link>
      <guid isPermaLink="true">https://zzwzz.site/notes/project-copywriting/</guid>
      <pubDate>Wed, 08 Jul 2026 00:00:00 GMT</pubDate>
      <description>我写项目页时，会先交代谁会遇到这个问题，再讲项目做了什么。功能列表放得太早，读者很难判断要不要继续看。</description>
    </item>
    <item>
      <title>我给数字花园分了 3 层，先让内容各自有地方放</title>
      <link>https://zzwzz.site/notes/digital-garden-layers/</link>
      <guid isPermaLink="true">https://zzwzz.site/notes/digital-garden-layers/</guid>
      <pubDate>Fri, 03 Jul 2026 00:00:00 GMT</pubDate>
      <description>我的笔记库里同时有完整文章、半成型想法和项目材料。把它们分成三层后，我写东西时少了很多犹豫。</description>
    </item>
    <item>
      <title>从 0 搭一个个人博客：我希望它首先是一个能长期写下去的地方</title>
      <link>https://zzwzz.site/notes/build-a-blog/</link>
      <guid isPermaLink="true">https://zzwzz.site/notes/build-a-blog/</guid>
      <pubDate>Sun, 28 Jun 2026 00:00:00 GMT</pubDate>
      <description>我搭这个博客时先压低写作阻力：页面少一点，路径稳定一点，发布流程简单一点。能长期写下去，比第一版做得多更重要。</description>
    </item>
    <item>
      <title>给一个 prompt 插件取名，先划掉了五个名字</title>
      <link>https://zzwzz.site/notes/promptcrate-naming/</link>
      <guid isPermaLink="true">https://zzwzz.site/notes/promptcrate-naming/</guid>
      <pubDate>Mon, 15 Jun 2026 13:00:00 GMT</pubDate>
      <description>网页 Prompt 夹的英文名定为 PromptCrate。比起好不好听，我更在意名字会不会暗示一些我不打算做的事。</description>
    </item>
    <item>
      <title>给 PicSpeak 做第二轮审查：一个竞态、一个关不干净的线程和一份 20MB 的审计日志</title>
      <link>https://zzwzz.site/notes/picspeak-second-review/</link>
      <guid isPermaLink="true">https://zzwzz.site/notes/picspeak-second-review/</guid>
      <pubDate>Mon, 25 May 2026 12:00:00 GMT</pubDate>
      <description>距离上一轮审查一个月，上一轮的问题都已闭环。这一轮按后端、前端、基础设施和测试四个方向重新看了一遍，又找出了几个藏在正常运行背后的问题。</description>
    </item>
    <item>
      <title>做 TokSync 之前，我先决定了它不同步什么</title>
      <link>https://zzwzz.site/notes/toksync-metrics-only/</link>
      <guid isPermaLink="true">https://zzwzz.site/notes/toksync-metrics-only/</guid>
      <pubDate>Mon, 18 May 2026 12:00:00 GMT</pubDate>
      <description>一份可行性分析的结论：AI 编程会话里藏着源码、密钥和内部路径，所以第一版只同步用量数字，会话全文留给以后、而且必须主动开启。</description>
    </item>
    <item>
      <title>第一次给 OpenClaw 提 PR：别直接相信 localStorage 里的 JSON</title>
      <link>https://zzwzz.site/notes/openclaw-saved-view/</link>
      <guid isPermaLink="true">https://zzwzz.site/notes/openclaw-saved-view/</guid>
      <pubDate>Thu, 07 May 2026 12:00:00 GMT</pubDate>
      <description>QA Lab 的保存视图把浏览器存储里的 JSON 直接当成界面状态。修复本身不大，难的是用真实环境证明它修好了。</description>
    </item>
    <item>
      <title>把散在各处的项目文档，搬进一个笔记库</title>
      <link>https://zzwzz.site/notes/vault-para/</link>
      <guid isPermaLink="true">https://zzwzz.site/notes/vault-para/</guid>
      <pubDate>Sun, 26 Apr 2026 13:00:00 GMT</pubDate>
      <description>用轻量的 PARA 结构整理笔记库：先挪文件、改名字，不删任何内容，并留下一份能反向执行的移动记录。</description>
    </item>
    <item>
      <title>把 OfferNow 改名成 OfferWave，我改了多少地方</title>
      <link>https://zzwzz.site/notes/offerwave-rename/</link>
      <guid isPermaLink="true">https://zzwzz.site/notes/offerwave-rename/</guid>
      <pubDate>Mon, 23 Mar 2026 12:00:00 GMT</pubDate>
      <description>一次后端项目改名：Maven 坐标、包名、配置前缀、环境变量、数据库名、脚本和文档，最后用一次全局扫描确认没有残留。</description>
    </item>
  </channel>
</rss>
