Ways to Contribute
- Bug fixes: Fix issues reported in GitHub Issues
- Features: Add new visualization types, UI improvements, or backend capabilities
- Documentation: Improve setup guides, API docs, or authoring references
- Courses: Create new programming courses using the Handhold DSL
- Testing: Write tests for existing functionality
- Performance: Optimize parsing, rendering, or build times
Getting Started
Set up development environment
Follow the Development Setup guide to install dependencies and verify the build.
Create a feature branch
fix/crash-on-empty-lessonfeat/add-stack-visualizationdocs/improve-authoring-guide
Commit with clear messages
Use conventional commit format:Commit types:
feat: New featurefix: Bug fixdocs: Documentation changerefactor: Code refactoring (no behavior change)perf: Performance improvementtest: Add or update testschore: Build system, dependencies, tooling
Pull Request Guidelines
PR Title
Use the same conventional commit format:PR Description
Include:- What changed: Brief summary of the changes
- Why: The motivation or problem being solved
- How: High-level explanation of the approach
- Testing: How you verified the changes work
- Screenshots: If UI changes, include before/after screenshots
Code Review Process
- Maintainers will review your PR within a few days
- Address feedback by pushing new commits
- Once approved, a maintainer will merge your PR
Please be patient and respectful during code review. Maintainers may request changes to ensure quality and consistency.
Code Style
TypeScript/React
- Use TypeScript strict mode (enabled by default)
- Prefer functional components and hooks
- Use
readonlyfor props and immutable data - Avoid
anytypes; useunknownor explicit types - Run Prettier before committing (not yet configured, but recommended)
Rust
- Follow Rust standard style (
cargo fmt) - Use descriptive variable names
- Prefer
Result<T, E>over panics for recoverable errors - Document public APIs with
///doc comments
Testing
Currently, Handhold does not have automated tests. Adding tests is a highly valued contribution! Ideas for testing:- Parser tests: Verify markdown parsing produces correct IR
- Trigger tests: Ensure trigger syntax is parsed correctly
- Data layout tests: Validate layout algorithms
- Backend tests: Test Tauri commands in isolation
Documentation
When adding features, update the relevant documentation:- README.md: User-facing setup and installation
- docs/authoring-guide.md: Course authoring reference
- This docs site: Development guides (you’re reading one!)
Creating Courses
To contribute a course:- Write the course as a markdown file using the authoring DSL
- Test it in Handhold to ensure all triggers and visualizations work
- Submit the course as a separate repository or open an issue to discuss inclusion
Reporting Bugs
If you find a bug:- Check if it’s already reported in GitHub Issues
- If not, open a new issue with:
- Title: Short description of the bug
- Description: Steps to reproduce, expected behavior, actual behavior
- Environment: OS, Handhold version, relevant setup details
- Screenshots/logs: If applicable
Requesting Features
To request a feature:- Open a GitHub Issue with the
enhancementlabel - Describe the feature and why it’s useful
- Provide examples or mockups if applicable
License
By contributing to Handhold, you agree that your contributions will be licensed under the AGPL-3.0 license. The AGPL requires that any modifications to Handhold must be open-sourced if the modified version is distributed or run as a network service.Code of Conduct
Be respectful and constructive in all interactions. We aim to foster an inclusive and welcoming community. Specific expectations:- Be patient with questions from newcomers
- Provide constructive feedback during code review
- Respect differing viewpoints and experiences
- Accept responsibility and apologize for mistakes
Contact
For questions or discussions:- GitHub Issues: For bug reports and feature requests
- GitHub Discussions: For general questions and ideas (if enabled)
- Email: Reach out to the maintainer at [email protected]
Recognition
Contributors are recognized in:- GitHub’s contributor graph
- Release notes for significant features
Next Steps
Setup
Set up your development environment
Architecture
Understand the codebase structure
Frontend
Explore the React frontend
Backend
Dive into the Rust backend