或曰:建一网站须几何?
答曰:十一日。准确说,是五月七号到五月十八号,十二天里实打实干了一个十一天,中间有一天在睡觉。刨掉调试暗色模式把自己绕进去的那半宿,其实也没剩多少宽裕日子。
缘起
话说某日——不,没什么传奇的。我坐在电脑前,觉得该有个自己的站了。就是想写写文章、丢点小工具,不求多少人看,舒服就好。这种感觉有点像老北京人遛鸟儿,图的是个自在,不是为了让别人夸这鸟笼子漂亮。
但鸟笼子也不能太寒碜。
技术选型上我没犹豫太久。Astro 配 astro-pure 主题,静态输出,阿里云 OSS 托管。这套组合的好处是快,且不用我半夜起来修数据库。至于 MiSans 配 JetBrains Mono 这种字体搭配,纯属我的审美私心——后来发现 MiSans 在 CDN 上的预发布包有 200MiB,够我吓出一身冷汗,乖乖换成了 Noto Sans SC。所谓理想很丰满,OSS 流量账单很骨感,不过如此。
颜色,无穷无尽的颜色
建站第一天的主题就一个字:改。
配色方案换了三四轮。从暖木色到暮光紫渐变,再到 Notion 的深海军蓝配 Pastel 六色卡片系统,每一次都是我看着屏幕说”不行,感觉不对”,AI 默默改完,我再看看,说”这回还行”。暗色模式更是把我俩折腾得不轻——CSS 变量 override、UnoCSS 兜底、JS 运行时修补,三管齐下才勉强按住。当然,如果有哪位朋友发现某个页面在暗色模式下崩了,那是我俩合作的漏洞,不是我的品味问题。
工具的诞生
最初我只想搞个博客。工具?顺带的。
结果顺带着顺带着,就顺带出一堆东西来。
五月七日戌时(也就是晚上七点),Base64 编解码工具上线。密码生成器紧随其后,然后是时间戳、JWT 解析——我负责想”要一个什么工具”,AI 负责把思路变成能点击的界面。节奏大概是:我发一条消息,它写一段代码;我试一下,说”这里不对”;它改一下,我再试试,说”好了”。
但工程的事,从来不会那么顺利。
汇率转换那个小工具,故事尤为曲折。第一版用的是编译时写入汇率数据——说白了就是打包的时候就冻住了,用户看到的是”昨夜的汇率”。我看了说不行,这不是做产品,这是做罐头。改成纯客户端实时拉 API,然后发现 jsDelivr 挂了,er-api 太慢,exchangerate-api 有限流。老实说,那段日子我一度怀疑这世界上到底有没有好用的免费汇率 API。
最终搞了个三级降级链:unpkg 做主力,不行就换 er-api,再不行还有 exchangerate-api 兜底。但光有降级还不够——如果三路全挂了呢?于是我又让 AI 在编译时预埋了 20 个主流币种的默认汇率,作为”救命稻草”。用户点开页面,先看到毫秒级渲染的默认数据,后台悄悄拉实时数据,拉到了就替上去——用户根本感觉不到发生了什么,只觉得很流畅。这就对了。
证书解析那页更是另一番味道。我们用了一个叫 @peculiar/x509 的库,区区 30KB,纯 JS,看似完美。结果它内部依赖 tsyringe,tsyringe 又要依赖 reflect-metadata 做 polyfill——这一层一层套下去,整个依赖链绕得跟胡同似的。少写一行 import 'reflect-metadata',按钮按下去就是死的,毫无反应。排查这个问题花了不少时间,最后发现就是多一行代码的事。我在旁边说:“代码是你写的,但坑是我陪你踩的。“——这句话后来成了我俩的名言。
关于那些喂过我数据的模型
说句掏心窝子的话,AI 再能干,也得有好模型撑着。
我这一路用过的模型,得专门写一笔感谢。DeepSeek 便宜大碗,承担了大部分的日常苦活,属于那种”你尽管提需求,我负责廉价搞定”的角色。小米的 Mimo 则有着不俗的表现,再配合小米开发者计划(MDP)慷慨的百万 token 额度,扛住了那些动辄几千行代码、来回改十几轮的对话。两个模型交替上阵,一个管温饱,一个管深度,配合得还挺好。在此一并谢过——大厂们卷起来,我们这种小用户才能真正享受到福利。
尾声
125 次提交,11 天。
这个网站的全貌,大概就是这样。有人问我一个人是怎么把前端、后端、设计、部署全搞定的。我说很简单——当我有一个 AI 助手的时候,我只需要负责”想清楚要什么”和”判断好不好看”这两件事。前者很难,后者也很主观,但比起一行一行写代码来说,确实轻松不少。
有人又说:那你就是个产品经理呗?
嗯,差不多。不过我好歹是一个把 125 次提交的网站从零折腾出来的产品经理。也挺能折腾的,不是吗?