Thank you for your interest in contributing to ClimateVision! This document provides guidelines for contributing to the project.
We are committed to providing a welcoming and inclusive environment. Please be respectful and constructive in all interactions.
- Check if the bug has already been reported in Issues
- If not, create a new issue with:
- Clear, descriptive title
- Steps to reproduce
- Expected vs actual behavior
- System information (OS, Python version, etc.)
- Screenshots if applicable
- Check Discussions for similar ideas
- Create a new discussion or issue describing:
- The problem you're trying to solve
- Your proposed solution
- Alternative approaches considered
- Potential impact on users
Look for issues labeled good first issue — these are specifically chosen for newcomers.
Recommended first issues (ready to pick up):
| Issue | What You'll Learn | Time Estimate |
|---|---|---|
| #9: Add frontend unit tests | Vitest, React Testing Library, Vite | 2–4 hours |
| #13: Add Docker Compose | Docker, multi-service orchestration | 3–6 hours |
How to claim an issue:
- Read the issue description and acceptance criteria
- Comment "I'd like to work on this" — a maintainer will assign you
- Fork the repo and create a branch:
git checkout -b feature/issue-9-frontend-tests - Open a draft PR within 48 hours (even if incomplete) so we can give early feedback
Need help? Tag @Climate-Vision/maintainers in the issue or open a Discussion.
Ready for something meatier? These issues close critical gaps in our production pipeline:
| Issue | Area | Skills You'll Build |
|---|---|---|
| #10: Alert delivery worker | Backend | FastAPI BackgroundTasks, SMTP, webhooks |
| #11: WebSocket real-time updates | Full-stack | FastAPI WebSockets, React hooks, graceful degradation |
| #12: ONNX Runtime inference | MLOps | ONNX Runtime, PyTorch export, latency benchmarking |
| #14: Carbon analytics API | Analytics | Feature flags, API schema design, geospatial math |
-
Fork the repository
# Click "Fork" on GitHub, then: git clone https://github.com/YOUR_USERNAME/ClimateVision.git cd ClimateVision
-
Create a branch
git checkout -b feature/your-feature-name
-
Set up development environment
python -m venv venv source venv/bin/activate pip install -r requirements.txt pip install -e . pip install -r requirements-dev.txt
-
Make your changes
- Write clean, documented code
- Follow the existing code style
- Add tests for new functionality
- Update documentation
-
Run tests
# Run all tests pytest tests/ # Check code style black src/ flake8 src/ mypy src/
-
Commit your changes
git add . git commit -m "Add: brief description of changes"
Use these prefixes:
Add:New feature or fileFix:Bug fixUpdate:Modify existing featureRefactor:Code restructuringDocs:Documentation changesTest:Add or modify tests
-
Push and create Pull Request
git push origin feature/your-feature-name
Then open a PR on GitHub with:
- Clear description of changes
- Related issue numbers
- Screenshots/examples if applicable
- Keep PRs focused on a single feature/fix
- Ensure all tests pass
- Update documentation if needed
- Respond to review feedback promptly
- Squash commits if requested
We follow PEP 8 with these specifics:
# Use 4 spaces for indentation
def example_function(param1: str, param2: int) -> bool:
"""
Brief description.
Args:
param1: Description of param1
param2: Description of param2
Returns:
Description of return value
"""
# Code here
pass
# Type hints for all functions
def process_data(data: np.ndarray) -> Dict[str, float]:
pass
# Docstrings for all classes and public methods
class ForestDetector:
"""High-level interface for forest detection."""
def __init__(self, model_path: str):
"""Initialize detector with model."""
passsrc/climatevision/
├── module/
│ ├── __init__.py # Public API exports
│ ├── core.py # Main functionality
│ ├── utils.py # Helper functions
│ └── constants.py # Constants
# Standard library
import os
from pathlib import Path
# Third party
import numpy as np
import torch
# Local
from climatevision.data import loader
from climatevision.models.unet import UNetimport pytest
from climatevision.data.loader import load_sentinel2_image
def test_load_sentinel2_image():
"""Test loading Sentinel-2 imagery."""
image = load_sentinel2_image(
coordinates=(-3.4653, -62.2159, -3.0653, -61.8159),
date_range=("2024-01-01", "2024-01-31"),
cloud_coverage_max=20
)
assert image.shape[0] == 4 # 4 bands
assert image.shape[1:] == (256, 256) # Default size
assert len(image.bands) == 4# All tests
pytest
# Specific test file
pytest tests/test_loader.py
# With coverage
pytest --cov=climatevision tests/
# Verbose output
pytest -vWe use Google-style docstrings:
def predict(self, image: SatelliteImage, threshold: float = 0.5) -> PredictionResult:
"""
Predict forest areas in satellite image.
Args:
image: SatelliteImage object containing the data
threshold: Classification threshold (0-1). Higher values require
more confidence to classify as forest.
Returns:
PredictionResult object containing mask, probabilities, and statistics
Raises:
ValueError: If threshold is not between 0 and 1
Example:
>>> detector = ForestDetector(model_path="model.pth")
>>> result = detector.predict(image, threshold=0.6)
>>> stats = result.get_statistics()
"""
pass- Update
docs/folder for major features - Create Jupyter notebooks for tutorials
- Add examples to docstrings
- Update README if user-facing changes
We welcome contributions in these areas:
- Improve U-Net architecture
- Implement new segmentation models
- Add transfer learning from pretrained models
- Optimize hyperparameters
- Sentinel Hub API integration
- Google Earth Engine integration
- Data augmentation techniques
- Distributed processing
- Carbon estimation models
- Uncertainty quantification
- Validation pipelines
- Impact reporting
- FastAPI endpoints
- Model serving optimization
- Docker deployment
- Monitoring and logging
- GitHub Discussions: General questions, ideas, showcases
- Discord: Real-time chat and collaboration
- Monthly Community Calls: Demo new features and discuss roadmap
Contributors will be:
- Listed in README
- Credited in release notes
- Invited to co-author academic papers using ClimateVision
- Given speaking opportunities at conferences
- Check Documentation
- Search GitHub Discussions
- Ask in Discord
- Email: contribute@climatevision.org
Thank you for helping protect the world's forests! 🌍🌲