Contributing
Contributions are welcome. Each repo has its own CONTRIBUTING.md with the details; this is the
short version.
The three repos
Section titled “The three repos”| Repo | Stack | Package manager |
|---|---|---|
| Client | React + TypeScript + Vite, Tauri 2 / Rust | bun |
| Backend | Python 3.14, FastAPI | uv |
| Website | Astro + Starlight | bun |
The client lives directly in the parent repo. The backend and the website are separate repos, cloned into the client’s folder, which ignores them. Keep each change scoped to one repo. To get all three:
git clone https://github.com/NotRover/RoverTools-Orange-Copy-Paste-App.gitcd RoverTools-Orange-Copy-Paste-Appgit clone https://github.com/NotRover/RoverTools-Orange-Copy-Paste-Backend.git orange-copy-paste-clipboard-backendgit clone https://github.com/NotRover/RoverTools-Orange-Copy-Paste-Website.git orange-copy-paste-clipboard-websiteSetup and checks
Section titled “Setup and checks”Client (from orange-copy-paste-clipboard-app-rust/):
bun installbun run tauri dev # full appbun run build # typecheck + build the frontendcd src-tauri && cargo checkBackend (from the backend repo, via uv):
uv run uvicorn src.main:app --reload # or: docker-compose upuv run ruff check srcuv run ty check srcuv run pytestWebsite (from the website repo):
bun installbun run devbun run build # also the verification stepRun the smallest check set that covers what you touched, and say so in your pull request if you could not run something (full end-to-end sync needs a live backend, a Supabase project, and two accounts).
Opening a change
Section titled “Opening a change”- Work on a branch, and open the pull request as a draft against that repo’s
main. - Docs and any text a user reads follow the writing guide. Run its checklist, and check every number, label and shortcut against the code.
- A change that crosses the client/backend wire is a change to both repos. The wire contract has one home, the backend architecture doc; update it in the same change.
- Never re-implement encryption, key handling, or merge logic on the TypeScript side. The Rust core owns all of it.
- Commit messages are
type(scope): subjectin lowercase, with a few single-line bullets on what changed and why.
See each repo’s CONTRIBUTING.md, SECURITY.md, and CODE_OF_CONDUCT.md for the full policy.