{"id":22951664,"url":"https://github.com/vandeefeng/gitmemos","last_synced_at":"2025-06-24T04:35:30.132Z","repository":{"id":265443409,"uuid":"896003995","full_name":"VandeeFeng/gitmemos","owner":"VandeeFeng","description":"An alternative to Memos  depending on github issues and supabase","archived":false,"fork":false,"pushed_at":"2025-05-11T05:39:36.000Z","size":3051,"stargazers_count":6,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-05-11T06:28:07.723Z","etag":null,"topics":["github","issues-blog","memos","notebook"],"latest_commit_sha":null,"homepage":"https://x.vandee.art/memo","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/VandeeFeng.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-11-29T10:57:32.000Z","updated_at":"2025-05-11T05:39:39.000Z","dependencies_parsed_at":"2024-12-21T07:23:35.785Z","dependency_job_id":"8f2440f6-ec45-4179-9f4b-547663caa71e","html_url":"https://github.com/VandeeFeng/gitmemos","commit_stats":null,"previous_names":["vandeefeng/gitmemos"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/VandeeFeng/gitmemos","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VandeeFeng%2Fgitmemos","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VandeeFeng%2Fgitmemos/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VandeeFeng%2Fgitmemos/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VandeeFeng%2Fgitmemos/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/VandeeFeng","download_url":"https://codeload.github.com/VandeeFeng/gitmemos/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VandeeFeng%2Fgitmemos/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261604852,"owners_count":23183720,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["github","issues-blog","memos","notebook"],"created_at":"2024-12-14T15:17:14.481Z","updated_at":"2025-06-24T04:35:30.068Z","avatar_url":"https://github.com/VandeeFeng.png","language":"TypeScript","readme":"# GitMemos\n\n一个基于 GitHub Issues 的 Memos 替代。配合 [VandeeFeng/gitmemo](https://github.com/VandeeFeng/gitmemo)，提供一个简单的页面。\n\n代码由 cursor 协助生成。\n\n由于 Memos 总是不太稳定，而 GitHub Issues 基本上可以满足我所有记录 Memos 的需求，因此做了这个页面。\n\n部署到 Vercel 时填写必要的环境变量即可默认显示自己仓库的 issues 数据。\n\n如果想显示其他仓库，现在只是提供了一个 简单的 GitHub Config 来配置仓库和 API，数据保存在 supabase 中。会优先获取环境变量的账号数据，具体的登录功能没有继续往下了。\n\n\u003cimg src=\"assets/GitMemo1.png\" alt=\"1\" width=\"80%\" /\u003e\n\n\u003cimg src=\"assets/GitMemo2.png\" alt=\"2\" width=\"80%\" /\u003e\n\n\u003cimg src=\"assets/GitMemo3.png\" alt=\"3\" width=\"80%\" /\u003e\n\n## 技术栈\n\n- Framework: Next.js 13+ (App Router)\n- UI: Tailwind CSS\n- UI: shadcn/ui\n- Language: TypeScript\n- Database: Supabase\n- Backend: GitHub API\n- Deploy: Vercel\n\n## 主要功能\n\n- 📝 基于 GitHub Issues 的笔记管理\n- 📝 基于 Supabase 的数据库\n- 🔄 同步 GitHub Issues 数据\n- 🎨 支持亮色/暗色主题\n- ✨ Markdown 编辑和实时预览\n- 🏷️ 标签管理和筛选\n- 🔗 反链\n- 📤 卡片分享\n\n## 快速开始\n\n1. 克隆仓库并安装依赖：\n   ```bash\n   git clone git@github.com:VandeeFeng/gitmemos.git\n   cd gitmemos\n   npm install\n   ```\n\n2. 配置环境变量：\n   复制 `.env.example` 到 `.env.local` 并配置以下环境变量：\n\n   ### GitHub 配置\n   - `GITHUB_TOKEN`: GitHub 个人访问令牌\n   - `GITHUB_OWNER`: GitHub 用户名\n   - `GITHUB_REPO`: GitHub 仓库名\n   - `GITHUB_WEBHOOK_SECRET`: GitHub webhook 密钥（可选）\n\n   ### Supabase 配置\n   - `SUPABASE_URL`: Supabase 项目 URL\n   - `SUPABASE_ANON_KEY`: Supabase 匿名密钥\n   - `SUPABASE_SERVICE_ROLE_KEY`: Supabase 服务角色密钥\n\n   ### 应用配置\n   - `NEXT_PUBLIC_APP_URL`: 应用访问地址\n     - 开发环境: `http://localhost:3000`\n     - 生产环境: 实际域名（如 `https://your-app-url.com`）\n   - `ENCRYPTION_KEY`: 用于加密敏感数据的密钥\n   - `PASSWORD`: 用于创建和更新 issues 的密码（可选，如果不设置则使用数据库中的密码）\n   - `DEBUG_MODE`: 设置为 'true' 开启调试日志\n\n3. 启动开发服务器：\n   ```bash\n   npm run dev\n   ```\n\n## GitHub 配置\n### GitHub Token 设置\n\n1. 访问仓库，点击 `Settings` -\u003e `Developer settings` -\u003e `Personal access tokens` -\u003e `Generate new token`\n2. 生成新的 token，找到仓库，勾选 `issue` 读写权限\n3. 将 token 添加到 `.env.local` 文件中\n\n### GitHub webhook 设置\n1. 访问仓库，点击 `Settings` -\u003e `Webhooks` -\u003e `Add webhook`\n2. 填写 `Payload URL` 为 `https://your-vercel-app-url/api/webhook/github`\n3. 选择 `Content type` 为 `application/json`\n4. 选择 `Secret` 为 `your_secret_key`，这个 secret 需要和 `.env.local`的`GITHUB_WEBHOOK_SECRET` 的 secret 一致\n5. 选择 `Which events would you like to trigger this webhook?` 为 `Issues`、`Labels`\n6. 点击 `Add webhook`\n\n## Supabase 设置\n参考 [docs/supabase_init.md](./docs/supabase_init.md)\n\n在 supabase 里有四个表，分别是 configs, issues, labels, sync_history\n\nconfigs 表是用来存储用户配置的，包括 owner, repo, password\n\nissues 表是用来存储 issues 的，包括 owner, repo, issue_number, title, body, state, labels, github_created_at, updated_at, created_at\n\nlabels 表是用来存储 labels 的，包括 owner, repo, name, color, description, updated_at, created_at\n\nsync_history 表是用来存储同步历史的，包括 owner, repo, last_sync_at, issues_synced, status, error_message, created_at, updated_at\n\n这部分可以根据自己的需求进行修改，比如添加更多的字段，或者修改表结构。\n\n## 安全说明\n\n- 所有敏感 API 调用都经过来源验证\n- 带有 `NEXT_PUBLIC_` 前缀的环境变量在浏览器中可访问\n- 请确保 `.env.local` 文件的安全，永远不要将其提交到版本控制系统中\n- 所有加密操作仅在服务器端执行，确保密钥安全\n- 密码和 GitHub Token 在数据库中以加密形式存储\n- 如果设置了环境变量中的 `PASSWORD`，它将优先于数据库中的密码\n\n## 开发指南\n\n### 调试模式\n项目提供了完整的调试日志系统：\n- 设置 `DEBUG_MODE=true` 开启详细的调试日志\n- 调试日志包含加密操作、API 调用等关键操作的详细信息\n- 生产环境中错误和警告日志始终可见，调试日志仅在调试模式下可见\n\n## TODO\n- [x] 搜索功能 \n- [x] 数据库\n- [x] 登录功能\n- [x] TimeLine\n- [x] 分享功能\n- [x] 实时更新，配置了GitHub webhook\n- [x] 移动端适配\n- [x] 优化数据处理\n- [ ] AI 功能\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvandeefeng%2Fgitmemos","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvandeefeng%2Fgitmemos","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvandeefeng%2Fgitmemos/lists"}