
所有个人项目,一个仪表盘
正常运行时间、部署状态、云成本和 AI/CI 使用量——在一个轻量级、自托管、单数据库的仪表盘中,专为独立开发者打造。
监控内容
每个适配器都是可选的——只有在提供了相应凭证时才会激活。只启用你需要的适配器。
正常运行时间监控
对公共 URL 进行 HTTP 健康检查。响应时间、状态码、可用/不可用历史。
部署状态
AWS Amplify 构建状态、分支和最新部署时间戳一目了然。
云成本
AWS Cost Explorer 当月与上月对比,按服务细分。
AI 使用量
OpenAI Token 总数、请求次数、缓存 Token 以及按 API Key 和模型的花费。
CI 状态
GitHub Actions 工作流运行次数、最新状态、触发类型和定时运行健康状况。
域名健康
Cloudflare zone 状态、DNS 记录数、apex/www/MX 存在性和注册商过期信息。
邮件投递
Resend 发送域名验证状态,用于你的事务性邮件设置。
数据库健康
Supabase 项目可达性以及来自你应用的仅计数聚合统计。
全方位查看
通过标签页视图查看应用详情、采集器诊断、域名清单、使用量汇总和成本明细。
工作原理
两个组成部分,都在一个仓库中。没有常驻服务。
1
采集器收集数据
Node 脚本调用提供商 API(AWS、Supabase、OpenAI、GitHub、Cloudflare、Resend),将追加写入的快照存入你的 Supabase 数据库。它们通过 GitHub Actions 定时运行——从不在浏览器中执行。
→
2
仪表盘读取并渲染
静态 React/Vite 前端从 Supabase 读取预聚合的数据行并进行渲染。原始应用数据永远不会离开你的源项目——只有计数、状态和成本。
支持的适配器
每个适配器只采集仪表盘需要的数据,使用所需的最小权限。
| 适配器 | 采集内容 | 凭证 | 最小权限 |
|---|---|---|---|
| HTTP 健康检查 | 公共 URL 的可用性和响应时间 | 无(只需项目的公共 URL) | — |
| Amplify | 部署状态、分支、最新构建 | AWS access key/secret、region | 只读 Amplify 访问 |
| AWS Cost Explorer | 按 AWS 服务划分的账户级当月/上月成本 | AWS access key/secret、region | 只读 Cost Explorer 访问 |
| Supabase 项目健康 | 仪表盘自身项目或被监控应用的可达性 | Supabase 项目 URL + service-role key | 项目范围的 service-role key |
| 被监控应用 Supabase 聚合 | 通过自定义 RPC 获取的仅计数聚合统计 | 应用的 Supabase URL、anon key、service-role key、RPC 名称 | Service-role key(仅计数 RPC——从不读取原始数据) |
| Resend | 发送域名验证状态 | Resend API key | 只读 API key |
| OpenAI 使用量 | Token 总数、请求次数、缓存 Token、按 Key/模型的花费 | OpenAI admin API key | Admin key(使用量端点需要) |
| GitHub Actions | 工作流运行次数、最新状态、触发类型、分支、持续时间 | 仓库 owner/repo 映射 + 读取 token | Actions: read |
| Cloudflare 域名 | Zone 状态、DNS 记录数、apex/www/MX、注册商过期信息 | Cloudflare API token、可选 account ID | 只读 token(范围限定为 zones/DNS) |
五步开始
1
克隆仓库
git clone https://github.com/SteveWang92/stackvitals && cd stackvitals && npm install 2
创建 Supabase 项目 应用
supabase/migrations/ 中的迁移并运行 supabase/seed.sql。 3
配置环境 将
.env.example 复制为 .env,填入你的 Supabase URL、anon key 和允许的邮箱。 4
描述你的项目
将
projects.example.json 复制为 projects.config.json——至少需要一个 slug、名称和公共 URL 即可获得 HTTP 健康监控。
5
运行
npm run collect:status 采集数据,然后 npm run dev 查看仪表盘。