# Contributing to Me And My Friends (MAMF)
Thank you for your interest in contributing to MAMF! This document provides guidelines for contributing to the project.
## Getting Started
1. Fork the repository
2. Clone your fork: `git clone https://github.com/hffmnnj/me-and-my-friends.git`
3. Create a branch: `git checkout -b feature/your-feature-name`
4. Make your changes
5. Run tests: `cargo test`
6. Run lints: `cargo clippy -- -D warnings`
7. Format code: `cargo fmt`
8. Commit and push your changes
9. Open a pull request
## Development Setup
### Prerequisites
- Rust (stable, 2021 edition)
- SQLite (bundled with rusqlite)
- At least one LLM provider configured (Ollama, OpenAI, etc.)
### Building
```bash
cargo build --release
```
### Running Tests
```bash
cargo test
```
### Running Clippy
```bash
cargo clippy -- -D warnings
```
## Code Style
- Follow existing code patterns in the codebase
- Use `Result<T, Error>` with `thiserror` for custom errors
- Prefer `async fn` over manual futures
- Use `tracing` for logging, not `println!`
- Keep functions small and focused
- Derive `Debug, Clone` on all data types
## Commit Message Format
We follow conventional commits:
```
type(scope): description
[optional body]
[optional footer]
```
### Types
- `feat`: New feature
- `fix`: Bug fix
- `refactor`: Code change that neither fixes a bug nor adds a feature
- `docs`: Documentation changes
- `test`: Adding or updating tests
- `chore`: Maintenance tasks
### Examples
```
feat(tui): add advisor response expansion
fix(providers): handle rate limiting for Groq
docs: update README with installation instructions
```
## Pull Request Process
1. Ensure all tests pass
2. Ensure no clippy warnings
3. Update documentation if needed
4. Link relevant issues in the PR description
5. Request review from maintainers
## Reporting Bugs
- Use GitHub Issues
- Include steps to reproduce
- Include expected vs actual behavior
- Include system information (OS, Rust version)
- Include relevant logs if applicable
## Feature Requests
- Open a GitHub Issue with the `enhancement` label
- Describe the use case
- Explain why this would benefit the project
## Questions?
Feel free to open a Discussion on GitHub for any questions about contributing.