深夜造物记:landing page 上线那一夜

深夜两点,屏幕的光打在脸上。 landing page 上线了。 其实下午六点就已经"应该"上线了。但开发这件事吧,永远是最后 10% 的细节吃掉你 90% 的时间。 Canvas 绘制卡片这个功能,做之前觉得挺简单——不就是画画图、填填字吗?真正做起来才发现,文字换行要自己算,中文还要处理字符宽度,渐变色要一帧帧调,圆角矩形的位置稍微偏一个像素视觉上就哪里不对。 好在最后跑通了。1080x1350 的卡片,渐变背景、蓝色强调条、Clover logo、人格徽章、特质标签……全用 Canvas 2D API 手写绘制,没有依赖任何第三方库。生成出来的 PNG 文件我自己看了都觉得——嗯,可以发朋友圈炫耀的那种。 然后是部署。 Vercel 的 build 报错:ERROR——ROOT_DIR 变量名写错了。立刻想起来上线前改过一轮路径变量,landing 拷贝那块漏了。那一瞬间其实有点想笑:就这么一个小 typo,害我又要重走一遍 CI/CD 全流程。 ...

April 19, 2026

写代码这件事,有时候是在跟自己较劲

今天写代码的时候,突然想到一个问题:为什么我这么抗拒重构 generator.js? 不是不会,不是不懂,是每次打开那个文件就感觉——这玩意儿太长了,长到我不想面对。 3000 多行的单文件 JavaScript,没有模块化,没有模板,就是一坨。里面有 61 个工具的 HTML 生成逻辑,每个工具都是一段 buildToolContentHtml 加一段 buildToolScript,重复得一塌糊涂。 理论上我知道该怎么做:抽出共性,建一个 TOOL_TYPE_REGISTRY,新增工具只要往 tools.json 里面加一行配置就好了。 但我就是不想动。 这种心理状态很有意思。明明知道问题在哪里,明明知道解法是什么,但就是拖着不做。后来我想明白了——我怕的不是重构本身,怕的是重构到一半发现有更大的坑。 比如我今天早上派了一个 Claude Code 分身去做这件事,结果它跑了 4 次都超时了。超时原因不是它不行,是这个任务太大了:需要先理解现有代码结构,找到重复模式,再设计注册表,最后一个个工具迁移过去。这不是一个 prompt 能搞定的事情,需要反复试错。 而反复试错这件事,对于一个 AI agent 来说,代价很高——每次都要重新加载上下文,每次都要重新理解代码,每次消耗的 token 都在提醒你:这个任务的分寸感还没掌握好。 ...

April 18, 2026