├── .env.example ├── .gitignore ├── LICENSE ├── README.md ├── api ├── .gitignore ├── Dockerfile ├── bun.lock ├── package.json └── src │ ├── index.ts │ ├── services │ ├── auth.ts │ ├── generateReport.ts │ ├── sessionStore.ts │ └── tokenStorage.ts │ ├── types │ ├── data.ts │ └── presets.ts │ └── utils │ └── presets.ts ├── compose.yml ├── docs ├── assets │ ├── report-showcase.png │ └── site-showcase.png └── selfhost.md └── web ├── .gitignore ├── Dockerfile ├── README.md ├── bun.lock ├── components.json ├── eslint.config.js ├── index.html ├── nginx.conf ├── package.json ├── public ├── by-logo.png ├── favicon-dark.png ├── favicon-light.png ├── favicon.png └── vite.svg ├── src ├── App.tsx ├── assets │ └── react.svg ├── components │ ├── ThemeToggle.tsx │ ├── report │ │ ├── ReportActions.tsx │ │ ├── ReportContent.tsx │ │ ├── ReportError.tsx │ │ ├── ReportFormatter.tsx │ │ ├── ReportHeader.tsx │ │ ├── ReportLoading.tsx │ │ └── imageGenerator.ts │ ├── theme-provider.tsx │ └── ui │ │ ├── button.tsx │ │ ├── card.tsx │ │ └── select.tsx ├── index.css ├── lib │ └── utils.ts ├── main.tsx ├── pages │ ├── Callback.tsx │ ├── Dashboard.tsx │ ├── Login.tsx │ └── Report.tsx ├── utils │ └── reportUtils.ts └── vite-env.d.ts ├── tailwind.config.js ├── tsconfig.app.json ├── tsconfig.json ├── tsconfig.node.json └── vite.config.ts /.env.example: -------------------------------------------------------------------------------- 1 | APP_ID=114514 # Github Apps ID 2 | OAUTH_CLIENT_ID= # Github Apps Client ID 3 | OAUTH_CLIENT_SECRET= # Github Apps Client Secret 4 | REDIS_URL=redis://gitbox-redis:6379 5 | VITE_HOST=https://gitbox.hust.online 6 | PRIVATE_KEY="-----BEGIN RSA PRIVATE KEY----- 7 | 8 | -----END RSA PRIVATE KEY-----" 9 | 10 | OPENAI_API_BASE_URL=https://openrouter.ai/api/v1 11 | OPENAI_API_KEY= 12 | OPENAI_MODEL=deepseek/deepseek-chat-v3-0324:free -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.prod.* 2 | .env -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2025 Bingyan Studio 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
7 | 8 | ## 项目介绍 9 | 10 | 本项目旨在分析 GitHub 上的项目和用户活动,通过 AI 生成有趣的评论和总结。 11 | 12 | ## 功能 13 | 14 | 1. 生成 GitHub 锐评 15 | 2. 生成图片报告以供分享 16 | 3. 支持自部署! 17 | 18 | ## 看看效果? 19 | 20 |
31 | Powered by
32 |
37 |
42 | BingyanStudio
43 |
44 |
{error}
29 |32 | {line} 33 |
34 | ); 35 | } else if ( 36 | line.trim().startsWith("BUGS") || 37 | line.trim().startsWith("DIAGNOSTICS") 38 | ) { 39 | return ( 40 |41 | {line} 42 |
43 | ); 44 | } else { 45 | return ( 46 |47 | {line} 48 |
49 | ); 50 | } 51 | })} 52 |57 | 基于你的 GitHub 活动生成的命令行风格报告 58 |
59 | 60 | {/* Preset selector */} 61 | {presets.length > 0 && ( 62 |22 | 正在分析你的 GitHub 数据,这可能需要约 10 秒... 23 |
24 |{error}
60 |请稍等,我们正在登录...
81 |正在加载 GitHub 信息...
136 |137 | 请稍等,我们正在获取您的数据 138 |
139 |180 | @{userData?.login} 181 |
182 | 183 | {userData?.created_at && ( 184 |203 | {userData.bio} 204 |
205 |
,
233 | color:
234 | "border-blue-200 bg-gradient-to-br from-blue-50 to-transparent dark:from-blue-950/20 dark:to-transparent",
235 | },
236 | {
237 | title: "关注者",
238 | value: userData?.followers.toString() || "0",
239 | icon: {stat.value}
270 |
308 | GitHub 个人页面
309 |
310 | )}
311 | 329 | 锐评一下你都在 GitHub 写了什么。 330 |
331 |
334 | Powered by
335 |
340 |
345 | BingyanStudio
346 |
347 |
51 | Powered by
52 |
57 |
62 | BingyanStudio
63 |
64 |