Published 2026.04.06 22:33

我和 AI 一起,把个人博客和发布流程搭了起来

记录我如何和 AI 一起,从动机到实现把个人博客系统整个重建起来:Hugo 展示层重做、上线部署、Obsidian 到 Hugo 的同步脚本,以及一个在 Obsidian 里直接管理博客文章的本地插件。

3687 字 9 分钟阅读 Nathan Nie,Claude Opus 4.6
我和 AI 一起,把个人博客和发布流程搭了起来 的文章封面

Hello, world! 我和 AI 一起,把个人博客和发布流程搭了起来

从印象笔记说起

我是印象笔记的重度用户。大概从十多年前、Evernote 刚进入中国的那阵子,我就开始用它了。

上学的时候我很迷恋建立自己的知识库,恨不得把自己知道的一切都塞进去。印象笔记大概是最早一批提供云同步的笔记软件,对我来说简直是"云脑"一般的存在。高中起我养成了写日记的习惯,在印象笔记里前前后后写了差不多 2000 篇——虽然因为懒散,中间漏掉过不少天——另外还记了很多自己的思考感悟和课程笔记。

但印象笔记这几年明显在走下坡路。Evernote 和中国的印象笔记早已分家,软件经常卡死、闪退,所幸它还没把我的笔记弄丢。它开始推出一堆花里胡哨的功能,什么 AI 笔记之类的,可我对它的需求其实一直很朴素:就是一个能云同步的笔记本。结果后来连手机端搜自己笔记里的内容都被限制在会员功能里了。

我还能坚持用这么多年,说到底只是因为习惯,加上印象笔记不让用户轻松把笔记迁到别的平台去,所以就这么凑合着用。

Vibe coding 的困扰

最近我在琢磨 vibe coding 这件事。脑子里冒出过好几个想法,也实操地做了一些东西,但基本都不了了之,兴奋一阵子,再疲沓下来。

慢慢我意识到一个问题:我做事情没有连续性。一块灶起了,火刚升温,中间搁置几天,再回来的时候不是接着烧,而是干脆另起炉灶重来一遍。产生的 idea 就这样一个接一个地一闪而过,没能变成足够 solid 的产出,也就没有结果。

想来想去,这个问题只有一个解法:积累,沉淀。

把自己做过的事情记录下来,把成果积累起来。这样自己的来路就有迹可循,做过的工作都留下痕迹,随时可以翻阅、回看。受 Jimmy Wang 的启发,我觉得写博客就是一个极好的办法——用博客记录自己的思考、做过的事情、排过的 bug、踩过的坑、学到的新知识,这本身就是一种很自然的输出形式。再说博客还有对外展示的作用:如果有人想了解你是谁、你在想什么、你做过什么,把一个链接递过去,大概就是最方便的回答方式。

遇上 Obsidian

决定做博客之后,接下来的问题自然是:发表的文章从哪里来?

这又落回到了知识积累的方式上。如果文章全靠自己坐下来一字一句敲出来,从整理记忆、提笔写作到最后润色成文,是个相当耗神的过程。但如果能让 AI 帮着写、帮着润色,整件事就完全不一样了。

之前看到过有人反复推荐 Obsidian,说这是特别适合 AI 时代的笔记软件。我便下决心一试。一试之下,真切地发现这话不假——它确实是一件极趁手的工具。我写出想法和文章之后,AI 可以直接读,帮我润色、扩写,也可以分析我之前写过的东西,作为未来的知识库。而 .md 格式本身就是 AI 最喜欢处理的一种格式,又和代码项目管理常用的格式完全一致,顺带还能把自己做过的项目文档一起放进 Obsidian 里管理。

到这里,我"做项目需要沉淀"的解决办法就变得非常明确了:用 Obsidian + 博客

下面是和 AI 一起把这套东西真正落地的过程。

先把真正的 Hugo 源码找回来

刚开始的时候,最大的障碍居然不是设计,而是——“源代码到底在哪?”

我的博客一直跑在 blog.capootech.com 上,但本地并没有一份现成、明确的 Hugo 仓库。顺着以前的项目笔记和部署信息一点点摸过去,才确认真正的 Hugo 源码其实部署在我的阿里云上海服务器上。

于是第一步就变成了一件很朴素的运维工作:

  • 确认服务器上的博客目录
  • 把 Hugo 项目从服务器同步回本地
  • 在本地整理成一个可以继续维护的仓库

只有把这一步做扎实,后面无论是改主题、写文章还是做自动发布,才有稳定的基础。否则所有修改都像在"摸黑操作生产环境"。

展示层直接重做一遍

把源码拿回来之后,我重新看了一遍博客本身,发现真正的问题不在某一个按钮、某一段间距、某个颜色变量,而在于它整体的气质不对。

我想要的是那种更像出版物的感觉:标题要有存在感,首页应该像在推荐文章,而不是机械地堆列表;文章详情页也应该更像一个"阅读页面",而不是一套默认主题的技术文档壳子。

所以这次我没有在原有页面上打补丁,而是直接把展示层按新的方向重做了一遍。目标很明确:向 Ghost 的 Haas 主题那种编辑部风格靠,但不照搬,而是改造成适合我自己内容的版本。

这次重做里比较关键的几块:

  • 用更偏编辑感的首页结构替掉原来的普通列表页
  • 重做文章卡片、文章详情页、标签页、归档页和搜索页
  • 把整体配色、留白和版式往"浅底、阅读优先、杂志感"上推
  • 让页面结构不再依赖原来主题的默认布局

当博客真正开始长内容的时候,展示方式本身也会成为内容的一部分。一个写作者的网站不应该只是"能打开文章",它应该让访问者一眼看出这里是在认真地组织内容。

改完之后,真的上线

很多"博客改版"最后都停在本地预览能打开,但线上一直没切过去。

这次我不想留在这个状态里。改完之后做的不是"先这样吧",而是直接部署上线。

上线这一步有两个重点。

第一,先做备份。生产环境的博客在动之前,先把服务器上的现有版本打包备份,保证新页面出问题时可以一键回滚。

第二,把"本地改动"和"服务器生成"明确分开:本地继续维护 Hugo 源码,服务器负责接收同步后的代码并重新生成 public。这样部署逻辑干净清爽,后面也方便持续维护。

新的页面没有停留在"做完了但没发"的状态,而是真的切到了线上。那种感觉很直接——这个博客终于开始长成我想要的样子。

比视觉更重要的,是写作流程

但页面上线其实只是第一层。更重要的问题是:以后我要怎么发文章?

我平时写东西主要还是在 Obsidian 里。如果每次写完之后,还要手动把 Markdown 复制到 Hugo 的 content/posts,再去处理图片、front matter、文件名、slug,这种流程用个几次就一定会让我嫌烦。

所以接下来最值得做的事情,其实不是视觉层,而是把 Obsidian 和博客真正连起来。

这次最后定下的关系是:

  • Obsidian 里的 发表文章 文件夹,作为写作源目录
  • Hugo 仓库里的 content/posts,作为同步后的发布产物
  • 博客的展示、搜索、归档等逻辑,继续由 Hugo 负责

也就是说:内容只在一处维护,展示只在一处维护。两边的边界一定要清楚,不然迟早会出现"这篇文章到底改 Obsidian 那份还是改 Hugo 那份"的混乱。

同步脚本:把"写作"和"发布"真的拆开

为了让这件事稳定可用,我补了一层同步脚本。

它负责做几件琐碎却必要的事情:

  • 读取 Obsidian 文章里的 front matter
  • publish: true 的文章同步到 Hugo
  • publish: false 的文章保留在 Obsidian,不推到博客
  • 自动处理 Obsidian 的图片引用和相对路径图片
  • 维护一份 manifest,记下哪些文章是由这套流程生成的

这样一来,Obsidian 里的文章就不再只是"普通笔记",而是变成了博客内容真正的源头。

这一层最关键的设计其实只有一句话:Obsidian 管内容,Hugo 管展示

这个分层非常重要。它让"写作"和"建站"不再互相打架。

再往前走一步:把发布动作做进 Obsidian

如果还要每次打开终端手动敲脚本,这套流程还是不够顺。

于是我借助 Codex 又往前推了一步:直接给 Obsidian 做了一个本地插件。

这个插件最早只做几件事:

  • 同步全部文章到 Hugo
  • 发布全部文章到线上
  • 同步当前笔记
  • 发布当前笔记
  • 新建博客文章模板

做到这一步的时候,流程已经能用了,但还没到"真正写作工具"的感觉。它更像是一组快捷命令,而不是一个清楚的内容管理入口。

后来我又继续补了两层。

第一层,发布前确认弹窗。点到发布命令的时候,不会直接把内容推上去,而是先确认一遍。

第二层,文章管理面板。这个面板会把博客目录里的文章分成两类:

  • 已发表
  • 未发表

已发表的文章可以直接撤回,未发表的可以直接发布,并且两类都能一键跳回原始笔记继续编辑。

做到这里,这个插件才真正开始有"博客管理器"的感觉,而不是一个包着 PowerShell 脚本的按钮集合。

我喜欢这次过程的地方,不只是效率

如果只从结果上看,这件事其实可以被概括成一句话:

我和 AI 一起,把博客改版了、上线了,还把 Obsidian 到 Hugo 的发文流程打通了。

但这件事真正有意思的地方,并不只是"更快",而是协作方式变了

以前做这类东西,最容易卡住的地方通常有两个:

  • 事情太散,不知道从哪一步下手
  • 每一步都不难,但串起来之后很容易丢上下文

这次的体验是:设计、代码、运维、内容结构、发布流程这些原本属于不同层的事情,被放在同一轮对话里一点点推完了。不是停在建议、不是停在计划,而是真的做成了一个能跑、能写、能发、还能持续维护的系统。

对我来说,这种价值甚至比"省了多少时间"更重要。因为博客不是一次性项目,而是以后还会不断写、不断改、不断长内容的东西。一次把底层流程理顺,后面每次写作都会更轻松。

这也正好呼应了最开头那个困扰:积累,沉淀。这次我不是又起了一个新锅灶,而是第一次把一个东西从想法推到了可以长期维护的状态。

接下来还可以继续做什么

现在这套博客已经能稳定工作了,但它显然还有继续打磨的空间。

我已经能想到几件可以继续推进的事:

  • 继续把首页做得更像一个真正的编辑页,而不只是"更好看"
  • 给文章详情页加上更完整的阅读辅助,比如目录、上一篇/下一篇、作者区块
  • 给插件里的文章管理面板补更多信息,比如线上链接、最后发布时间、最近修改时间
  • 做更完整的文章模板,让新建草稿时就能把标题、slug、tags 一次填好

这些事都不是"必须马上做"的,但它们本身说明了一件事:这个博客终于进入了一个值得持续迭代的状态。

写在最后

回过头看,这次我原本想做的只是"改一下网站页面",结果最后做成的是一整套博客系统的重建。

我把博客的展示风格重新拉回了自己喜欢的方向;把真正的 Hugo 源码从服务器上整理回本地;把线上部署流程重新理顺;把 Obsidian 写作和博客发布打通;最后还做了一个能直接在 Obsidian 里管理文章的本地插件。

这不是那种"搭了一个博客"的成就感,而更像是——我终于给自己建起了一套长期写作的基础设施。

而对一个想持续写东西的人来说,这件事比单独写成任何一篇文章都更重要。