Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
4a1f416
feat: 添加可选的 Express + SQLite 后端服务器
Feb 24, 2026
5e4ec51
Merge pull request #2 from Micah-Zheng/feature/add-optional-backend
Micah-Zheng Feb 24, 2026
737b983
fix: 删除 nginx 默认配置避免与自定义配置冲突
Feb 24, 2026
0d67d1b
Merge pull request #3 from Micah-Zheng/feature/add-optional-backend
Micah-Zheng Feb 24, 2026
0f198d7
feat: 添加 AI/WebDAV 配置同步到后端功能
Feb 24, 2026
17f8cf6
Merge pull request #4 from Micah-Zheng/feature/add-optional-backend
Micah-Zheng Feb 25, 2026
32a4487
feat: 添加跨设备自动同步功能
Feb 25, 2026
66ea2e3
feat: 添加跨设备自动同步功能 (#5)
Micah-Zheng Feb 25, 2026
f83856e
feat: AI请求通过后端代理转发,解决Docker内部URL无法从浏览器访问的问题
Feb 25, 2026
61e9c56
Merge branch 'main' of https://github.com/Micah-Zheng/GithubStarsManager
Feb 25, 2026
cffcaa6
fix: 修复 CodeRabbit 审查发现的5个问题
Feb 25, 2026
bae5c34
fix: 修复 proxyService 3个 Minor 问题
Feb 25, 2026
8faefce
fix: 修复 CodeRabbit 提出的所有 Critical/Major/Minor 问题
Feb 25, 2026
f12da43
fix: 修复 CodeRabbit 第四轮审查的 8 个 Major 问题
Feb 25, 2026
64b3b9d
fix: 修复 CodeRabbit 第五轮审查的 2 个 Minor 问题
Feb 25, 2026
23a1d40
fix: 修复 CodeRabbit 第六轮审查的 1 个 Major 和 2 个 Minor 问题
Feb 25, 2026
8b193e8
fix: 修复 CodeRabbit 第七轮审查的 2 个 Major 问题
Feb 25, 2026
9595fa8
fix: 添加 syncToBackend 重入保护并修复 stopAutoSync 订阅清理
Feb 25, 2026
7a2bcdd
fix: 序列化 pull/push 防止 _lastHash 竞争条件
Feb 25, 2026
c0f3dfc
fix: 修复 syncFromBackend finally 块闭合括号并重置 in-flight 状态标志
Feb 25, 2026
894c189
fix: 修复 startAutoSync 遗漏 _isSyncingFromBackend 重置并延迟 _lastHash 更新
Feb 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -25,4 +25,12 @@ dist-ssr
*.sw?
.env
release
electron
electron

# Backend server data
server/data/*.db
server/data/.encryption-key
server/dist/

# Orchestrator internal files
.sisyphus/
3 changes: 3 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@ RUN npm run build
# Production stage
FROM nginx:alpine

# Remove default nginx config that conflicts with ours
RUN rm -f /etc/nginx/conf.d/default.conf

# Copy built files from build stage
COPY --from=build /app/dist /usr/share/nginx/html

Expand Down
102 changes: 97 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@ An app for managing github starred repositories.

</div>

**[中文文档](README_zh.md)** | English


## ✨ Features

Tired of starring everything and finding nothing? GitHub Stars Manager automatically syncs your starred repos, uses AI to summarize and categorize them, and lets you find anything with semantic search. Track releases, filter assets, and one‑click download—smarter than manual tags, simpler than GitHub.
Expand All @@ -25,6 +28,7 @@ Tired of starring everything and finding nothing? GitHub Stars Manager automatic
- Smart filters: match assets by keywords (e.g., dmg/mac/arm64/aarch64)
- Bilingual wiki jump: deepwiki (EN) or zread (ZH) based on language
- Packaged client: no environment setup required
- Optional backend: cross-device sync, CORS-free API proxying, and encrypted token storage via Express + SQLite

### Starred Repo Manager

Expand All @@ -45,6 +49,13 @@ Use your own AI model API that supports OpenAI-compatible interfaces.

![SCR-20250629-qldc](upload/SCR-20250629-qldc.png)

## 🛠 Tech Stack

- **Frontend**: React 18 + TypeScript + Tailwind CSS
- **State Management**: Zustand
- **Icons**: Lucide React + Font Awesome
- **Build Tool**: Vite

## 👋🏻 How to Use

### 💻 Desktop Client (Recommended)
Expand All @@ -58,24 +69,105 @@ https://github.com/AmintaCCCP/GithubStarsManager/releases
2. Navigate to the directory, and open a Terminal window at the downloaded folder.
3. Run `npm install` to install dependencies and `npm run dev` to build

> 💡 When running the project locally using `npm run dev`, calls to AI services and WebDAV may fail due to CORS restrictions. To avoid this issue, use the prebuilt client application or build the client yourself.
> 💡 When running the project locally using `npm run dev`, calls to AI services and WebDAV may fail due to CORS restrictions. To avoid this issue, use the prebuilt client application or build the client yourself. Alternatively, run the backend server (`cd server && npm run dev`) to proxy API calls and avoid CORS entirely.

### 🐳 Run With Docker

You can also run this application using Docker. See [DOCKER.md](DOCKER.md) for detailed instructions on how to build and deploy using Docker. The Docker setup handles CORS properly and allows you to configure any AI or WebDAV service URLs directly in the application.

### 🖥️ Backend Server (Optional)

The app works fully without a backend (pure frontend, localStorage). An optional Express + SQLite backend adds:
- **Cross-device sync**: Share data between browsers/devices
- **CORS-free proxying**: AI and WebDAV calls go through the server, avoiding browser CORS issues
- **Token security**: API keys stored encrypted on server, never exposed to browser network tab

#### Quick Start (Docker — recommended)
```bash
docker-compose up --build
```
Frontend on port 8080, backend on port 3000. Data persisted in a Docker volume.

#### Manual Setup
```bash
cd server
npm install
npm run dev
```

#### Environment Variables
| Variable | Required | Description |
|----------|----------|-------------|
| `API_SECRET` | No | Bearer token for API authentication. If unset, auth is disabled. |
| `ENCRYPTION_KEY` | No | AES-256 key for encrypting stored secrets. Auto-generated if unset. |
| `PORT` | No | Server port (default: 3000) |

#### Connecting Frontend to Backend
1. Open Settings panel in the app
2. Find "Backend Server" section
3. Enter API Secret (if configured)
4. Click "Test Connection" — green indicator means connected
5. Use "Sync to Backend" / "Sync from Backend" to transfer data

## 🤖 AI Service Configuration

The app supports multiple AI providers. Configure yours in the Settings panel:

- **OpenAI**: GPT-3.5 / GPT-4
- **Anthropic**: Claude
- **Ollama**: local models with no API key needed
- **Any OpenAI-compatible API**: custom endpoint + key

Steps: open Settings, add an AI config, enter your endpoint and key, pick a model, then test the connection.

## Who it’s for
## 💾 WebDAV Backup Configuration

Back up and sync your data via any standard WebDAV service:

- **Jianguoyun (坚果云)**: recommended for users in China
- **Nextcloud**: self-hosted cloud storage
- **ownCloud**: enterprise-grade option
- **Any standard WebDAV server**

Steps: open Settings, add a WebDAV config, enter the server URL, username, password, and path, test the connection, then enable auto-backup.

## 🚀 Deployment

The build output is a static site, so it deploys anywhere static hosting is supported:

- **Netlify**: connect your fork, set build command `npm run build`, publish directory `dist`
- **Vercel**: same as Netlify — import repo, build runs automatically
- **GitHub Pages**: push the `dist` folder to a `gh-pages` branch
- **Cloudflare Pages**: connect repo, build command `npm run build`, output `dist`
- **Self-hosted**: serve the `dist` folder with any HTTP server (nginx, Caddy, etc.)

For Docker deployment see the [Backend Server](#️-backend-server-optional) section above.

## Who it's for

Developers with hundreds/thousands of stars
People who systematically track releases
Lazy-efficient users who dont want manual tagging
"Lazy-efficient" users who don't want manual tagging

## Additional Notes

1. There is no backend for this app, so save your important data on your own.
1. The backend is optional but recommended for web deployment. Without it, all data is stored in your browser's localStorage — back up important data regularly.
2. I can't write code, this app is entirely written by the AI, mainly for my personal requirment. If you have a new feature or meet a bug, I can only try to do it, but I can't guarantee it, because it depends on the AI to do it successfully.😹

## 🤝 Contributing

Contributions are welcome!

1. Fork the project
2. Create a feature branch (`git checkout -b feature/AmazingFeature`)
3. Commit your changes (`git commit -m 'Add some AmazingFeature'`)
4. Push to the branch (`git push origin feature/AmazingFeature`)
5. Open a Pull Request

## 📄 License

MIT — see [LICENSE](LICENSE) for details.

## Star History

[![Star History Chart](https://api.star-history.com/svg?repos=AmintaCCCP/GithubStarsManager&type=Date)](https://www.star-history.com/#AmintaCCCP/GithubStarsManager&Date)
[![Star History Chart](https://api.star-history.com/svg?repos=AmintaCCCP/GithubStarsManager&type=Date)](https://www.star-history.com/#AmintaCCCP/GithubStarsManager&Date)
Loading