Skip to content

Repository files navigation

GitHub Profile Studio

GitHub Profile Studio 是一个本地优先的 GitHub 公开资料工作台。它从服务端读取当前 GitHub 账户的公开信息,让用户审阅姓名与简介后写入 SQLite,并提供 Node/Hono 与 Go 两种兼容后端。

产品定位

这个产品面向希望安全演示 GitHub API、表单、数据库迁移和多运行时后端能力的开发者。浏览器不接触访问凭据,只处理经过字段白名单过滤的公开资料。

核心能力

  • 从 GitHub API 读取登录名、头像、公开主页、公开仓库数、关注者和账户创建时间。
  • 只允许用户编辑显示名称与个人简介。
  • 使用 Drizzle 迁移和 SQLite 幂等保存单一 GitHub 资料记录。
  • 在 Hono/Node 与 Go 后端之间切换,前端 API 契约保持一致。
  • 对凭据缺失、鉴权失败、频率限制、数据校验和数据库错误返回安全提示。

技术栈

  • 工程基线:Better-T-Stack
  • 界面:React 19、Tailwind CSS 4、TanStack Router
  • Node 后端:Hono、Drizzle ORM、SQLite
  • Go 后端:Go、SQLite、共享 SQL 迁移
  • 工程质量:Vitest、Node Test Runner、Biome、GitHub Actions

架构

flowchart LR
    UI["React 工作台"] --> API["Hono API 或 Go API"]
    API --> KEYCHAIN["macOS 钥匙串"]
    API --> GITHUB["GitHub REST API"]
    API --> DB["SQLite + Drizzle 迁移"]
Loading

前端只调用同源 /api 路由。两个后端实现相同的 JSON 契约和数据库行为,因此可以用同一套界面验证不同运行时。

安全

  • GitHub 凭据只保存在 macOS 钥匙串中,服务名为 github-profile-studio
  • 前端没有令牌输入框,也没有任何 VITE_* 凭据通道。
  • 服务端采用字段白名单,不保存私有邮箱、组织成员关系或仓库内容。
  • Go 服务默认只监听 127.0.0.1:3002,降低本地钥匙串能力被局域网访问的风险。
  • 错误响应不会包含令牌、系统命令输出、堆栈或本机路径。

完整说明见 安全边界

本地运行

环境要求:Node.js 22、pnpm 11、Go 1.26,以及 macOS 钥匙串。

先在“钥匙串访问”中创建通用密码项目:

  • 名称:github-profile-studio
  • 账户:Tiancheng-Xu
  • 密码:具备读取个人公开资料权限的 GitHub 凭据

不要把凭据粘贴到终端、.env、聊天记录或仓库文件。

安装依赖:

pnpm install --frozen-lockfile

使用 Hono/Node 后端:

pnpm dev

使用 Go 后端:

pnpm dev:go

浏览器打开 http://localhost:3001

质量检查

pnpm check
pnpm test
pnpm typecheck
pnpm build

这些命令覆盖代码规范、结构与安全门禁、Node API、Go API、前端交互、类型检查和生产构建。

当前状态

能力 状态
React 工作台 本地实现完成
Hono/Node API 本地实现完成
Go API 本地实现完成
SQLite 与 Drizzle 迁移 本地实现完成
AWS 与容器基础设施 规划中
公网运行环境 尚未部署

公开仓库和 CI 不代表产品已经部署到公网。云端架构、费用边界和运行证据完成前,状态保持为规划中。

个人职责

这是一个独立完成的个人产品。我负责需求拆解、前后端契约、React 交互、Hono 与 Go 双后端、数据库迁移、安全边界、自动化测试和公开交付整理。

文档

About

A secure multi-runtime GitHub profile viewer and editor.

Resources

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages