diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..a165e84 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,102 @@ +# Contributing to Pokemon JS + +First off, thank you for considering contributing to Pokemon JS! It's people like you that make Pokemon JS such a great tool. + +## How Can I Contribute? + +### Reporting Bugs + +Before creating bug reports, please check the issue list as you might find out that you don't need to create one. When you are creating a bug report, please include as many details as possible: + +- Use a clear and descriptive title +- Describe the exact steps which reproduce the problem +- Provide specific examples to demonstrate the steps +- Describe the behavior you observed after following the steps +- Explain which behavior you expected to see instead and why +- Include screenshots if possible + +### Suggesting Enhancements + +Enhancement suggestions are tracked as GitHub issues. When creating an enhancement suggestion, please include: + +- Use a clear and descriptive title +- Provide a step-by-step description of the suggested enhancement +- Provide specific examples to demonstrate the steps +- Describe the current behavior and explain which behavior you expected to see instead + +### Pull Requests + +- Fill in the required template +- Do not include issue numbers in the PR title +- Include screenshots and animated GIFs in your pull request whenever possible +- Follow the TypeScript and React styleguides +- Include thoughtfully-worded, well-structured tests +- Document new code +- End all files with a newline + +## Styleguides + +### Git Commit Messages + +- Use the present tense ("Add feature" not "Added feature") +- Use the imperative mood ("Move cursor to..." not "Moves cursor to...") +- Limit the first line to 72 characters or less +- Reference issues and pull requests liberally after the first line + +### TypeScript Styleguide + +- Use 2 spaces for indentation +- Use semicolons +- Use `const` and `let` instead of `var` +- Use meaningful variable names +- Use TypeScript interfaces for type definitions +- Use proper type annotations + +### React Styleguide + +- Use functional components with hooks +- Use proper prop types +- Keep components small and focused +- Use meaningful component names +- Follow the container/presenter pattern when appropriate + +## Development Process + +1. Fork the repo +2. Create a new branch (`git checkout -b feature/amazing-feature`) +3. Make your changes +4. Commit your changes (`git commit -m 'Add some amazing feature'`) +5. Push to the branch (`git push origin feature/amazing-feature`) +6. Open a Pull Request + +## Getting Started with Development + +1. Install dependencies: + +```bash +yarn install +``` + +2. Start the development server: + +```bash +yarn start +``` + +3. Run tests: + +```bash +yarn test +``` + +## Project Structure + +- `/src/components`: React components +- `/src/maps`: Game map data +- `/src/state`: Redux store and state management +- `/src/assets`: Game assets (sprites, music, etc.) +- `/src/styles`: Global styles + +## Questions? + +Feel free to open an issue for any questions you might have about contributing.