|
| 1 | +# One Man Band |
| 2 | + |
| 3 | +A Tauri desktop app for orchestrating git worktrees with integrated terminal support. |
| 4 | + |
| 5 | +## Tech Stack |
| 6 | + |
| 7 | +- **Frontend**: React 19, TypeScript, Tailwind CSS, xterm.js |
| 8 | +- **Backend**: Rust, Tauri 2.x |
| 9 | +- **Build**: Vite, Cargo |
| 10 | + |
| 11 | +## Project Structure |
| 12 | + |
| 13 | +``` |
| 14 | +src/ # React frontend |
| 15 | + components/ # UI components |
| 16 | + hooks/ # React hooks (useWorktrees, usePty, useGitStatus) |
| 17 | + lib/ # Tauri invoke wrappers |
| 18 | + types/ # TypeScript types |
| 19 | +src-tauri/ # Rust backend |
| 20 | + src/ |
| 21 | + lib.rs # Tauri commands |
| 22 | + worktree.rs # Git worktree operations |
| 23 | + pty.rs # Terminal/PTY management |
| 24 | + watcher.rs # File system watcher |
| 25 | + config.rs # User configuration |
| 26 | + state.rs # App state types |
| 27 | +``` |
| 28 | + |
| 29 | +## Development |
| 30 | + |
| 31 | +```bash |
| 32 | +npm install |
| 33 | +npm run tauri dev |
| 34 | +``` |
| 35 | + |
| 36 | +## Commits and Releases |
| 37 | + |
| 38 | +This project uses [Conventional Commits](https://www.conventionalcommits.org/) with release-please for automated versioning. |
| 39 | + |
| 40 | +### Commit Message Format |
| 41 | + |
| 42 | +``` |
| 43 | +<type>: <description> |
| 44 | +
|
| 45 | +[optional body] |
| 46 | +
|
| 47 | +[optional footer] |
| 48 | +``` |
| 49 | + |
| 50 | +### Version Bump Rules |
| 51 | + |
| 52 | +| Commit Type | Version Bump | Example | |
| 53 | +|-------------|--------------|---------| |
| 54 | +| `feat:` | Minor (0.1.0 → 0.2.0) | `feat: add dark mode toggle` | |
| 55 | +| `fix:` | Patch (0.1.0 → 0.1.1) | `fix: resolve crash on startup` | |
| 56 | +| `feat!:` or `BREAKING CHANGE:` | Major (0.1.0 → 1.0.0) | `feat!: change config format` | |
| 57 | +| `docs:`, `chore:`, `refactor:`, `test:`, `style:` | No bump | `docs: update README` | |
| 58 | + |
| 59 | +### Commit Types |
| 60 | + |
| 61 | +- `feat` - New feature for the user |
| 62 | +- `fix` - Bug fix for the user |
| 63 | +- `docs` - Documentation only changes |
| 64 | +- `style` - Formatting, missing semicolons, etc (no code change) |
| 65 | +- `refactor` - Code change that neither fixes a bug nor adds a feature |
| 66 | +- `perf` - Performance improvement |
| 67 | +- `test` - Adding or updating tests |
| 68 | +- `chore` - Maintenance tasks, dependency updates |
| 69 | +- `build` - Changes to build system or external dependencies |
| 70 | +- `ci` - CI configuration changes |
| 71 | + |
| 72 | +### Release Process |
| 73 | + |
| 74 | +1. Make commits using conventional commit format |
| 75 | +2. Push to `main` branch |
| 76 | +3. Release-please automatically creates/updates a release PR |
| 77 | +4. Review and merge the release PR |
| 78 | +5. GitHub Action builds and uploads binaries to the release |
| 79 | + |
| 80 | +### Manual Version Sync |
| 81 | + |
| 82 | +Version is defined in three places that release-please keeps in sync: |
| 83 | +- `package.json` - `version` field |
| 84 | +- `src-tauri/Cargo.toml` - `version` field |
| 85 | +- `src-tauri/tauri.conf.json` - `version` field |
| 86 | + |
| 87 | +## Configuration |
| 88 | + |
| 89 | +User config is stored at `~/.config/onemanband/config.jsonc`: |
| 90 | + |
| 91 | +```jsonc |
| 92 | +{ |
| 93 | + "main": { |
| 94 | + "command": "claude", // Command to run in main pane |
| 95 | + "fontFamily": "Menlo, Monaco, monospace", |
| 96 | + "fontSize": 13 |
| 97 | + }, |
| 98 | + "worktree": { |
| 99 | + "directory": "{{ repo_directory }}/.worktrees", |
| 100 | + "copy": { |
| 101 | + "gitignored": true, |
| 102 | + "except": [".claude"] |
| 103 | + } |
| 104 | + } |
| 105 | +} |
| 106 | +``` |
0 commit comments