OpenBlog:用对话管博客的 Git CMS
1️⃣我做了 OpenBlog——一个开源的博客 CMS 模块,面向「已有产品官网、想加一块 /blog」的团队。它不提供 AI 写稿,也不做 SEO 文章生成;它交付的是博客该有的基础设施:列表页与文章页路由、分类归档、RSS、sitemap、robots、canonical、JSON-LD,以及让 Coding Agent 按合约维护 Markdown 文件的 Skills 与校验规则。内容以 Git 为仓库,Agent 为管理员,人审 diff、合并即上线。
2️⃣这个项目不是在给自己搭官网时想到的,而是在服务客户产品官网的过程中逐渐成型的。我反复碰到三类结构性问题:接现有 CMS 链路太长,往往要前端深度配合,而博客早期并不需要那么重的工程投入,增长同学理应能独立负责内容和发布;可视化编辑台即便接了 MCP,操作路径依然冗长,谈不上 AI native;以及从改内容到真正上线之间总有摩擦——OpenBlog 把这条链路压到秒级对话修改、合并即发布,并支持批量处理人工几乎不可能完成的任务,比如按锚文本规则优化全文上下文内链。
3️⃣构建上,我把整个系统拆成四层,每层独立配置、独立替换。最上层是前端适配层,目前以 Next.js 静态输出为默认实现,负责把博客模块渲染成可部署的页面,也预留了 Astro 等其他框架的扩展空间,前端选型不影响内容与主题。第二层是设计主题层,内置六套设计轴预设——分别对应 OpenAI 的 monochrome、Vercel 的 developer prose、Linear 的 dark precision 等气质——以及 product、minimal、editorial 等中性预设;你可以直接在 openblog.config.ts 里指定 preset,也可以把任意一个你想复刻风格的博客 URL 丢给 theme:infer,系统会从该页面推断最接近的预设并生成 design token,再 sync 成 CSS 变量供全站组件引用。这意味着风格来源不限于你的现有产品站,Cursor Blog、Linear Now、Anthropic 的 editorial 气质,都可以作为参考锚点。第三层是组件层,即 Blog Chrome:文章页的目录、分享栏、相关文章、作者框、面包屑,列表页的 PostCard、分页、分类归档,以及不可见的 OG 与结构化数据标记——每一项都可以在 config 里按需开关,做长文博客或极简博客只改配置、不动架构。最底层是 CMS 层,默认是 Git 加 Markdown 加 YAML frontmatter,CI 校验 slug、description 长度、内链格式;如果团队已有内容栈,也可以接入无头 CMS 或数据库,OpenBlog 不绑定某一种存储方案。四层之间通过 openblog.config.ts 统一编排,改主题不动组件逻辑,换组件不影响内容文件,换前端适配层也不碰 design token。
4️⃣从产品博客的常见构建路径看,OpenBlog 覆盖两类主场景:把博客挂到已有产品站的 /blog 子路径下,对齐导航、Logo 和 chrome,让它看起来就是官网的一部分;以及从零 scaffold 一个本地 demo,跑通后再决定是否接入正式站点。跟 WordPress 这类整站 CMS 不同,OpenBlog 只管博客模块,不碰你的首页、定价和文档;跟 Contentful、Sanity 等无头 CMS 不同,它自带完整的前端渲染和 Blog Chrome,不需要你从零搭 Layout;跟 Tina、Decap 等 Git CMS 可视化后台不同,它没有 Dashboard,维护入口是对话加 PR,Agent 读 AGENTS.md 合约直接改文件;跟纯 Skills 自建相比,它把路由、SEO、主题、组件、校验全部打包成可复用的模块层,而不是每次从空白仓库重新拼装。它的定位很明确:不是写作平台,不是整站 CMS,而是产品站上那块可挂载、可 Agent 维护的博客基础设施。
5️⃣接入方式文档已经写得很完整,这里只说路径选择。已有产品站,走 INTEGRATION:把产品 URL 交给 integrate 脚本提取 logo 与品牌元数据,在 chrome 层对齐导航和 footer,选 subdirectory、monorepo 或 subdomain 部署模式即可。想先试,npx create-openblog 本地跑 demo,或 npx skills add kostja94/openblog 在 Cursor / Claude 里直接调用。具体步骤见仓库里的 INTEGRATION.md 和 AGENTS.md。
6️⃣最后说一点我对这个品类的判断。Blog 是典型的「内容非标、结构标准」——每篇文章论点、叙事、篇幅都不相同,但列表页怎么排、文章页有哪些 Zone、SEO 字段怎么填、RSS 怎么出,这些结构高度可复用。这跟很多营销页相反:Landing 往往是一套模板、内容可以 scale,但页面结构各自非标。正因为结构标准、内容非标,OpenBlog 先把博客模块这一层做深做透;如果后续有时间维护,它有可能演进成更通用的 CMS 框架。
7️⃣Customization 程度很高——四层每层都可以 fork、替换、扩展——这也是我把它做成 MIT 开源的原因:博客模块应该是团队自己的资产,而不是绑在某个 SaaS 或平台里的租约。
GitHub:
github.com