Thank you for your interest in contributing to LearnerVerse! This guide will help you get started.
- Code of Conduct
- Getting Started
- Development Setup
- Making Changes
- Code Style
- Testing
- Pull Request Process
- Issue Guidelines
This project follows the Contributor Covenant Code of Conduct. By participating, you agree to uphold this code.
- Fork the repository on GitHub
- Clone your fork locally:
git clone https://github.com/YOUR_USERNAME/learner-verse.git cd learner-verse - Add the upstream remote:
git remote add upstream https://github.com/GautamVhavle/learner-verse.git
- Set up the development environment:
make setup
- Python 3.12+ with uv
- Node.js 20+ with npm
- PostgreSQL (local or Docker)
cd backend
uv sync
uv run alembic upgrade head
uv run uvicorn app.main:app --reload --port 8000cd frontend
npm install
npm run devSet SINGLE_USER_MODE=true and VITE_SINGLE_USER_MODE=true in your env files to skip Auth0 setup during development. See the README for all available variables.
- Create a branch from
main:git checkout -b feat/your-feature
- Make focused changes. Keep pull requests small and scoped to a single concern.
- Write tests for new functionality.
- Run checks before committing:
make lint && make test
- Commit with a descriptive message following Conventional Commits:
feat: add course export functionality fix: correct enrollment count on hub page docs: update deployment instructions chore: upgrade TanStack Query to v5.62
Use descriptive prefixes:
feat/-- New featuresfix/-- Bug fixesdocs/-- Documentation changeschore/-- Maintenance, dependencies, toolingrefactor/-- Code restructuring without behavior changes
- Formatter/Linter: Ruff
- Line length: 100 characters
- Target: Python 3.12+
- Rules: E, W, F, I (isort), B (bugbear), UP (pyupgrade)
- Run:
cd backend && uv run ruff check . && uv run ruff format .
- Linter: ESLint with TypeScript support
- Formatter: Prettier
- Framework: React 19 with hooks, no class components
- State: TanStack Query for server state, Zustand for client state
- Styling: Tailwind CSS v4 utility classes
- Run:
cd frontend && npm run lint && npx prettier --check src/
- Prefer simple, readable code over clever abstractions
- Use TypeScript strict mode; avoid
any - Keep components small and focused
- Use existing patterns from the codebase as reference
- Do not add dependencies without discussion
cd backend
uv run pytest tests/ -v # all tests
uv run pytest tests/api/ -v # API tests only
uv run pytest tests/services/ -v # service tests onlyTests use SQLite in-memory by default. The test suite includes a safety check to prevent accidental connection to production databases.
cd frontend
npm run test # unit tests (vitest)
npm run test -- --run # single run
npx playwright test # e2e testsmake test # backend + frontend
make test-e2e # playwright- Ensure CI passes. All lint, type-check, and test steps must be green.
- Write a clear PR description explaining what changed and why.
- Link related issues using
Closes #123in the PR body. - Keep the diff small. Large PRs are harder to review and more likely to have issues.
- Respond to review feedback promptly.
- Squash commits if your PR has many small fixup commits.
- Code follows existing patterns and style
- New features have tests
- No unnecessary dependencies added
- Documentation updated if needed (README, env vars, etc.)
- No hardcoded secrets or credentials
- No breaking changes without discussion
Use the bug report template and include:
- Steps to reproduce
- Expected vs actual behavior
- Browser/OS/environment details
- Screenshots or error logs if applicable
Use the feature request template and include:
- Clear description of the feature
- Use case and motivation
- Any alternative approaches considered
Look for issues labeled good first issue if you are new to the project.
Thank you for helping make LearnerVerse better!