Thank you for your interest in contributing to Steno! This guide will help you get started.
- macOS (required for development and testing)
- Python 3.8+
- Node.js 18+
- Git
-
Fork and clone the repository
git clone https://github.com/your-username/stenoai.git cd stenoai -
Set up Python environment
python3 -m venv venv source venv/bin/activate pip install -r requirements.txt pip install -e .
-
Install system dependencies
# Install Ollama brew install ollama ollama serve & ollama pull gemma4:e2b-it-qat # Install ffmpeg brew install ffmpeg
-
Set up Electron app
cd app npm install npm start -
Test the setup
# Test CLI python simple_recorder.py --help # Test app launch cd app && npm start
-
Create a feature branch
git checkout -b feature/your-feature-name
-
Make your changes
- Follow existing code style and patterns
- Test your changes locally
- Update documentation if needed
-
Test your changes
# Test Python code python simple_recorder.py --help python -c "import src.audio_recorder, src.transcriber, src.summarizer" # Test Electron app cd app && npm start
-
Commit and push
git add . git commit -m "Add your descriptive commit message" git push origin feature/your-feature-name
-
Create a Pull Request
- Use the PR template to describe your changes
- Focus on clear description and testing details
- Be responsive to review feedback
Python:
- Follow PEP 8 guidelines
- Use type hints where appropriate
- Write docstrings for functions and classes
- Use
rufffor linting:ruff check .
JavaScript:
- Use semicolons
- Use const/let instead of var
- Follow existing patterns in the codebase
Before submitting a PR, please ensure:
- CLI functionality works:
python simple_recorder.py --help - Electron app starts:
cd app && npm start - No breaking changes to existing functionality
This project uses manual semantic versioning:
- Maintainers handle version bumps and releases
- Contributors focus on code quality, not versioning
- Releases are created manually using
npm versioncommands
When filing a bug report, please include:
- macOS version
- Steps to reproduce
- Expected vs actual behavior
- Error messages or logs
- Screenshots if applicable
For feature requests, please:
- Describe the problem you're trying to solve
- Explain your proposed solution
- Consider if this fits the project's scope and vision
We welcome contributions for:
- Bug fixes
- Performance improvements
- New features (please discuss in an issue first)
- Documentation improvements
- Test coverage improvements
Help improve our documentation:
- Fix typos or unclear instructions
- Add examples or clarifications
- Update outdated information
stenoai/
├── app/ # Electron desktop app
│ ├── main.js # Main process
│ ├── preload.js # Context-isolated IPC bridge
│ ├── renderer/ # React + Vite renderer (TypeScript)
│ └── package.json # App dependencies
├── src/ # Python backend
│ ├── audio_recorder.py # Audio recording
│ ├── transcriber.py # Whisper integration
│ ├── summarizer.py # Ollama/LLM processing
│ └── models.py # Data models
├── simple_recorder.py # CLI interface
├── requirements.txt # Python dependencies
└── CLAUDE.md # Development instructions
- Check existing issues
- Create a new issue for bugs or feature requests
- Join discussions in the repository
By contributing to Steno, you agree to our Contributor License Agreement (CLA).
What this means:
- You retain ownership of your contributions
- You grant us broad, irrevocable rights to use, modify, and relicense your contributions
- This allows us to offer commercial licenses while keeping the project free for personal use
How it works:
- When you submit your first pull request, CLA Assistant will prompt you to sign
- Simply comment "I have read the CLA Document and I hereby sign the CLA" on the PR
- This is a one-time process - future contributions are automatically covered
The project is licensed under the MIT License. See LICENSE for details.
Contributors will be recognized in our releases and README. Thank you for helping make Steno better!