We love your input! We want to make contributing to pH7Console as easy and transparent as possible, whether it's:
- Reporting a bug
- Discussing the current state of the code
- Submitting a fix
- Proposing new features
- Becoming a maintainer
We use GitHub to host code, track issues and feature requests, and accept pull requests.
- Fork the repository and create your branch from
main - Clone your fork locally
- Install dependencies:
./setup.sh - Create a feature branch:
git checkout -b feature/amazing-feature - Make your changes
- Test your changes thoroughly
- Commit using conventional commits
- Push to your fork and submit a pull request
feature/description- New featuresfix/description- Bug fixesdocs/description- Documentation updatesrefactor/description- Code refactoringtest/description- Adding tests
We use Conventional Commits for clear and structured commit messages:
<type>[optional scope]: <description>
[optional body]
[optional footer(s)]
feat: A new featurefix: A bug fixdocs: Documentation only changesstyle: Changes that don't affect code meaning (formatting, etc.)refactor: Code change that neither fixes a bug nor adds a featureperf: Performance improvementstest: Adding missing testschore: Changes to build process or auxiliary tools
feat(ai): add natural language command translation
fix(terminal): resolve PTY handling on Windows
docs(readme): update installation instructions
perf(models): optimize model loading performanceBackend (Rust):
cd src-tauri
cargo test
cargo test --features ai-tests # AI-specific tests
cargo clippy # Linting
cargo fmt # FormattingFrontend (TypeScript):
npm test # Jest tests
npm run lint # ESLint
npm run type-check # TypeScript checkingIntegration Tests:
npm run test:e2e # End-to-end testsRust Tests:
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_ai_response_generation() {
// Test implementation
}
#[tokio::test]
async fn test_async_function() {
// Async test implementation
}
}TypeScript Tests:
describe('Terminal Component', () => {
test('should render correctly', () => {
// Test implementation
});
});- Use
cargo fmtfor formatting - Follow
cargo clippysuggestions - Write documentation comments for public APIs
- Use meaningful variable names
- Follow Rust naming conventions
- Use Prettier for formatting
- Follow ESLint rules
- Use TypeScript strictly (no
anytypes) - Write JSDoc comments for complex functions
- Use functional components with hooks
- Write self-documenting code
- Add comments for complex logic
- Keep functions small and focused
- Use descriptive commit messages
- Update documentation for new features
pH7Console is privacy-first. When contributing:
- Never add telemetry or data collection
- All AI processing must happen locally
- No external API calls for core functionality
- Encrypt sensitive data storage
- Document privacy implications of changes
- Research model licensing and compatibility
- Add model configuration:
LocalModelInfo {
name: "Model Name".to_string(),
size_mb: 2000,
model_type: ModelType::YourModel,
capabilities: vec![Capability::CodeGeneration],
download_url: "huggingface-repo".to_string(),
performance_tier: PerformanceTier::Fast,
}- Implement model loading logic
- Add comprehensive tests
- Update documentation
- Verify performance on MacBook Air
- Must run locally (no cloud dependencies)
- Size < 5GB for primary models
- Support CPU inference
- Compatible with Candle framework
- Permissive license (Apache, MIT, etc.)
Use the bug report template and include:
- OS and version (macOS 13.0, Windows 11, Ubuntu 22.04)
- Hardware specs (especially for AI model issues)
- Steps to reproduce
- Expected vs actual behavior
- Console logs (if applicable)
- Screenshots (if UI related)
- Describe the problem you're solving
- Explain why this would be useful
- Consider privacy implications
- Think about performance impact
- Suggest implementation approach
- Dark theme first (terminal users prefer dark interfaces)
- Minimize visual clutter (focus on content)
- Keyboard-first interaction (terminal users love keyboards)
- Consistent spacing (use Tailwind spacing scale)
- Accessible colors (proper contrast ratios)
- Use TypeScript interfaces for props
- Follow React best practices
- Keep components focused and reusable
- Use semantic HTML
- Add proper ARIA labels
- VS Code with Rust and TypeScript extensions
- Rust Analyzer for Rust development
- Prettier and ESLint for TypeScript
- Git with conventional commit tools
{
"recommendations": [
"rust-lang.rust-analyzer",
"tauri-apps.tauri-vscode",
"bradlc.vscode-tailwindcss",
"esbenp.prettier-vscode",
"ms-vscode.vscode-typescript-next"
]
}- Rust: Use
///for public APIs - TypeScript: Use JSDoc comments
- Keep examples up to date
- Document complex algorithms
- Update installation instructions if needed
- Add new features to feature list
- Update screenshots if UI changes
- Keep configuration examples current
- Version bump in
Cargo.tomlandpackage.json - Update CHANGELOG.md
- Test on all platforms
- Create release PR
- Tag release after merge
- Build and publish artifacts
- Be respectful and inclusive
- Help newcomers learn
- Focus on constructive feedback
- Celebrate contributions
- 📖 Check existing documentation
- 🔍 Search existing issues
- 💬 Join GitHub discussions
- 📧 Email maintainers for private issues
Contributors are recognized through:
- Git history (your commits are forever!)
- Release notes (major contributions highlighted)
- README credits (significant contributors listed)
- Social media shoutouts for major features
# 1. Fork and clone
git clone https://github.com/yourusername/pH7Console.git
cd pH7Console
# 2. Set up development environment
./setup.sh
# 3. Create feature branch
git checkout -b feature/amazing-feature
# 4. Make changes and test
npm run tauri:dev
cargo test
# 5. Commit and push
git commit -m "feat: add amazing feature"
git push origin feature/amazing-feature
# 6. Create pull requestThank you for contributing to pH7Console! 🚀