Thanks for your interest in contributing to Seshio! This guide will help you get started with contributing code, documentation, or ideas to make Seshio better.
- Be respectful and inclusive
- Welcome newcomers and help them get started
- Focus on constructive feedback
- Assume good intentions
git clone https://github.com/your-username/seshio.git
cd seshioFollow the setup guide in docs/setup.md to get your local environment running.
git checkout -b feature/your-feature-nameCheck the issue tracker for tasks labeled good first issue or help wanted. Comment on the issue to let others know you're working on it.
- Follow the coding standards below
- Write tests for new functionality
- Update documentation as needed
- Keep commits focused and atomic
# Backend tests
cd backend && pytest --cov
# Frontend tests
cd frontend && npm test
# Linting
cd backend && black . && ruff check .
cd frontend && npm run lintSee docs/testing.md for comprehensive testing guidelines.
We use Conventional Commits:
git commit -m "feat: add notebook search functionality"Commit types:
feat:- New featurefix:- Bug fixdocs:- Documentation changesstyle:- Code style changes (formatting, etc.)refactor:- Code refactoringtest:- Adding or updating testschore:- Maintenance tasks
git push origin feature/your-feature-nameCreate a PR on GitHub with:
- Clear title describing the change
- Description of what changed and why
- Reference to related issues (e.g., "Closes #123")
- Screenshots for UI changes
Before submitting your PR:
- Code follows project style guidelines
- All tests pass locally
- New tests added for new functionality
- Documentation updated if needed
- No merge conflicts with main branch
- Commit messages follow conventional commits format
## Description
Brief description of changes
## Type of Change
- [ ] Bug fix
- [ ] New feature
- [ ] Breaking change
- [ ] Documentation update
## Related Issues
Closes #(issue number)
## Testing
Describe how you tested your changes
## Screenshots (if applicable)
Add screenshots for UI changesFollow PEP 8 with these tools:
- Black for formatting (line length: 100)
- Ruff for linting
- mypy for type checking
Write clear, type-hinted code with docstrings:
async def get_notebook(notebook_id: str) -> Notebook | None:
"""Get notebook by ID.
Args:
notebook_id: UUID of the notebook
Returns:
Notebook if found, None otherwise
"""
async with get_db() as db:
result = await db.execute(
select(Notebook).where(Notebook.id == notebook_id)
)
return result.scalar_one_or_none()Use TypeScript for all files with these tools:
- Prettier for formatting
- ESLint for linting
Write functional components with clear interfaces:
interface NotebookCardProps {
notebook: Notebook;
onSelect: (id: string) => void;
}
export function NotebookCard({ notebook, onSelect }: NotebookCardProps) {
return (
<div onClick={() => onSelect(notebook.id)}>
<h3>{notebook.name}</h3>
</div>
);
}Write tests for all new functionality. See docs/testing.md for comprehensive guidelines.
def test_create_notebook():
"""Test notebook creation"""
notebook = create_notebook(user_id="123", name="Test")
assert notebook.name == "Test"test('renders notebook name', () => {
render(<NotebookCard notebook={mockNotebook} onSelect={jest.fn()} />);
expect(screen.getByText('Test Notebook')).toBeInTheDocument();
});Aim for >75% code coverage on new code.
- Add docstrings to Python functions
- Add JSDoc comments to TypeScript functions
- Document complex algorithms
- Explain non-obvious code
Update relevant docs when making changes:
- docs/tasks.md - Implementation progress
- docs/CHANGELOG.md - Notable changes
- Automated Checks: CI runs tests and linters
- Code Review: Maintainer reviews code
- Feedback: Address review comments
- Approval: Maintainer approves PR
- Merge: PR is merged to main branch
We look for:
- Code quality and style
- Test coverage
- Documentation completeness
- Performance considerations
- Security implications
Include:
- Clear description of the bug
- Steps to reproduce
- Expected vs actual behavior
- Environment details (OS, browser, versions)
- Screenshots or error messages
Include:
- Clear description of the feature
- Use case and motivation
- Proposed implementation (optional)
- Alternatives considered
- Check docs/setup.md for setup help
- Check docs/testing.md for testing help
- Check docs/tasks.md for implementation status
- Open a discussion on GitHub
By contributing, you agree that your contributions will be licensed under the MIT License.
Thanks for contributing to Seshio! Your work helps make learning better for everyone.