# Contributing to Opendesk Thank you for improving Opendesk. This guide covers local setup, style, tests, and review expectations. Read `AGENTS.md` for deeper architectural and frontend conventions. ## Local setup Follow the [README](README.md) bench installation first. For frontend work, keep the site running and install the SPA dependencies: ```sh cd apps/opendesk yarn install yarn dev ``` The dev server reads `desk/vite.config.js`, which proxies Frappe requests and writes production assets to `opendesk/public/desk`. The backend must remain running for API, authentication, and realtime behavior. Install the repository's Git hooks once per clone: ```sh pre-commit install pre-commit run --all-files ``` ## Commit conventions Commits use [Conventional Commits](https://www.conventionalcommits.org/) as enforced by `commitlint.config.mjs`. Allowed types are `build`, `chore`, `ci`, `docs`, `feat`, `fix`, `perf`, `refactor`, `revert`, `style`, and `test`; types are lower-case and a subject is required. Example: ```text docs(readme): document the local bench setup ``` Keep pull requests focused. Branches in this repository target `main`, `main-hotfix`, or `develop`. ## Code style - **Python:** Black and isort (Black profile) format code; Flake8 checks it. Configuration lives in `.pre-commit-config.yaml` and `.flake8`. The pre-commit Flake8 hook runs with `.github/helpers/.flake8_strict`. - **Frontend:** ESLint with Vue 3, TypeScript, Tailwind, and Prettier integrations via `.eslintrc.js`. Formatting preferences are in `.prettierrc.json`, and `.lintstagedrc` configures staged-file ESLint fixes. - **Vue:** Prefer the Composition API and `