orijitghosh/kodama
GitHub: orijitghosh/kodama
将 GitHub 公开贡献数据渲染成每日自动更新的艺术盆景 SVG 图片,供开发者嵌入个人主页。
Stars: 15 | Forks: 0
# kodama 🌱
将你的 GitHub 历史绘制成一棵盆景。Commit 会生长出枝叶,已合并的 PR 会结出果实,Code review 会挂起灯笼,连续活跃记录会绽放花朵。你只需将一个图片 URL 放入你的个人主页 README 中,它就会每天根据你的真实数据重新绘制。

*一棵生动的树:[@sindresorhus](https://github.com/sindresorhus) 的公开 GitHub 历史,由该服务渲染并每天重新绘制。仅使用公开数据;他与本项目无关。可在[画廊](https://kodama-sigma.vercel.app/gallery)中查看更多内容。*
```

```
这就是安装的全部过程:无需账号,无需配置,也不会存储任何关于你的信息。请在 [kodama-sigma.vercel.app](https://kodama-sigma.vercel.app) 尝试生成你的专属树。
## 树的寓意
每一个元素都源自你公开的 GitHub 历史,并且你可以将其追溯到背后的具体数字。[语法页面](https://kodama-sigma.vercel.app/grammar)展示了哪种数据信号绘制了哪种元素,而任何一棵树的[凭据](https://kodama-sigma.vercel.app/tree/YOUR_USERNAME)都列出了确切的统计数据。
| 你的行为 | 树的展现形式 |
|---|---|
| 账号年龄 | 树干的粗细和弯曲度;花盆会在满 1 / 3 / 6 / 10 年时升级 |
| 随时间推移的 Commit | 簇状叶丛 - 树只会不断生长 |
| 本周的 Commit | 明亮的新芽 |
| 已合并的 Pull Request | 柿子,从青涩逐渐成熟为金色 |
| 开放的 Pull Request | 未成熟的青色果实 |
| Code review | 纸灯笼,在夜间主题中点亮 |
| 已关闭的 Issue | 栖息在树枝上的鸟(根据数量改变大小) |
| 获得的 Star | 夜间主题中的萤火虫,白天主题中的蝴蝶(对数缩放 - 即使是巨佬也不会让画面白茫茫一片) |
| 回答的 Discussion | 一只风铃 |
| 当前连续活跃记录 | 花朵簇(一旦中断,花瓣会飘落一周 - 但树本身绝不会受到伤害) |
| 史上最长连续活跃记录 | 永久烙印在土壤中的一圈淡淡花瓣印记 |
| 当前季节 | 赏樱花期的盛开、盛夏的翠绿、秋天的赤金、花盆上的积雪 |
渲染过程是确定性的:在任何机器上,相同日期的相同历史都会生成完全相同的字节内容。你的树的形态由你自己的数据决定,因此它绝不会与任何人的树雷同。
## 选项
所有配置都通过 URL 参数完成 - 专门设计为无需配置文件。
```
https://kodama-sigma.vercel.app/.svg
?theme=ink|dusk|paper|sakura|yozakura|shore default: auto (dark/light aware)
&scale=full|compact|strip|button 830×420 · 420×160 · 830×90 · 88×31
&animate=auto|off auto respects prefers-reduced-motion
&tint=lang|none tint the foliage by top language
&species=classic|momiji|ginkgo|sakura|fuji which plant to draw; default is the original bonsai
&lang=en|ja|... language of the labels and alt-text (locale= also works)
&date=YYYY-MM-DD draw a past day instead of today
```
`species` 是唯一能够改变植物种类的参数 - 可以将原版替换为日本枫树、银杏、樱花或紫藤。它会改变树叶、秋天的颜色、果实和花朵,但绝对不会触及任何统计数据:无论是叶丛、装饰物还是统计数目,本质上仍然是同一棵树。这只是一种个人选择,因此它并不像上表中那些读取自你公开历史的元素那样,代表你的任何特定信息。
`date` 参数会移动评估这棵树时所依据的日历时间,而不是改变其背后的历史:统计数据依然是今天(即你指定的那一天)读取到的最新数据。由于历史数据只更新到今天为止,因此无法指定未来的日期。
SVG 同时携带了两种配色方案,并根据阅读者的 `prefers-color-scheme` 设置自动切换,因此同一个 URL 无论在亮色还是暗色模式的 README 中都能完美适用。每一棵树还会在 ``/`` 中写入一行专门为屏幕阅读器提供的描述。
提供 88×31 的 `button` 缩放比例,专为怀念早期互联网徽章风格的用户准备。
### 主题
`ink`(默认,月光色调) · `dusk` · `paper`(和纸) · `sakura`(樱花,偏向春季) · `yozakura`(夜樱) · `shore`(浮木与海玻璃)。请在[画廊](https://kodama-sigma.vercel.app/gallery)中查看所有主题。
## 隐私
kodama 仅读取公开数据:也就是 GitHub 已经在你的个人主页上展示的那些相同的贡献统计。没有账号,无需登录,也没有用户数据库。缓存仅在很短的时间窗口内,以用户名为键保存已渲染的历史数据,除此之外不保存任何其他内容。你的用户名只会出现在你粘贴的 URL 和该缓存中;不会收集、存储或共享任何其他个人数据。绝对不会读取你的私密贡献。
## 构建方式
这是一个 TypeScript monorepo:
- **`engine/`** - 纯 SVG 渲染器。没有时钟、没有网络请求,除了基于种子的伪随机数生成器(PRNG)外没有任何随机性,因此 `render(history, date, options)` 是一个纯函数,并且可以通过提交的黄金文件进行测试。
- **`service/`** (`@kodama/api`) - 通过 GitHub 的 GraphQL API 获取你的公开历史数据,将其缓存,并提供图像服务。每一个失败路径仍然会返回一个带有 HTTP 200 状态码的有效 SVG,因此 README 绝不会显示出图裂开的情况。
- **`site/`** - 包含落地页、画廊、语法页面和凭据页面。
- **`api/`** - 轻量级的 Vercel 函数适配器。
## 贡献
新主题是最容易贡献的部分:调色板仅仅是数据,并且黄金测试套件使得主题相关的 PR 非常容易审查。请参阅 [CONTRIBUTING.md](CONTRIBUTING.md)。
## 许可证
[MIT](LICENSE) © Arijit Ghosh。
标签:OSV, SVG, Vercel, 个人主页, 后端开发, 威胁情报, 开发者工具