Thank you for your interest in contributing to Terramedic! This project aims to provide resources and opportunities for climate action, and we welcome contributions from everyone who shares this mission.
- Code of Conduct
- How Can I Contribute?
- Development Setup
- Coding Guidelines
- Commit Message Guidelines
- Pull Request Process
- Issue Guidelines
This project adheres to a Code of Conduct that all contributors are expected to follow. Please read CODE_OF_CONDUCT.md before contributing.
- Check if the bug has already been reported in Issues
- If not, create a new issue using the bug report template
- Include as much detail as possible: steps to reproduce, expected vs actual behavior, screenshots, etc.
- Check if the enhancement has already been suggested
- Create a new issue using the feature request template
- Clearly describe the feature and its benefits
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Make your changes following our coding guidelines
- Test your changes thoroughly
- Commit using conventional commit messages
- Push to your fork
- Open a Pull Request
- Node.js 20.x or higher
- Yarn package manager
- Git
# Clone your fork
git clone https://github.com/YOUR_USERNAME/terramedic.git
cd terramedic/terramedic
# Or clone the main repo
git clone https://github.com/terramediccorps/terramedic.git
cd terramedic/terramedic
# Install dependencies
yarn install
# Start development server
yarn devyarn dev- Start development serveryarn build- Build for productionyarn preview- Preview production buildyarn test- Run all tests (unit + e2e)yarn test:unit- Run unit testsyarn test:e2e- Run e2e testsyarn lint- Run ESLint and Prettier checksyarn format- Format code with Prettieryarn storybook- Launch Storybook for component development
- We use Prettier for code formatting (automatically enforced)
- We use ESLint for code quality
- Run
yarn formatbefore committing - Run
yarn lintto check for issues
- Use TypeScript for type safety where beneficial
- Avoid using
anytype unless absolutely necessary - Add JSDoc comments for complex functions
- Use Svelte 5 syntax and features
- Keep components focused and reusable
- Use props for component configuration
- Follow existing component patterns in
/src/lib/components
- Use Tailwind CSS utility classes
- Follow the existing design system
- Ensure responsive design (mobile-first)
- Test on different screen sizes
- Use semantic HTML
- Include ARIA labels where needed
- Ensure keyboard navigation works
- Test with screen readers when possible
- Write unit tests for new components using Vitest
- Write e2e tests for critical user flows using Playwright
- Ensure all tests pass before submitting PR
- Aim for meaningful test coverage
We follow Conventional Commits specification:
<type>(<scope>): <subject>
<body>
<footer>
feat: New featurefix: Bug fixdocs: Documentation changesstyle: Code style changes (formatting, semicolons, etc.)refactor: Code refactoringtest: Adding or updating testschore: Maintenance tasks, dependencies
feat(search): add filter functionality for organizations
Implemented client-side filtering for volunteer opportunities
with support for keyword search and category filters.
Closes #123
fix(navigation): correct mobile menu behavior
The mobile navigation was not closing after selecting a link.
Fixed event handler to properly toggle menu state.
- Update Documentation: If you've added features, update the README or relevant docs
- Add Tests: Include tests for new functionality
- Run All Checks: Ensure
yarn lintandyarn testpass - Fill Out Template: Complete the PR template with all relevant information
- Link Issues: Reference any related issues
- Request Review: Tag maintainers if needed
- Address Feedback: Respond to review comments promptly
- Keep Updated: Rebase or merge main if your branch falls behind
Use conventional commit format in PR titles:
feat: add volunteer search functionalityfix: correct mobile navigation bugdocs: update installation instructions
- Search existing issues to avoid duplicates
- Check if it's already fixed in the latest version
- Gather relevant information (browser, OS, steps to reproduce)
Use the appropriate template:
- Bug Report: For reporting bugs
- Feature Request: For suggesting new features
- Clear Title: Descriptive and specific
- Detailed Description: Explain the problem or suggestion thoroughly
- Steps to Reproduce (for bugs): List exact steps
- Expected Behavior: What should happen
- Actual Behavior: What actually happens
- Screenshots: Include if helpful
- Environment: Browser, OS, Node version, etc.
This project welcomes contributions made with AI assistance. If you're using AI tools like GitHub Copilot, Claude, or ChatGPT:
- Review all AI-generated code carefully
- Ensure it follows our coding guidelines
- Test thoroughly
- Feel free to mention AI assistance in PR descriptions (optional)
- See CLAUDE.md for project-specific AI development guidelines
If you have questions about contributing:
- Check existing documentation
- Look through closed issues for similar questions
- Open a new issue with the question label
- Reach out to maintainers
By contributing, you agree that your contributions will be licensed under:
- Code: GNU General Public License v3.0
- Non-code content: Creative Commons Attribution 4.0 International License (CC BY 4.0)
Thank you for contributing to climate action through Terramedic!