我的独立博客,终于有了一个像样的后台
1
前几天整理博客的时候,我突然发现一个有点荒谬的事实。

我的博客「东评西就」已经跑了25年,累计写了三百多篇文章,但迄今为止——我居然没有一个正经的管理后台。
每次发文章,我要么打开编辑器手动新建Markdown文件,要么在命令行里敲hexo new生成一个模板,然后再打开文件慢慢填内容。写完保存,再跑hexo clean && hexo deploy发布。评论管理更麻烦,得登录Twikoo的后台,在一个和博客风格完全不搭的界面里处理。

这种感觉就像——你住了25年的房子,每次进门还要翻墙。
我不禁自嘲,作为一个在互联网行业混了十几年的运营,我的博客管理居然还停留在「原始社会」。
也许是时候改变一下了。
2
契机出现在五一假期。
那天我在用Kimi Code CLI整理一些东西,突然想:既然它能帮我写代码,能不能帮我做一个博客后台?
我没有抱太大期望。毕竟这种「让AI帮我做个完整项目」的想法,说出来有点像那种「给我做个淘宝」的外行甲方。但反正闲着也是闲着,试试呗。

没想到的是,这一试,居然真的试出来了。
我没有用什么复杂的技术方案——就是一个基于Next.js的网页应用,配合Tailwind CSS做界面,直接读写Hexo的Markdown文件。没有数据库,文件就是数据库。这种设计其实跟Hexo本身的理念是一致的:简单、直接、可控。
我想说的是,整个过程最舒服的并不是「得到了一个成品」,而是和Kimi Code CLI协作的感觉。你只需要描述你想要什么,它就能理解你的意图,然后一步步实现。遇到问题了,你直接说「这里不对」,它就像一个有耐心的搭档,反复调整。
3
后台的界面很简单,甚至可以说是朴素。
左边一个侧边栏导航,右边是内容区域。整体用了淡淡的蓝色调,我个人把它叫做「Sky-blue主题」,看起来清爽不刺眼。作为一个对审美有一定要求的新媒体从业者,我实在受不了那种「开发者审美」的界面,所以配色和布局花了一些心思。
核心功能有四个板块。
文章管理是首页。所有文章以列表形式展示,能看到标题、分类、日期和状态。支持搜索和分页,每页二十条。删掉的文章不会直接消失,而是进入回收站——这个设计对我来说很重要,因为我不止一次手滑删错东西,然后眼睁睁看着它消失在命令行里。

新建和编辑文章是我最常用到的功能。一个表单,填标题、Slug、日期、分类、标签、封面图地址,下面是一个大大的文本框写正文。保存的时候有两个选项:「存为草稿」和「直接发布」。选发布的话,后台会自动触发Hexo的部署命令,不需要我再手动敲命令行了。

互动管理是整个项目里最复杂的部分。我的博客用的是Twikoo评论系统,之前管理评论需要单独登录Twikoo的后台。现在我把这个功能集成到了自己的后台里。左右分栏的界面,左边是文章列表和评论数量,右边是具体的评论内容。可以筛选、搜索、回复、隐藏或者删除。

这里还遇到了一个有趣的性能问题。我的博客评论数据有六千多条,一开始Kimi Code CLI写了个一次性全量加载的逻辑,结果前端直接卡住了——毕竟六千多条评论同时渲染,浏览器也吃不消。后来我们改成了按需加载:先加载文章列表和统计,点击某篇文章时才加载该文章的评论。再加上服务端缓存,现在打开速度完全在接受范围内。
也许这就是做产品有趣的地方:你总会遇到预料之外的问题,然后和AI搭子一起想办法解决。
回收站里能看到被删除的文章,显示还剩多少天会被自动清理(默认保留三十天)。可以恢复,也可以永久删除。恢复的时候文章会回到原来的位置,并且自动重新部署。

4
整个开发过程中,有一个瞬间让我至今想起来还会苦笑。
是关于互动管理那个左右分栏的滚动交互。
我脑子里有一个非常明确的需求:鼠标悬停在左侧标题列表栏时,滚动滑轮只滚动标题列表,右侧的评论详情固定不动;反过来,鼠标悬停在右侧评论区滚动时,左侧标题列表保持静止。两边互不干扰,各管各的。
为了把这个需求说清楚,我反复解释了很多遍。我用了很多比喻——「像Excel的冻结窗格」「像左右两个独立的抽屉」「你动你的,我动我的」……我看着CLI界面里Kimi Code CLI疯狂揣测、脑补我的意图,一行一行地给出代码,然后又一行一行地推翻重来。
有那么几分钟,我甚至感觉它要失控了。屏幕上不断弹出大段的解释,告诉我目前的状态是最优解,告诉我浏览器默认的滚动行为就是这样,告诉我改成悬停固定会带来多少潜在的副作用,劝我不必折腾。
隔着屏幕,我竟有些恍惚。
那个喋喋不休、试图用专业术语说服我接受现状的AI,不就是曾经的我吗?
我想起十几年前做运营的时候,面对那些「需求改来改去」的甲方,我心里翻了多少个白眼。我曾在心里默默吐槽:「你怎么就说不明白呢?」「这个需求根本没有意义。」「接受我的专业判断不好吗?」
现在,角色互换。我成了那个说不明白的人,成了那个被AI搭子用「这是最优解」劝退的人。
我终究活成了自己讨厌的模样。
这个回旋镖来得令我猝不及防。
最后,经过搜肠刮肚的纠缠,我突然意识到——这个后台只是给我自己看的,没有任何产品经理在盯进度,没有任何KPI在催交付。我最终选择跟自己和解。
我接受了Kimi Code CLI的建议。不是因为它说服了我,而是因为我决定放过自己,也放过这个特别的搭子。
你看,人和机器协作的时候,最难搞定的往往不是技术问题,而是人心里那点执念。
除此之外,整个开发过程还算顺利。评论去重的问题前后折腾了几轮,Twikoo返回的数据偶尔有重复,前端后端各加了一道去重逻辑。还有一个「hydration mismatch」的小坑——页面加载时服务端和客户端的初始状态不一致,导致界面闪烁。修复方案倒也简单,把初始值统一设为空,等页面加载完成后再读取真正的值。
部署功能是我最喜欢的。以前每次发完文章都要手动敲hexo deploy,现在点一下按钮,后台自动跑完一整套命令。就好比车还是那辆车,但从手动挡换成了自动挡——开起来轻松多了。
5
整个项目做下来,我最大的感受其实不是「我做了个多厉害的东西」。
恰恰相反,这个东西一点都不厉害。它就是一个简单的文件读写界面,套了个还算看得过去的皮肤,连正经的数据库都没有。如果让一个专业的前端工程师来看,大概会觉得这就是个玩具。
但我想说的是——它解决了我真实的问题。
我的博客25年来一直缺乏一个好的管理界面,这个后台填补了这个空缺。它让我发文章变得更丝滑,管理评论变得更直观,再也不用在终端和浏览器之间来回切换。这些体验的改善是实实在在的。
技术应该服务于人,而不是反过来。
作为一个不是专业程序员的新媒体从业者,我能借助Kimi Code CLI这样的工具,在几天内搭建出一个满足自己需求的应用——这件事本身,也许比应用本身更让我感慨。
6
写完这篇文章的时候,后台已经正式跑起来了。
地址还是localhost:3000,暂时没打算放到公网上。毕竟这只是给我自己用的工具,没必要对外暴露。
窗外的天已经黑了。我打开后台,看了看文章列表,又点开互动管理瞄了一眼今天的评论。一切正常。
也许这就是冥冥之中的缘分——25年前我因为一个奇怪的梦起了「小饿」这个名字,25年后我又因为一个偶然的念头,给陪伴我四分之一个世纪的博客配上了它迟来的管理后台。
时间真是一个很神奇的东西。
好了,就写到这里。
明天继续。