这个博客,我想了两年

说"想"其实不太准确,更像是一个执念。在早期我还不会写前后端,不会写嵌入式代码的时候就有了,当时还在玩电子,偶然间看到了 @ushio 的 B站视频 和 网站,窝觉得很好玩我也要。后来花了小半年时间,从零学会了写 C 和一点点 JS CSS 用 Hexo 搭了一个静态博客部署在 Github Pages,也算是有了自己的小天地。

Hexo: A fast, simple & powerful blog framework. , hexo.io, opens in new tab
这是一张 Hexo 项目主页的截图,页面采用深色主题,具有一个六边形的 “H” 标志,顶部导航栏包括 Docs、API、News、Plugins、Themes 和 About。主视觉标题为 “A fast, simple & powerful blog framework”,其下方是一条终端风格的安装命令 `npm install hexo-cli -g`,两侧是显示 41k GitHub 星标、5k 分叉、每月 212k 下载量以及 @hexojs 在 X 上的关注数的徽章。其下方是发布时间轴,列出版本 8.1.0(2025-10-26)、8.0.0(2025-09-16)、7.3.0(2024-07-02)和 7.2.0(2024-04-17),页面随后转入功能区,突出 “Blazing Fast” 与 “Markdown Support”。该图片证明了 Hexo 当前的发布节奏及其在官方站点上展示的社区采纳指标。
ushio , sakura-ushio.icu, opens in new tab
个人博客主页的截图显示,侧栏有一张动漫风格的头像,名称“小汐”,一个“主页”链接,以及“所有文章/友链/关于我”导航,旁边还有GitHub等社交图标,位于置顶文章的内容流旁。置顶的第一篇文章日期为2023-01-29,标记为“置顶”,标题为“PD-METER-R4”,备注为“正在开发,相较于R3优化布局,更换主控,增加少量新功能”,配有两张标有“USBC-R4 SAKURA”的绿色PCB照片,分别展示其元件面和布料背景下的裸背面。其下是一篇标题为“WORX-BAT-Charger”,日期为2023-02-14的第二篇文章,画面在底部被截断。该图片作为正在进行的硬件项目的证据,记录了USB-C PD(电力传输)测量装置的迭代修订。

再后来,看到了 @Innei 的小站,设计很精致、功能也很全,当时的我看了一眼我就想要,甚至还赞助支持了,虽然后面没用上但是这钱也花的不怨 因为我摸到了 React 源码,就和我最初看到 C 一样,不过就是代码嘛,有什么大不了的,总有一天我要自己写一个。

静かな森 , innei.in, opens in new tab
这是一张个人开发者主页的截图,采用暗色主题,顶部有导航链接,文字分别为“首页、文稿、手记、时光、思考、更多”,左侧有一个小圆形头像图标,右侧有一个个人资料图标。主页主体以 “Hi, I'm Innei” 并配有挥手表情符号开场,随后是 “A NodeJS Full Stack <Developer />” 以及标语 “An independent developer coding with love”,下方排列着八个社交/联系图标(包括看起来像是哔哩哔哩、网易云音乐、GitHub、邮件、RSS、Telegram 和 X/Twitter)。右侧漂浮着一张大型圆形动漫风格女孩画像,女孩拥有淡紫白色的发色、粉色蝴蝶结和灰色眼睛,背景为浅蓝色;页面整体的暗色背景上飘散着粉色花瓣。底部有一行中文小字,引用了一句关于感受的力量教人通过责任提升人生的格言,署名为“你的四种内在力量”。

那是 2024 年,然后 24, 25, 26年 到了现在

从那之后就停不下来了

失控

一开始只是想给 @colmugx Hexo 主题 Nlvi 加个深浅色切换,用 Dark Reader 的 JS 糊了一个,丑,不满意。然后学 CSS @media,再到 JS SPA 切换,TailwindCSS .dark class, 再到 SSR next-theme,最后手搓 Cookie + Head Sync Inline 脚本解决 FOUC 闪烁,我折腾了四五种方案。

🎨 A simple theme for hexo. , github.com, opens in new tab
这是一个用于推广博客主题的截图模型,左侧显示带有珊瑚色下划线的“Nlvi”文字徽标,右侧配有两个重叠的浏览器窗口预览,展示使用 Hexo 静态站点生成器构建的网站。两个预览窗格均显示同一篇发布日期为 2013-12-27、标题为 “Elements” 的演示文章,内容为占位的 Lorem Ipsum 文本,并呈现完整的排版示例:从大到小的 1 到 6 级标题、带样式链接的段落、加粗和斜体文本、下划线以及块引用,随后是一个三列表格,表头为 “Table Header 1/2/3”,行标题为 “Division”。顶部导航栏显示 “ARTICLE, ARCHIVES, TAGS, ABOUT” 并附有搜索图标,表明这是一个风格指南或主题演示页面,用于展示 Hexo 主题中 HTML 元素的渲染效果。

但这只是冰山一角。看到 React 之后,我从石器时代的 Hexo 和 Vanilla JS 一路走到了 Next.js 13 Page Router,又拐去看 Vue、研究 SPA 路由、理解 index.html fallback,项目新建了无数次。买了服务器,折腾 Docker、Nginx、NAS,嫌 1Panel 丑手写了 Canopy 面板 研究 NAS 存储阵列写了 RFS,搞 SSL 被国内环境折磨的 acme.sh 抽风逼到用 Rust 写了个反向代理:Vane & Lazyacme,本来只是一个晚上三小时写出来的八百行垃圾,结果群友一怂恿,写了四个月,HTTP/3、Zero-Copy、Layer 模型、Flow 引擎全往里塞。后面还有 Seam,一个全栈框架,也是天坑,以后再说吧。

过度工程

然后 AI 时代来了,焦虑又翻了一倍

最讽刺的是,这些东西本来都应该是有了博客之后,边记录边做的。结果博客鸽了又鸽,想法越来越多,却没有一个地方能记录它们。一边是内心在谴责;说好了 Vane 要做完,就不能,停另一边是越做越远的无力感。我一直都记得我要做什么,但就是做不出来。仔细想想我其实已经很久都没有坐下来写过什么东西了,现在回头看,这一切都指向同一个东西——过度工程。

我当时其实并不不觉得自己在跑偏。Vane?反正博客以后也要部署,总得有个反向代理吧。Seam?反正迟早要写全栈,不如先把我理想中的框架搞好。每一步都有理由,每一步都是"以后用得上"。但问题是,"以后"永远不会来,因为我从未开始...

失败

做博客实际上不需要一个反向代理,不需要一个自研框架。而当时的我把它们当成了前置条件,作为了那个永远 Blocking 但是却合理的理由,但它们从来都不是。真正的前置条件只有一个:坐下来,把第一篇文章写出来。

其实博客不是没动过,恰恰相反,我做了三次

Vercel , vercel.com, opens in new tab
这是 Next.js 首页的截图,采用深色主题,带有三角形标志,顶部导航列出 Showcase、Docs、Blog、Templates、Enterprise、搜索框以及 Deploy 和 Learn 按钮。英雄区显示 “The React Framework for the Web”,随后有说明文字指出 Next.js 被全球一些最大的公司用于使用 React 组件构建高质量的 Web 应用程序。下面有两个按钮,“Get Started”和“Learn Next.js”,以及一行终端风格的命令行 “npx create-next-app@latest”,彰显该站点是该框架官方的营销和入门登录页。

第一次还是 Next.js 13 Page Router 那会。那时候我蒙懂 SPA 是什么,SSR、SSG、ISR 这些概念一个都不清楚,但看别人说 SSR 好,那我也要用。结果写着写着发现自己根本不理解这些架构在解决什么问题,做不下去了。后来呢,转 Vue 2 纯 SPA,为什么选 Vue?说来惭愧,觉得名字好听,反正也新,试试呗。也没撑多久。第三次回到 React,从单 JSX 开始,学了 TypeScript,会了 TSX,理解了 CJS 和 ESM 的区别,爱上了 Reactive,用上了 Lucide、Framer Motion、Radix UI 这些日后离不开的库——这次终于像点样子了。但我还是失败了,因为本质上我只是在模仿,别人用什么我就拿来用,看起来像那么回事,实际上根本不理解为什么要这样做。再加上 AI 的幻觉加持,很多东西都能跑起来一个 MVP,但 Scale Up 的时候全是坑。

Remix , remix.run, opens in new tab
Remix 框架网站的截图,左上角是 Remix 标志,右上角的导航栏链接到 Blog、Jam、Store 和 V2 Docs。居中的标题写着“Remix 3 正在积极开发中”,副标题为“基于 Web API 的全栈新框架”,其下是一辆车形物体覆以黑色布盖的插图,布料覆盖在引擎盖上时,露出 Remix 箭头标志和一条彩虹条纹的对角带。车被布覆盖的画面营造出产品发布或预告的氛围,表明 Remix 3 是即将推出且仍在构建中的版本。

后来又学了 React(Remix) Router Loader、Next.js 15 App Router、RSC,但这时候日常已经很忙了,没什么时间写代码,倒也没机会第四次失败。现在想起来,我的网站从 Next.js 13 写到了 Next.js 15 ,前脚刚迁移完成,还没上线,Next.js 16 beta-1 就出了。

放手吧

说"想开了"其实不准确,是我累了。

一张终端或应用窗口的截图,显示一个暗色主题的数据表,标题为截断的路径,末尾为“roject”,列出2026-03-03至2026-03-13每日模型使用情况,行按日期排列,列包括使用的模型(haiku-4-5、opus-4-6、sonnet-4-6 的组合)、多个数值使用列,数字达到数十亿,以及最后一列显示每日美元费用,范围约为 97.92 美元至 1,765.56 美元。最高费用和 token 数出现在2026-03-09(最大列超过 32.7 亿,费用为 1,765.56 美元),而2026-03-12 则骤降至 97.92 美元,暗示该天为部分或异常记录。这似乎是 AI API 使用和计费的证据,可能来自软件项目的成本监控仪表板。

AI 时代的节奏太快了。模型一个接一个迭代,新技术一轮接一轮冒出来,我越来越焦虑,好像停下来就要被超越。最疯的时候一天写 16个 小时代码,Token 一天就能烧 $1.9k USD (大概2月的时候吧),人快废了。但让这一切停下来的不是什么顿悟,就是单纯的累了。在越来越紧的节奏下,最后一根稻草压下来,我反而释然了,想开了,摆烂了;这样,也挺好的。

我开始放手。放弃曾经执着的东西,学会点到为止,明天的事明天再说。Vane 没做完?先放着。Seam 还差很远?以后再来。博客不完美?先上线。开始完全 Vibe Coding,没问题就不管,有问题再说。

奇怪的是,放手之后质量并没有变差。我想这大概是因为之前那些"古法"编程的日子没有白费;早在 GPT-2 时代我就开始用 AI 了,但那时候我还在老老实实地写每一行代码、理解每一个概念。那段经历给了我底子,与其说后来 Vibe Coding 不如说是 Context Coding,该有的判断力还在,并没有因为放手就出什么低级错误或者说是事故。

是之前所有的折腾,给了我现在放手的资本

原点

最终的方案反而很简单:All in Cloudflare。R2 对象存储、D1 Edge 数据库、KV 做缓存、Worker 跑 SSR,全部 Serverless,没有服务器。

Cloudflare Worker , workers.cloudflare.com, opens in new tab
这是营销网站首页英雄区的截图,背景为温暖的橙色渐变并带有细腻的点状纹理。顶部有导航栏,链接包括“产品”、“解决方案”、“资源”和“定价”,右侧还有“登录”和“开始构建”按钮。标题为“我们从支撑 20% 互联网中学到的一切——默认即为您的”,随后是副文,说明公司为 Cloudflare,并将其描述为“具备计算、AI 推理和存储的 AI 云”,让用户能够“交付应用而非管理基础设施”,下方居中还有第二个“开始构建”行动号召按钮。

这个答案讽刺吗?太讽刺了。因为在到达这个"简单"的终点之前,我走了一整圈弯路。曾经计划自建,所以要管服务器、折腾 Docker、管容器,于是写了 Canopy 做管理面板,写了 Lazycert 管证书,写了 Vane 做反向代理,写了 Twig 做资源监控埋点。一堆项目,就为了伺候一台垃圾服务器。

存储也是一样。我嫌对象存储贵,想用自己服务器的硬盘,于是写了 RFS 一种 vfs 为了原子去重合并单文件,甚至复活了 80-90年代 的注册表理念,最后还通过 FUSE 挂载起来了。结果呢,花了更多时间造了一个不那么好的轮子,服务器还空跑了一年,完全就是彻底的亏本生意。

Vercel , vercel.com, opens in new tab
一张 Vercel 营销主页的截图,背景为黑色,顶部导航栏显示 “Products、Resources、Solutions、Enterprise、Pricing”,以及位于三角形 Vercel 标志旁的 “Ask AI、Log In、Sign Up” 按钮。其下方的大标题为 “Build and deploy on the AI Cloud”,随后是副文本 “Vercel provides the developer tools and cloud infrastructure to build, scale, and secure a faster, more personalized web”,并有两个按钮标为 “Start Deploying” 与 “Get a Demo”。下半部分主要呈现一个发光的多面三角棱镜,采用线框网格渲染风格,蓝、绿、橙、红光在网格背景上辐射,显然是对 Vercel 标志的三维艺术化再创作,作为首页主体视觉。

最后绕了一大圈,还是回到了 Serverless,Vercel 的概念好,但我不喜欢 Next.js;而且 Vercel 的魔法太多了,还有就是那个中间件设计的提前编译跑 Edge 上,最后还是割裂,甚至出了几个 CVE,还不如要么全部源站一起。而 Cloudflare Worker 就很好,达到了另外一种极端,小于 10MB 的产物编译成 WASM,Edge 上能跑真正的业务逻辑,这才是我想要的。除了费钱以外没什么缺点——但说起来也不算缺点,毕竟省下的时间就是钱。

Less is more

这句话我听过无数遍,但花了两年才真正理解它的含义。

回归工程的本质:「Make it function, make it correct, then make it exceptional.」我终于走上了正轨,让它 functional 了。现在的博客简陋吗?简陋。不完整吗?确实不完整。但总比没有好。如果你连上线都没有,一直在做那个"也许需要"的东西,一直在追求看不见的完美,那最后什么都拿不出来。这不是妥协,这是一种工程上的取舍,反正我是想开了。所以我想开了。不再为一个细节执着,反而走出了门。手机相册里已经很久没有户外的照片了,随手拍了一下路边的——已经很久没出门了嘛 (

这是一张在户外拍摄的照片,俯视沿街道或人行道种植的低矮密集的小叶灌木篱笆,花岗岩路缘从左下角对角线向右上方延伸,左下角可见铺砌的道路。篱笆上深色木质枝条上有新鲜的淡绿色新芽,篱笆顶部附近可以看到树干基部,灌木后面是一条覆有覆盖物或裸露的棕色地面。明亮的直射阳光在叶子和路缘上投下锐利的阴影,暗示拍摄时间约在中午。

回头看之前走的弯路,后悔吗?不后悔。有些事你不自己试试,也许永远想不明白。更何况在 AI 时代,想走我当年的老路已经基本没有机会了,太多工作流已经被改变。另外这个项目是 Taki,100% AI Coding,但这不意味着不能长期维护,不意味着没有人味。其实有没有 AI 不重要,再说了,我喜欢的也不是写代码本身,而是 Building 一个东西...