这篇文章现在就躺在一个 GitHub Issue 里。

它不是从 CMS 同步过来的,也没有先写进某个数据库。标题是 Issue 标题,正文是 Markdown,blog 标签把它变成一篇文章。保存以后,剩下的事交给构建流程。

我一直想要一个自己的博客,但不太想为了写博客,再养一套只有写博客时才会打开的后台。账号、数据库、编辑器、备份、部署,这些东西当然都能做,只是每多一层维护,写下一篇的阻力就多一点。

所以这个博客的起点不是「我要做一个功能完整的内容系统」,而是一个更朴素的问题。

我能不能就在平时工作的地方写?

Issue 不是后台的替代品,而是我愿意打开的编辑器

对我来说,GitHub Issues 已经有不少写技术文章需要的东西。Markdown、修改历史、标签、稳定编号和评论都现成存在,文章和代码也继续留在同一个公开身份下面。

这套做法当然谈不上通用。要做多人审核、复杂排期、富媒体管理,专业 CMS 更合适。但个人技术博客最怕的往往不是能力不够,而是系统太郑重,郑重到每次想写点东西都觉得还得先进入「发布状态」。

Issue 刚好没那么郑重。我可以像记录一个工程问题那样写下想法,慢慢修改,准备好了再加上 blog 标签。这个动作和我原来的工作习惯很接近。

GitHub 存内容,网站负责把它变成阅读体验

访客打开文章时,不会临时请求 GitHub API。Astro 会在构建阶段读取带有 blog 标签的 Issue,把标题和正文生成静态页面,同时产出首页、归档、RSS 和 Sitemap。

GitHub Issue
  → GitHub Actions
  → Astro 构建
  → 静态 HTML
  → GitHub Pages

这条链路里,我很在意构建阶段和访问阶段的区别。内容可以托管在 GitHub,但阅读不应该依赖浏览器现场请求 API。最终发布的是普通 HTML、CSS 和少量 JavaScript,GitHub API 限流或网络波动不会被转嫁给每一位读者,以后想迁移托管平台也不用重写内容。

换个角度看,Issues 只负责成为一个我用得顺手的内容源。网站怎样排版、怎样适配手机、怎样组织文章,仍然由博客自己决定。

这套系统最重要的指标,是下一篇还愿不愿意写

后面我还会继续补阅读体验、分类、订阅和讨论入口,也会记录那些小项目背后的设计选择、开发过程和踩坑复盘。

不过我不想一开始就把博客做成另一个需要长期伺候的产品。功能可以慢慢长,写作入口最好一直简单。

如果这套系统真的有价值,不是因为「GitHub Issues 也能做博客」听起来有点特别,而是某天我想写东西时,不需要先想起后台密码,不需要更新编辑器,也不用检查数据库还活着没有。

我只要新建一个 Issue。

就像现在这样。