一直想要一个地方,把 GitHub 上零散的贡献、写过的笔记,以及和其他人的交流放在一起。要求很简单:
- 不维护服务器:没有数据库,没有后端进程,挂了也不用半夜起来修
- 数据自动更新:贡献图和 PR 列表不应该靠手动截图
- 写作成本低:一个 Markdown 文件就是一篇文章
#整体结构
三块内容各有各的数据来源,但最终都是纯静态 HTML。
#贡献数据:构建时拉取
scripts/fetch-github.mjs 在 astro build 之前运行,用 GraphQL 一次性拿到:
| 数据 | GraphQL 字段 |
|---|---|
| 贡献热力图 | contributionsCollection.contributionCalendar |
| 上游 PR | user.pullRequests,过滤掉自己名下的仓库 |
| 统计数字 | totalCommitContributions 等 |
拉取失败时脚本会沿用上一次的快照,而不是让整个构建失败。本地没配 token 也能正常 npm run dev。
GitHub Actions 里配置了每天一次的 schedule,所以即使不发文章,贡献图也会每天刷新。
用一个很粗略的指标描述贡献密度:
#交流:giscus
评论系统选了 giscus,它把评论存在仓库的 GitHub Discussions 里:
- 访客用 GitHub 账号登录即可评论,天然过滤掉大部分垃圾内容
- 数据在自己的仓库里,随时可以迁移
- 每篇文章按
pathname映射到一个 Discussion,留言板则固定映射到一个term
再加上一个友链页和 RSS 输出,基本覆盖了「和其他站交流」的需求。
#写一篇新文章
在 src/content/blog/ 下新建一个 Markdown 文件:
md
---
title: 标题
description: 一句话摘要,会出现在列表页和 RSS 里
pubDate: 2026-10-14
tags: [标签A, 标签B]
draft: false
---
正文……git push 之后大约一分钟,文章就会出现在站点上。