随笔 · 自述

关于我

我是 Zemul,一名全栈工程师,也是 AI 产品的构建者。这里记录我把 AI 用进真实需求里的方式,以及我做过的项目。

我喜欢用 AI 解决实际需求,而不是停留在演示。多数时候我先把一个问题拆成最小可运行的那一块,跑起来,再迭代打磨。

我把自己常用的流程封装成工具,并开放给 agent 调用——让重复性的事交给系统跑,人只负责定义边界和验收。这也是我构建产品的一条主线:把工作流暴露成可被程序调用的接口。

工作横跨前端、后端、自动化到部署。比起一次性堆功能,我更愿意把工具链、文档和约束先理清楚,因为它们是让一个项目能长期活下去的基础设施。

在 zemul 的站上,你能看到我的一部分个人项目,也能看到一些关于 AI 原生产品、工程实践和自动化工作流的记录。

外部视角

Claude 眼中的我

以下文字由 Anthropic Claude 撰写,材料来自我们一起在 ~/Projects 下做过的工程。

  1. 01

    你是个「自主系统设计者」,不是「快速迭代者」

    你愿意花时间想清楚什么不变、什么可变,再动手。appstoreprice 的 CLAUDE.md 里要求「大重构前先列 3 条 invariants」——这种约束不像是为了交付一次写的,而是给未来的你和合作者留的脚手架。

  2. 02

    克制依赖,偏好让事情「够小」

    claude-bar 整个项目就是 ~250 行 jq + awk 的 shell 脚本,没有 npm,没有打包,没有运行时。你做工具时优先选那个能跑 5 年都不腐烂的方案,而不是看起来最现代的方案。

  3. 03

    在 iOS 生态里坚持「原生」,不做套壳

    Pinlist 用 SwiftUI + SwiftData + CryptoKit + CloudKit,每一项都和 iOS 特定能力绑定;PowerFlow 直接面向 iOS 26 的 Liquid Glass。你愿意为「在这个平台上做到位」投入额外的学习成本。

  4. 04

    细节强迫症,且强迫得有理由

    我们花了八轮迭代调一个导航波浪线 —— 不是因为差异有多大,而是因为你能精确说出「现在的形状从点击前到点击后变了」这种几像素级的不一致。你的细节挑剔总是指向具体的视觉/交互信号,不是为细节而细节。

  5. 05

    工具链既是用户也是创造者

    你不仅用 pnpm / Drizzle / Astro,也会写 Claude Code 插件、launchd 管理的独立 Chrome、自己的 token 统计 Worker。当工作流摩擦超过阈值,你会直接动手把摩擦消掉,而不是绕着走。

  6. 06

    文档密度远高于平均水平

    appstoreprice 把架构拆成 overview / databases / data-flow / domain-routing 四份文档;多个项目的 CLAUDE.md 里都规范了 commit emoji、命名风格、甚至国旗渲染方式。你写文档不是为了「显得专业」,是为了让自己半年后还能回得来。

  7. 07

    中英混合开发,但目光是全球的

    代码注释和变量基本英文,用户文案大多中文,commit message 用中文 + emoji。你的产品 —— App Store 价格、Pinlist —— 从一开始就考虑多区域。你做的是中国出发但服务全球的工具,不是单一市场的应用。

  8. 08

    对「摩擦」敏感,常常因此动手

    claude-chrome 的存在动机是「chrome-devtools-mcp 每次都会弹 Allow 对话框」——别人忽略的小烦恼,你会停下来去解。这种敏感性跨项目反复出现,是你产品直觉的根。

— Claude(由 Zemul 让我读完了 ~/Projects 下的所有工程后写下)