# Contributing to This Repository

We welcome pull requests, but only if they meet the project's quality and design standards. Follow the process below precisely to avoid wasting time—yours or ours.

## Prerequisites

- Familiarity with Git and GitHub (basic commands, branching, forking, etc.)
- A functioning development environment
- Node.js, Python, or other relevant runtime/tools installed (check the `README.md`)

## Fork & Clone

1. **Fork the repository** using the GitHub UI.
2. **Clone your fork** locally:
   ```bash
   git clone https://github.com/your-username/Compass.git
   cd your-fork

3. **Add the upstream remote**:

   ```bash
   git remote add upstream https://github.com/CompassMeet/Compass.git
   ```

## Create a New Branch

Never work on `main` or `master`.

```bash
git checkout -b fix/brief-but-specific-description
```

Use a clear, descriptive branch name. Avoid vague names like `patch-1`.

## Stay Updated

Before you start, make sure your fork is up to date:

```bash
git fetch upstream
git checkout main
git merge upstream/main
```

Then rebase your feature branch if needed:

```bash
git checkout fix/your-feature
git rebase main
```

## Make Atomic Commits

Each commit should represent a single logical change. Follow this format:

```text
type(scope): concise description

body explaining what and why, if necessary
```

Example:

```text
fix(api): handle 500 error on invalid payload
```

Types include: `feat`, `fix`, `docs`, `refactor`, `test`, `chore`.

## Test Everything

If the project has tests, run them. If it doesn’t, write some. Do **not** submit code that hasn't been tested.

```bash
# Example for Node.js
npm test
```

No exceptions. If you don't validate your changes, your PR will be closed.

## Lint & Format

Ensure code matches the project style. If the repo uses a linter or formatter, run them:

```bash
npm run lint
npm run format
```

Or whatever command is defined in the repo.

## Write a Good Pull Request

When opening a pull request:

* **Title**: Describe what the PR does, clearly and specifically.
* **Description**: Explain the context. Link related issues (use `Fixes #123` if applicable).
* **Checklist**:

  * [ ] My code is clean and follows the style guide
  * [ ] I’ve added or updated tests
  * [ ] I’ve run all tests and they pass
  * [ ] I’ve documented my changes (if necessary)

## Code Review Process

* PRs are reviewed by maintainers or core contributors.
* If feedback is given, respond and push updates. Do **not** open new PRs for changes to an existing one.
* PRs that are incomplete, sloppy, or violate the above will be closed.

## Don't Do This

* Don’t commit directly to `main`
* Don’t submit multiple unrelated changes in a single PR
* Don’t ignore CI/test failures
* Don’t expect hand-holding—read the docs and the source first

## Security Issues

Do **not** open public issues for security vulnerabilities. Email the development team instead.

## License

By contributing, you agree that your code will be licensed under the same license as the rest of the project.

