Skip to content

Contributing

Contributions are welcome. Each repo has its own CONTRIBUTING.md with the details; this is the short version.

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:

Terminal window
git clone https://github.com/NotRover/RoverTools-Orange-Copy-Paste-App.git
cd RoverTools-Orange-Copy-Paste-App
git clone https://github.com/NotRover/RoverTools-Orange-Copy-Paste-Backend.git orange-copy-paste-clipboard-backend
git clone https://github.com/NotRover/RoverTools-Orange-Copy-Paste-Website.git orange-copy-paste-clipboard-website

Client (from orange-copy-paste-clipboard-app-rust/):

Terminal window
bun install
bun run tauri dev # full app
bun run build # typecheck + build the frontend
cd src-tauri && cargo check

Backend (from the backend repo, via uv):

Terminal window
uv run uvicorn src.main:app --reload # or: docker-compose up
uv run ruff check src
uv run ty check src
uv run pytest

Website (from the website repo):

Terminal window
bun install
bun run dev
bun run build # also the verification step

Run 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).

  • 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): subject in 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.