diff --git a/.claude/settings.local.json b/.claude/settings.local.json new file mode 100644 index 0000000..ee0a115 --- /dev/null +++ b/.claude/settings.local.json @@ -0,0 +1,8 @@ +{ + "permissions": { + "allow": [ + "Bash(mkdir:*)", + "Bash(rm:*)" + ] + } +} diff --git a/docs/superpowers/plans/2026-03-31-gitm-implementation.md b/docs/superpowers/plans/2026-03-31-gitm-implementation.md index 6a67e96..5c9aca6 100644 --- a/docs/superpowers/plans/2026-03-31-gitm-implementation.md +++ b/docs/superpowers/plans/2026-03-31-gitm-implementation.md @@ -8,19 +8,19 @@ **Tech Stack:** Go 1.26+, Gin, SQLite (mattn/go-sqlite3), Vue 3, Element Plus, Pinia, Vite, golang-jwt/jwt, bcrypt ---- +*** ## Phase 1: Project Initialization and Core Infrastructure ### Task 1: Initialize Go Module and Project Structure **Files:** + - Create: `go.mod` - Create: `go.sum` (auto-generated) - Create: `Makefile` - Create: `main.go` - Create: `README.md` - - [ ] **Step 1: Initialize Go module** ```bash @@ -139,7 +139,7 @@ func runServer() error { Create `README.md`: -```markdown +````markdown # GitM - Gitea Repository Sync Tool Cross-platform tool to synchronize all repositories from multiple Gitea servers to local storage. @@ -157,7 +157,7 @@ Cross-platform tool to synchronize all repositories from multiple Gitea servers ```bash make all -``` +```` ## Run @@ -184,23 +184,24 @@ cd web && npm run dev # Run backend (requires frontend built first) go run main.go ``` -``` + +```` - [ ] **Step 7: Commit** ```bash git add go.mod go.sum Makefile main.go README.md git commit -m "feat: initialize project structure and dependencies" -``` +```` ---- +*** ### Task 2: Create Internal Package Structure **Files:** + - Create: `internal/config/config.go` - Create: `internal/models/models.go` - - [ ] **Step 1: Create config package** Create `internal/config/config.go`: @@ -319,13 +320,13 @@ git add internal/config/config.go internal/models/models.go git commit -m "feat: add config and models packages" ``` ---- +*** ### Task 3: Implement Database Layer **Files:** -- Create: `internal/database/database.go` +- Create: `internal/database/database.go` - [ ] **Step 1: Create database package** Create `internal/database/database.go`: @@ -655,14 +656,14 @@ git add internal/database/ git commit -m "feat: implement SQLite database layer" ``` ---- +*** ### Task 4: Implement JWT Authentication **Files:** + - Create: `internal/middleware/auth.go` - Create: `internal/handler/auth.go` - - [ ] **Step 1: Create auth middleware** Create `internal/middleware/auth.go`: @@ -961,16 +962,16 @@ git add internal/middleware/ internal/handler/ git commit -m "feat: implement JWT authentication middleware and handlers" ``` ---- +*** ## Phase 2: Gitea API Integration ### Task 5: Implement Gitea API Client **Files:** + - Create: `internal/gitea/client.go` - Create: `internal/gitea/types.go` - - [ ] **Step 1: Create Gitea types** Create `internal/gitea/types.go`: @@ -1145,14 +1146,14 @@ git add internal/gitea/ git commit -m "feat: implement Gitea API client" ``` ---- +*** ### Task 6: Implement Sync Engine **Files:** + - Create: `internal/sync/engine.go` - Create: `internal/sync/scheduler.go` - - [ ] **Step 1: Create sync engine** Create `internal/sync/engine.go`: @@ -1532,15 +1533,15 @@ git add internal/sync/ git commit -m "feat: implement sync engine and scheduler" ``` ---- +*** ## Phase 3: HTTP Handlers ### Task 7: Implement Server Management Handlers **Files:** -- Create: `internal/handler/server.go` +- Create: `internal/handler/server.go` - [ ] **Step 1: Create server handler** Create `internal/handler/server.go`: @@ -1885,13 +1886,13 @@ git add internal/handler/server.go git commit -m "feat: implement server management handlers" ``` ---- +*** ### Task 8: Implement Log and Stats Handlers **Files:** -- Create: `internal/handler/log.go` +- Create: `internal/handler/log.go` - [ ] **Step 1: Create log handler** Create `internal/handler/log.go`: @@ -1991,13 +1992,13 @@ git add internal/handler/log.go git commit -m "feat: implement sync log and stats handlers" ``` ---- +*** ### Task 9: Wire Up Main Server **Files:** -- Modify: `main.go` +- Modify: `main.go` - [ ] **Step 1: Update main.go with full server implementation** Replace `main.go` with: @@ -2204,20 +2205,20 @@ git add main.go git commit -m "feat: wire up main server with all routes" ``` ---- +*** ## Phase 4: Frontend Implementation ### Task 10: Initialize Vue 3 Frontend **Files:** + - Create: `web/package.json` - Create: `web/vite.config.ts` - Create: `web/tsconfig.json` - Create: `web/index.html` - Create: `web/src/main.ts` - Create: `web/src/App.vue` - - [ ] **Step 1: Create web/package.json** Create `web/package.json`: @@ -2478,15 +2479,15 @@ git add web/ git commit -m "feat: initialize Vue 3 frontend structure" ``` ---- +*** ### Task 11: Create API Client and Auth Store **Files:** + - Create: `web/src/api/index.ts` - Create: `web/src/api/types.ts` - Create: `web/src/stores/auth.ts` - - [ ] **Step 1: Create API types** Create `web/src/api/types.ts`: @@ -2687,13 +2688,13 @@ git add web/src/api/ web/src/stores/ git commit -m "feat: add API client and auth store" ``` ---- +*** ### Task 12: Create Login Page **Files:** -- Create: `web/src/views/Login.vue` +- Create: `web/src/views/Login.vue` - [ ] **Step 1: Create Login.vue** Create `web/src/views/Login.vue`: @@ -2814,13 +2815,13 @@ git add web/src/views/Login.vue git commit -m "feat: add login page" ``` ---- +*** ### Task 13: Create Layout Component **Files:** -- Create: `web/src/views/Layout.vue` +- Create: `web/src/views/Layout.vue` - [ ] **Step 1: Create Layout.vue** Create `web/src/views/Layout.vue`: @@ -2962,13 +2963,13 @@ git add web/src/views/Layout.vue git commit -m "feat: add layout component with navigation" ``` ---- +*** ### Task 14: Create Dashboard Page **Files:** -- Create: `web/src/views/Dashboard.vue` +- Create: `web/src/views/Dashboard.vue` - [ ] **Step 1: Create Dashboard.vue** Create `web/src/views/Dashboard.vue`: @@ -3162,13 +3163,13 @@ git add web/src/views/Dashboard.vue git commit -m "feat: add dashboard page" ``` ---- +*** ### Task 15: Create Servers Page **Files:** -- Create: `web/src/views/Servers.vue` +- Create: `web/src/views/Servers.vue` - [ ] **Step 1: Create Servers.vue** Create `web/src/views/Servers.vue`: @@ -3433,15 +3434,15 @@ git add web/src/views/Servers.vue git commit -m "feat: add servers management page" ``` ---- +*** ### Task 16: Create Repositories, Logs, and Settings Pages **Files:** + - Create: `web/src/views/Repos.vue` - Create: `web/src/views/Logs.vue` - Create: `web/src/views/Settings.vue` - - [ ] **Step 1: Create Repos.vue** Create `web/src/views/Repos.vue`: @@ -3847,16 +3848,16 @@ git add web/src/views/Repos.vue web/src/views/Logs.vue web/src/views/Settings.vu git commit -m "feat: add repos, logs, and settings pages" ``` ---- +*** ## Phase 5: Frontend Build Integration ### Task 17: Embed Frontend in Go Binary **Files:** + - Modify: `main.go` - Modify: `Makefile` - - [ ] **Step 1: Add embed directive to main.go** Edit `main.go`, add after the imports: @@ -3904,7 +3905,7 @@ Edit `main.go`, update the `runServer` function. Find the comment about static f }) ``` -- [ ] **Step 3: Add `"net/http"` to imports** +- [ ] **Step 3: Add** **`"net/http"`** **to imports** Edit `main.go` imports: @@ -4055,16 +4056,16 @@ git add main.go Makefile git commit -m "feat: embed frontend in Go binary" ``` ---- +*** ## Phase 6: Testing and Documentation ### Task 18: Create Tests **Files:** + - Create: `internal/database/database_test.go` - Create: `internal/gitea/client_test.go` - - [ ] **Step 1: Create database tests** Create `internal/database/database_test.go`: @@ -4205,19 +4206,19 @@ git add internal/database/database_test.go internal/gitea/client_test.go git commit -m "test: add unit tests for database and Gitea client" ``` ---- +*** ### Task 19: Final Documentation **Files:** + - Modify: `README.md` - Create: `.gitignore` - - [ ] **Step 1: Update README.md** Replace `README.md` with: -```markdown +````markdown # GitM - Gitea Repository Sync Tool Cross-platform tool to synchronize all repositories from multiple Gitea servers to local storage. @@ -4246,7 +4247,7 @@ cd gitm make all # The binary will be at bin/gitm -``` +```` ### First Run @@ -4264,8 +4265,9 @@ make all ### Access Web UI Open your browser and navigate to: -- http://localhost:9000 (default) -- http://localhost:9090 (if you used --addr :9090) + +- (default) +- (if you used --addr :9090) ## Usage @@ -4302,6 +4304,7 @@ To discover new repositories without syncing, click **Discover**. ### Storage Repositories are stored as bare git mirrors at: + ``` /repos/server__//.git ``` @@ -4322,14 +4325,17 @@ Settings are stored in the SQLite database and can be changed via the Web UI: The API is available at `/api/` and requires JWT authentication: ### Authentication + - `POST /api/login` - Authenticate and get token - `POST /api/init` - Initialize admin password ### Settings + - `GET /api/settings` - Get all settings - `PUT /api/settings` - Update settings ### Servers + - `GET /api/servers` - List all servers - `POST /api/servers` - Add a server - `PUT /api/servers/:id` - Update a server @@ -4341,6 +4347,7 @@ The API is available at `/api/` and requires JWT authentication: - `GET /api/servers/:id/sync/status` - Get sync status ### Sync + - `POST /api/sync/all` - Sync all servers - `GET /api/sync/logs` - Get sync logs - `GET /api/sync/stats` - Get statistics @@ -4361,7 +4368,7 @@ npm install npm run dev ``` -The dev server runs on http://localhost:5173 with API proxy to :9000. +The dev server runs on with API proxy to :9000. ### Backend Development @@ -4409,6 +4416,7 @@ gitm/ ## License MIT License + ``` - [ ] **Step 2: Create .gitignore** @@ -4416,62 +4424,71 @@ MIT License Create `.gitignore`: ``` + # Binaries + bin/ gitm gitm.exe gitm-linux # Data + data/ -*.db -*.db-shm -*.db-wal +\*.db +\*.db-shm +\*.db-wal # Go -*.exe -*.exe~ -*.dll -*.so -*.dylib -*.test -*.out + +\*.exe +\*.exe\~ +\*.dll +\*.so +\*.dylib +\*.test +\*.out go.work # Node -web/node_modules/ + +web/node\_modules/ web/dist/ # IDE + .idea/ .vscode/ -*.swp -*.swo -*~ +\*.swp +\*.swo +\*\~ # OS -.DS_Store + +.DS\_Store Thumbs.db # Temporary -*.log -*.tmp -``` + +\*.log +\*.tmp + +```` - [ ] **Step 3: Commit** ```bash git add README.md .gitignore git commit -m "docs: update README and add .gitignore" -``` +```` ---- +*** ## Task 20: Final Build Verification **Files:** -- None (verification task) +- None (verification task) - [ ] **Step 1: Full clean build** ```bash @@ -4537,7 +4554,7 @@ git add -A git commit -m "chore: final build verification complete" ``` ---- +*** ## Implementation Complete @@ -4566,3 +4583,4 @@ The GitM project is now fully implemented with: 6. Add more detailed sync progress reporting 7. Implement backup/restore functionality 8. Add Docker support +