Thank you for your interest in contributing to the RPM IQ Exam project! We welcome contributions from the community and are excited to work with you.
- Code of Conduct
- Getting Started
- Development Setup
- How to Contribute
- Coding Standards
- Testing Guidelines
- Submitting Changes
- Issue Guidelines
- Pull Request Process
- Contributor License Agreement (CLA)
This project and everyone participating in it is governed by our Code of Conduct. By participating, you are expected to uphold this code. Please be respectful, inclusive, and constructive in all interactions.
- Be respectful: Treat everyone with respect and courtesy
- Be inclusive: Welcome people of all backgrounds and experience levels
- Be constructive: Provide helpful feedback and suggestions
- Be professional: Maintain a professional tone in all communications
- Be patient: Remember that everyone has different skill levels and perspectives
- Node.js 18.0 or higher
- npm or yarn package manager
- Git for version control
- A modern code editor (VS Code recommended)
- VS Code Extensions:
- TypeScript and JavaScript Language Features
- ESLint
- Prettier
- Auto Rename Tag
- Bracket Pair Colorizer
-
Fork the repository on GitHub
-
Clone your fork locally:
git clone https://github.com/YOUR_USERNAME/rpm-iq-exam.git cd rpm-iq-exam -
Install dependencies:
npm install
-
Start the development server:
npm run dev
-
Create a new branch for your feature:
git checkout -b feature/your-feature-name
We welcome the following types of contributions:
- 🐛 Bug fixes: Fix existing issues or problems
- ✨ New features: Add new functionality or improvements
- 📚 Documentation: Improve documentation, guides, or examples
- 🧪 Tests: Add or improve test coverage
- 🎨 UI/UX improvements: Enhance user interface and experience
- ♿ Accessibility: Improve accessibility features
- 🌐 Internationalization: Add support for new languages
- ⚡ Performance: Optimize performance and efficiency
- Puzzle Generation: Improve RPM pattern generation algorithms
- UI Components: Create reusable, accessible components
- Assessment Logic: Enhance scoring and analysis features
- Accessibility: Ensure WCAG 2.1 compliance
- Mobile Experience: Optimize for mobile devices
- Testing: Expand test coverage for all components
- Documentation: Improve user and developer documentation
- Use TypeScript for all new code
- Follow functional programming principles when possible
- Use meaningful variable and function names
- Add JSDoc comments for complex functions
- Prefer const over let, avoid var
- Use arrow functions for short functions
- Implement proper error handling
- Use functional components with hooks
- Implement proper prop types with TypeScript interfaces
- Follow the single responsibility principle
- Use custom hooks for reusable logic
- Implement proper state management
- Ensure accessibility (ARIA labels, keyboard navigation)
- Use CSS-in-JS or CSS Modules for component styles
- Follow BEM methodology for CSS class naming
- Ensure responsive design for all screen sizes
- Use semantic HTML elements
- Implement dark mode support where applicable
We use Prettier and ESLint for code formatting and linting:
# Format code
npm run format
# Lint code
npm run lint
# Fix linting issues
npm run lint:fix- Write tests for all new features and bug fixes
- Maintain or improve test coverage
- Include unit tests for utility functions
- Add integration tests for React components
- Write accessibility tests where applicable
# Run all tests
npm run test
# Run tests in watch mode
npm run test:watch
# Generate coverage report
npm run test:coveragedescribe('ComponentName', () => {
it('should render correctly', () => {
// Test implementation
});
it('should handle user interaction', () => {
// Test implementation
});
it('should be accessible', () => {
// Accessibility test
});
});We follow the Conventional Commits specification:
type(scope): description
[optional body]
[optional footer]
Types:
feat: New featurefix: Bug fixdocs: Documentation changesstyle: Code style changes (formatting, etc.)refactor: Code refactoringtest: Adding or updating testschore: Maintenance tasks
Examples:
feat(puzzle): add adaptive difficulty algorithm
fix(ui): resolve mobile layout issues
docs(readme): update installation instructions
test(components): add accessibility tests for PatternDisplay
- Run all tests and ensure they pass
- Check code formatting with Prettier
- Fix any linting issues with ESLint
- Update documentation if necessary
- Test on multiple browsers and devices
- Verify accessibility compliance
- Search existing issues to avoid duplicates
- Check the documentation for solutions
- Test with the latest version of the project
We provide issue templates for:
- 🐛 Bug Reports: Report issues or problems
- ✨ Feature Requests: Suggest new features or improvements
Please include:
- Clear description of the issue
- Steps to reproduce the problem
- Expected vs actual behavior
- Browser and device information
- Screenshots or videos if applicable
- Console errors if any
- Link to related issue (if applicable)
- Clear description of changes made
- Test coverage for new code
- Documentation updates if necessary
- Screenshots for UI changes
- Accessibility review for UI changes
- Automated checks must pass (tests, linting, build)
- Code review by project maintainers
- Manual testing of new features
- Documentation review if applicable
- Final approval and merge
- Code follows project coding standards
- Tests are written and passing
- Documentation is updated
- Changes are tested on multiple browsers
- Accessibility is maintained or improved
- No breaking changes (or properly documented)
By submitting a pull request or contribution, you agree to the following:
You grant the project founder a non-exclusive, irrevocable, worldwide, royalty-free license to use, modify, sublicense, and relicense your contribution, including the right to incorporate it into dual-licensed or commercial versions of the project.
This ensures that the project can grow sustainably while preserving creator rights.
If you are contributing on behalf of a company or organization, please contact us in advance.
- You retain copyright to your contributions
- You grant us rights to use your contribution in the project
- The project can evolve with different licensing models if needed
- Your contribution remains under the project's current license
- Commercial use of the project (including your contributions) is possible
If you have questions about the CLA or need clarification, please:
- Open a discussion on GitHub
- Contact the project maintainers
- Review the LICENSE file for current terms
- 💬 GitHub Discussions: Ask questions and share ideas
- 🐛 Issue Tracker: Report bugs and request features
- 📚 Documentation: Read guides and API references
- 💡 Examples: Check out example implementations
For questions about contributing:
- Create a discussion in the GitHub repository
- Tag maintainers in relevant issues
- Follow the project for updates
All contributors will be recognized in:
- CONTRIBUTORS.md file
- GitHub contributors section
- Release notes for significant contributions
- Project documentation where appropriate
- Code contributors: Listed in contributors file
- Documentation contributors: Credited in documentation
- Issue reporters: Mentioned in fix commits
- Community helpers: Recognized in discussions
- Pick an issue or propose a new feature
- Fork and clone the repository
- Create a feature branch from main
- Develop and test your changes
- Commit with clear messages following conventions
- Push to your fork and create a pull request
- Respond to feedback during code review
- Merge after approval
Use descriptive branch names:
feature/adaptive-difficultyfix/mobile-layout-issuedocs/api-documentationtest/puzzle-generation
We follow Semantic Versioning (SemVer):
- MAJOR: Breaking changes
- MINOR: New features (backward compatible)
- PATCH: Bug fixes (backward compatible)
- Patch releases: As needed for bug fixes
- Minor releases: Monthly for new features
- Major releases: Quarterly for significant changes
Thank you for contributing to RPM IQ Exam! Your contributions help make cognitive assessment more accessible and effective for everyone. 🚀