# Contributing to CodeConjurer 🧙‍♂️ Thank you for your interest in contributing to CodeConjurer! This repository is a playground for C++ projects, and we welcome contributions of all kinds—from bug fixes and documentation improvements to entirely new projects. ## 🌟 Ways to Contribute ### 1. Report Bugs Found a bug in any of the projects? Please [open a bug report](../../issues/new?template=bug_report.md) with: - A clear description of the issue - Steps to reproduce - Expected vs. actual behavior - Your environment details (OS, compiler, etc.) ### 2. Suggest Features Have an idea to improve an existing project? [Submit a feature request](../../issues/new?template=feature_request.md) describing: - The feature you'd like to see - Why it would be useful - Any implementation ideas you have ### 3. Propose New Projects Want to add a new C/C++ project to the collection? [Submit a project proposal](../../issues/new?template=new_project_proposal.md) with: - Project name and description - Technical requirements and dependencies - Learning objectives it demonstrates ### 4. Improve Documentation Documentation improvements are always welcome! This includes: - Fixing typos or unclear explanations - Adding examples or tutorials - Improving README files in subprojects ### 5. Submit Code Ready to code? Jump in and help with: - Bug fixes - New features - Code optimization - Test coverage improvements ## 🚀 Getting Started ### Prerequisites Most projects require: - A modern C++ compiler (GCC, Clang, or MSVC) supporting C++17 or later - CMake 3.14+ (for projects using CMake) - Project-specific dependencies (check individual project READMEs) ### Setting Up Your Development Environment 1. **Fork the repository** Click the "Fork" button at the top right of the repository page. 2. **Clone your fork** ```bash git clone https://github.com/YOUR_USERNAME/CodeConjurer.git cd CodeConjurer ``` 3. **Create a feature branch** ```bash git checkout -b feature/your-feature-name ``` 4. **Navigate to the project you want to work on** ```bash cd ProjectName ``` 5. **Build and test** (varies by project—check the project's README) ## 📝 Code Style Guidelines ### C/C++ Code - Follow modern C++ best practices (RAII, smart pointers, etc.) - Use meaningful variable and function names - Keep functions focused and reasonably sized - Add comments for complex logic - Prefer `const` correctness - Use appropriate data structures and algorithms ### General Guidelines - Match the existing code style in the file/project you're modifying - Write self-documenting code where possible - Include error handling for edge cases - Test your changes before submitting ## 📦 Submitting Changes ### Pull Request Process 1. **Update documentation** if your changes require it 2. **Test your changes** thoroughly 3. **Commit with clear messages** ```bash git commit -m "feat: Add XYZ feature to ProjectName" ``` Use conventional commit prefixes: - `feat:` - New features - `fix:` - Bug fixes - `docs:` - Documentation changes - `refactor:` - Code refactoring - `test:` - Test additions/changes - `chore:` - Maintenance tasks 4. **Push to your fork** ```bash git push origin feature/your-feature-name ``` 5. **Open a Pull Request** with: - A clear title describing the change - A detailed description of what you changed and why - Reference to any related issues ### What to Expect - Maintainers will review your PR and may request changes - Be responsive to feedback and questions - Once approved, your PR will be merged! ## 🏷️ Project Labels | Label | Description | |-------|-------------| | `bug` | Something isn't working | | `enhancement` | New feature or improvement | | `new-project` | Proposal for a new project | | `question` | Questions or help requests | | `good first issue` | Good for newcomers | | `help wanted` | Extra attention needed | | `documentation` | Documentation improvements | ## 🎯 Good First Issues New to the project? Look for issues labeled [`good first issue`](../../labels/good%20first%20issue)—these are specifically chosen to be approachable for first-time contributors. ## 💡 Tips for Success - **Start small**: Begin with documentation fixes or small bug fixes to get familiar with the contribution process - **Ask questions**: Open an issue or discussion if you're unsure about something - **Be patient**: Maintainers are often volunteers—give them time to respond - **Have fun**: This is a learning playground! Experiment and enjoy the process ## 🤝 Community - Be respectful and inclusive - Help others learn and grow - Follow our [Code of Conduct](CODE_OF_CONDUCT.md) ## 📫 Getting Help - 📋 [Open an issue](../../issues/new?template=question.md) for questions - 📖 Check individual project READMEs for project-specific help - 💬 Join discussions on existing issues --- Thank you for contributing to CodeConjurer! Every contribution, no matter how small, helps make this project better. ⭐