GitHub 的账号被封了,不得不把栖身之处迁往 Cloudflare。
搬家向来是清理旧物的最佳借口。动工的第一件事,是把 _novels/万法皆契 从 git 的历史记录里连根拔除。清点下来,足足有 577 个 Markdown 文件、4.5 MB、八卷、1,679,213 个字符。那是早些时候的一场试验——让 Agent 像写代码一样去写小说。机器不知疲倦地砌出了这座一百六十万字的庞然大物,结构森严,却空无一人,留着实在没有什么用处。抹掉它只花了三次提交的回溯,仓库里只剩下一篇「示例小说」权充占位,像拆掉了一座违章建筑后留下的空地。
既然清理了地基,索性把用了许久的 Jekyll 一并拆了,换成 Next.js 的纯前端静态导出。
说来有趣,虽然是自己的博客,但这次重写我几乎没有亲手碰过一行代码。所有的组件拆分、渲染管线与样式表,全数交由 GPT 代劳。我只管坐在屏幕前充当一个挑剔的验收人。每当它试图长篇大论地解释或者询问方案时,我只敲过去两句话:「先做,我自己会验收」「别想太多」。
这种造房子的体验很微妙。你不再关心砖瓦的力学结构,只凭直觉在房间里走动,看哪里的光线刺眼,哪里的门轴发涩。
而机器在无人看管的地方留下的瑕疵,往往带着一种荒诞的幽默感。
我去翻看文章底部的「相关文章」时,发现摘要里赫然印着这样一行字:
ALOAD 0 INVOKESPECIAL <init>()V …… 洛铃最初思考生命嘛? 公交车……
因为原本的代码偷了懒,直接将渲染后剥去 HTML 标签的纯文本硬生生截断了前 80 个字符,导致冷冰冰的 JVM 字节码、章节符号 § 01 和关于生命与公交车的哲学发问撞在了一起。直到我勒令它重写摘要逻辑——在渲染管线里绕开代码块、表格、公式与标题,并用 Intl.Segmenter 老老实实按字素切分句子——预览区才终于恢复了正常的人类语言,比如安安静静的一句「"烟雨乌龙" 洛铃轻轻地点了一份奶茶……」。
另一个被我凭直觉抓出来的破绽,是「随机抽取记忆」的动效。
点下按钮的时候,我总觉得字迹跳出的瞬间比从前仓促了一点,便问它:「抽取的那个很炫酷的特效是不是被你改没了」?它去抓了帧才承认,上一轮改动时不知为何把 450 毫秒的动画压成了 400 毫秒。只少了二十分之一秒,肉眼居然还是能察觉出那点不对味。更呆板的是,归在「故纸堆」里的旧文是没有具体日期的,日期栏上只写着「故纸堆 · 纪元未详」;而负责制造滚轮计数效果的 odometer() 函数只认阿拉伯数字,遇到这行字便只能在原地干瞪眼空转。一个执着于拨动数字的计时器,面对「纪元未详」四个字手足无措,想来倒也有点可爱。后来让它把无日期的条目改走字形解码,并补回了那 50 毫秒,抽卡的手感才算回魂。
中途我还随口问了一句文章的编号 No.Index 是怎么维持的。它去查了 lib/numbering.ts,告诉我所有可见文章是按发布日期升序排列的,最老的一篇是 No.001,并且这个编号的数根还顺带决定了每张卡片上花瓣的几何形状与强调色。代价是,只要日后补发一篇旧文或者改动日期,整座博客的编号与花瓣形状都会随之发生整体漂移。听完之后我没有让它改。记忆本就不是数据库的自增主键,往过去塞进一段旧事,后来的次序跟着摇晃一下,本就是理所当然的事。
这一整晚真正的拉锯战,其实是在和 AI 的默认审美做斗争。
重做 Ctrl K 唤出的搜索弹窗时,我给了一套尺寸规范,它却端上来了一个充满了廉价科技感的产物:聚焦时搜索图标会歪头旋转 -8deg 外加发光阴影,分类标签涂着花花绿绿的底色,纯白的输入框和淡紫色的底栏在主页暖白(rgb(248, 247, 244))的画布上撞得七零八落,到了暗色模式下,硬编码的 rgba 内描边还泛着一圈诡异的白光。
我看着屏幕,忍不住敲过去:「不要把这个ui写得那么ai slop」,紧接着又补了一句,「色彩和整体主页不协调」。
机器总是倾向于做加法,试图用发光、旋转、高饱和的色块来证明自己「设计过了」;而人的审美往往是在做减法。
于是下半夜的工作变成了一场剃刀式的清理:
删掉文章末尾重复的普通顶边框,只留下一道由文章 slug 生成的卦象作为唯一的收尾;把目录选中时的凸起拍扁;删掉标签页星图底下画蛇添足的说明文字;剥掉搜索框里所有的旋转、发光与杂乱色块,让面板、输入行、筛选条与底栏统统退回主页的 --surface 底色里去。
改完最后一版配色,它截了浅色、关键词高亮和深色三张图端给我看。面板总算安静下来了,只剩右下角一枚 14px 的六爻小图标还留着一点克制的趣味。但我盯着那个输入框,看到里面还印着一行灰色的预填词:检索记忆、卦象或关键词...。
连这点刻意营造的「意境」也是多余的。
「ok,删掉搜索栏预填的词,commit」。
提交停在 05017e2。77 个静态页面构建完毕,73 个页面里的 3651 条内部链接全部跑通,页脚的版权声明也从死板的 All rights reserved. 换成了 CC BY 4.0。
临收工前,我懒得自己复盘,让它把这一晚上的折腾整理成写博客的素材。它大概又犯了用力过猛的毛病,先是洋洋洒洒写了一篇十二章、两万多字节的宏篇巨制,被我判了「不正确」;让它少用点文字还原历史,它又赌气似地压成了一张五十几行的简表;直到我再敲一句「不够详细」,它才终于交出了一份不偏不倚的流水账。
一百六十万字的小说已经成了灰,新的屋子总算收拾停当。现在按下快捷键,弹出来的搜索框里空空荡荡,一个字也没有,这下终于顺眼了。
