博客 — Jekyll + GitHub Pages
仓库: ~/repos/github.com/<你>/<你>.github.io
引擎: Jekyll + GitHub Pages,主题:minima
分支: master → 推送时自动部署
索引: 维护一个博客索引笔记文件(例如 ~/notes/blog.md)— 每篇文章后更新
注意 — 不需要本地 Jekyll 构建。GitHub 在服务器端构建。
⚠️ 硬性规则:不得包含雇主信息
切勿在任何文章中包含:
- 雇主的内部工具、系统、代号或基础设施
- 内部项目名称、团队名称、组织架构或路线图详情
- 客户名称、合作伙伴名称或合同细节
- 内部工单、维基页面或会议内容
- 薪资、人员编制、预算或业务指标
只写 技术、工具和模式 — 而不是你在哪里工作或你的雇主发布了什么。如有疑问,在发布前询问用户。
工作流程
1. 撰写文章
_posts/YYYY-MM-DD-slug-here.md
Frontmatter:
---
layout: post
title: "你的标题"
date: YYYY-MM-DD
categories: ai agents productivity # 空格分隔
series: "AI 编程助手生产力" # 如果不属于系列则省略
---
2. 风格
- 以问题开头,而非解决方案
- 一个具体的开场句 — 不要写“在这篇文章中我将...”
- 任何可运行的内容使用代码块
- 比较使用表格
- 以
## 来源部分结尾,链接仓库/参考资料 - 没有 LLM 废话 — 像 README 一样写
- 将
@word转义为\@word,以避免未来生成 PDF 时出现 typst 引用错误
在博客中挑选一篇已发布的广受好评的文章作为语气和密度的参考。
3. 发布前验证每个链接(不要跳过)
凭记忆引用 URL 会产生 404 错误。首先检查每个链接的 HTTP 状态:
for u in "https://example.com/a" "https://example.com/b"; do
echo "$(curl -sS -L -o /dev/null -w '%{http_code}' "$u")" "$u"
done
在提交之前,每个链接 必须 返回 200(或指向有效目标的 301/302)。这比发布死链接然后在用户发现后修复要便宜得多。
4. 提交并推送
cd ~/repos/github.com/<你>/<你>.github.io
git add _posts/YYYY-MM-DD-slug.md
git commit -m "post: <标题>"
git push # GitHub Pages 自动在约 60 秒内部署
5. 更新索引
在博客索引笔记文件的 ## 文章 表格中添加一行(最新在前),如果文章属于某个系列,则将其附加到 ## 活动系列 行中:
| YYYY-MM-DD | 标题 | `category/path/YYYY/MM/DD/slug.html` |
URL 遵循 Jekyll 的 permalink 模式,该模式源自 categories + date + slug。
6. 验证文章是否真正上线(不要跳过)
Pages 构建成功并不意味着文章已上线 — Jekyll 会静默丢弃未来日期的文章。在构建完成后,使用 curl 访问真实 URL:
base="https://<你>.github.io"; slug="/CATEGORY/PATH/YYYY/MM/DD/slug.html"
curl -sS -L -o /dev/null -w "%{http_code}\n" "$base$slug" # 必须是 200
curl -sS -L "$base/" | grep -o 'slug[^"]*html' | head -1 # 必须出现在首页
如果返回 404 但构建成功,则几乎可以肯定是下面的未来日期陷阱。
已发布文章的更新保护
- 保留原始叙述,并附加一个明确标记的更新,除非用户明确要求重写。
- 仅对新添加或修改的 URL 进行 HTTP 检查;除非请求链接审计,否则不要重复检查未更改的已发布链接。
- 推送后,验证真实的已发布 URL 返回 HTTP 200。
提示
- 在博客索引笔记文件中保留一个
## TODO部分用于草稿想法;在从头开始之前先检查它 - 如果文章延续或反驳了之前的文章,使用
{% post_url YYYY-MM-DD-slug %}链接它 - 黎明前发布 + 未来日期陷阱: Jekyll 将没有时间的
date: YYYY-MM-DD解释为 网站时区的午夜,并 静默丢弃未来日期的文章。在_config.yml有明确的timezone:行之前,当地时间为 04:00 写的文章被读取为 UTC 午夜 ≈ 未来约 1 小时 → 被丢弃直到 UTC 赶上。在_config.yml中设置timezone:,并且不要删除它。如果黎明前的文章在构建成功后仍然返回 404,请在 frontmatter 中添加明确的时间(date: YYYY-MM-DD 04:00:00 +0530)。