Thanks for your interest in contributing! This guide covers everything you need to get started.
- Python 3.11+
- uv (fast Python package manager)
- Node.js 20+
- An API key for an OpenAI-compatible LLM provider (OpenAI, NVIDIA, etc.)
-
Clone the repo:
git clone https://github.com/pratik008/SocraticTutor.git cd SocraticTutor -
Backend:
cd backend uv sync cp .env.example .env # then edit with your LLM_API_KEY and JWT_SECRET uv run python seed.py uv run uvicorn app.main:app --reload --port 8000
-
Frontend:
cd frontend cp .env.local.example .env.local npm install npm run dev
The app runs at http://localhost:3000 with API docs at http://localhost:8000/docs.
Open a GitHub issue with:
- Steps to reproduce
- Expected vs. actual behavior
- Browser/OS/Python/Node versions
Open a GitHub issue describing the feature, the problem it solves, and any alternatives you've considered.
- Fork the repo and create a branch from
main:git checkout -b feature/my-change
- Make your changes. Follow the existing code style.
- Test your changes locally (backend + frontend).
- Commit with a clear message describing what and why.
- Open a pull request against
main.
- Keep PRs focused — one logical change per PR.
- Update documentation if your change affects user-facing behavior.
- Add or update tests when possible.
- Ensure
npm run lintpasses for frontend changes. - Describe what you changed and why in the PR description.
SocraticTutor's content lives in the content/ directory. Each course is a folder
containing a course.json manifest and optional enrichment reference knowledge. See
content/README.md for the format specification.
To create a course interactively, use the Course Creator wizard
(course-creator/). To add content manually, create a course.json and run
python seed.py from backend/.
- Python: Follow PEP 8. Use type hints.
- TypeScript/React: Follow the existing patterns. The project uses Next.js App Router with shadcn/ui components.
- Commits: Write clear, concise commit messages. Prefer present tense ("Add feature" not "Added feature").
By contributing, you agree that your contributions will be licensed under the Apache License 2.0.