# Contributing to pppca

First off, thank you for considering contributing to pppca! It's people like you that make the open-source community such an amazing place to learn, inspire, and create.

We welcome contributions of all forms:
- 🐛 **Bug Reports**: Found a bug? Open an issue.
- 💡 **Feature Requests**: Have an idea? Start a discussion.
- 📖 **Documentation**: Typo fixes and clarifications are always welcome.
- 💻 **Code**: Fixes and new features via Pull Requests.

---

## 🛠️ Getting Started

### 1. Fork and Clone
1. Fork the repository to your own GitHub account.
2. Clone the project to your machine:
   ```bash
   git clone https://github.com/Kharoh/pppca.git
   cd pppca
   ```

### 2. Set Up Your Environment
We recommend using a virtual environment to keep dependencies isolated.

**Using venv (Standard):**
```bash
# Create a virtual environment
python -m venv .venv

# Activate it
# On Windows:
.venv\Scripts\activate
# On macOS/Linux:
source .venv/bin/activate

# Install the library in editable mode with dev dependencies
pip install -e ".[dev]"
```

> **Note**: If you use `hatch`, `poetry`, or `uv`, please adapt the installation steps to your preferred workflow. The core requirement is that you can run `ruff` in your environment.

---

## 🧪 Development Workflow

### 1. Create a Branch
Always work on a new branch for your changes.
```bash
git checkout -b feature/my-new-feature
# or
git checkout -b fix/issue-number-bug-name
```

### 2. Coding Standards
We use modern tooling to keep the codebase clean and consistent.
- **Linter & Formatter**: We use [Ruff](https://docs.astral.sh/ruff/) for both linting and formatting.
- **Type Checking**: We use `mypy` for static type checking.

Before committing, run the following commands:
```bash
# Format code
ruff format .

# Lint code (and fix auto-fixable issues)
ruff check . --fix
```

---

## 📥 Submitting a Pull Request

1. **Push your changes** to your fork:
   ```bash
   git push origin feature/my-new-feature
   ```
2. **Open a Pull Request** against the `main` branch of the original repository.
3. **Description**: Clearly describe the problem you are solving and your solution. Link to any relevant issues (e.g., `Fixes #123`).
4. **Review**: Maintainers will review your code. Be open to feedback!

---

Happy coding! 🚀

