项目背景
这个博客最开始真的很简单,就是想先有个能写东西的地方。后来越用越觉得,一个站如果只是能发文章,其实很快就会变成“搭完就放着”的状态。
所以我慢慢把它改成了现在这样:文章、项目、碎碎念放在一起,发布链路也尽量收进一套工作流里。它对我来说已经不只是博客,更像一个长期维护的线上工作台。
当前能力
现在这套站里,已经比较稳定地在跑这些东西:
- 三类内容共用一套内容系统:文章、项目和碎碎念都走 Astro Content Collections
- 全文搜索:基于 Pagefind,构建完就能直接搜
- 碎碎念模块:支持归档、标签聚合和分享海报
- 项目展示页:可以单独维护项目说明、链接和介绍
- SEO 基础:RSS、Sitemap、OG 图、结构化数据这些都已经补上
- 本地发布台:本地
admin.cjs可以直接发碎碎念 - 自动部署:代码推到 GitHub 后,Cloudflare Pages 会自动构建上线
技术选型
技术上没有特别追求“堆满”,更多是围绕长期维护来选:
- 框架:Astro 5
- 内容管理:Astro Content Collections + MD/MDX
- 样式:Tailwind CSS 4
- 搜索:Pagefind
- 图片生成:Satori + Resvg
- 部署:Cloudflare Pages
- 辅助工具:Cloudflare Worker、本地 Node.js 脚本
发布流程
我比较在意的一点,是把“写”和“发”这两件事做顺,不想每次发内容都像在维护系统。
- 文章、项目和碎碎念都以内容文件形式存放在仓库中
- 平时可以通过本地编辑或者本地发布台写入内容
- 内容提交到 GitHub 后触发 Cloudflare Pages 自动构建
- 构建时顺手生成搜索索引、RSS、Sitemap 和分享图
做过的关键优化
这个项目真正花时间的地方,反而不是“搭起来”,而是后面一点点把它修顺:
- 修正中文阅读时长计算,避免中文文章几乎都显示成固定时间
- 修复搜索结果渲染里的注入风险
- 修复本地发布台的路径穿越、命令注入和上传校验问题
- 给全站补默认 OG 图、结构化数据和 BreadcrumbList
- 清理构建检查里的噪音,让真正的问题更容易被看见
当前取舍
- 评论系统还没启用,我暂时更在意内容本身和发布体验
- 本地发布台、Worker 这些辅助工具会保留,但尽量按需使用
- 页面设计会继续往统一和耐看上收,不追求复杂交互
后续计划
- 继续写内容,不想让它只停留在“站搭得挺好看”
- 把项目页和文章页的内容慢慢写得更像我自己
- 在不明显增加维护成本的前提下,再考虑评论或别的互动功能