Contributing to MultiMind Classroom
Thank you for your interest in contributing to MultiMind Classroom! This guide will help you get started and ensure a smooth collaboration.
How to Contribute
| Contribution type | What to do |
|---|---|
| Bug fix | Open a PR directly (link the issue if one exists) |
| Extending existing features (e.g. adding a new model provider, new TTS engine) | Open a PR directly |
| New feature or architecture change | Start a [GitHub Discussion](https://github.com/THU-MAIC/MultiMind Classroom/discussions) or ask in Discord before opening a PR |
| Design / UI change | Discuss in a GitHub Discussion or Discord first β include mockups or screenshots |
| Refactor-only PR | Not accepted unless a maintainer explicitly requests it |
| Documentation | Open a PR directly |
| Question | Ask in Discord |
Claiming Issues
To avoid duplicate effort, please comment on an issue to claim it before you start working. A maintainer will assign you.
- If no PR or meaningful update (WIP commit, progress comment) appears within 1 day, the issue may be reassigned to someone else.
- If you see an issue already assigned, reach out to the assignee first to coordinate β you may be able to collaborate or split the work.
- If you can no longer work on a claimed issue, please leave a comment so others can pick it up.
Prerequisites
- Node.js >= 20.9.0
- pnpm (latest)
- A copy of
.env.localβ see.env.examplefor reference
Getting Started
# Clone the repository
git clone https://github.com/THU-MAIC/MultiMind Classroom.git
cd MultiMind Classroom
# Install dependencies
pnpm install
# Set up environment variables
cp .env.example .env.local
# Edit .env.local with your API keys
# Start the development server
pnpm dev
Development Workflow
- Fork the repository and create a branch from
main:git checkout -b feat/your-feature main - Branch naming convention:
feat/β new features or enhancementsfix/β bug fixesdocs/β documentation changes
- Make your changes and test locally.
- Run all CI checks before committing (see below).
- Open a Pull Request against
main.
Before You Submit a PR
Run the following checks locally β CI will run them too, but catching issues early saves everyone time:
# 1. Format code
pnpm format
# 2. Lint (with auto-fix)
pnpm lint --fix
# 3. TypeScript type checking
npx tsc --noEmit
If formatting or lint auto-fixes produce changes, include them in your commit.
Local Testing
Before marking a PR as Ready for Review, you must:
- Verify your goal β confirm that the PR achieves what it set out to do (bug is fixed, feature works as expected, etc.)
- Regression test β manually check that existing functionality is not broken by your changes (e.g. navigate key flows, verify related features still work)
- Run CI checks locally (see above)
If you have not completed local verification, keep your PR in Draft status. Only move it to Ready for Review once you are confident it works and does not regress other features.
PR Guidelines
- Every PR must link to an issue β use
Closes #123orFixes #456in the PR description. If no issue exists yet, create one first. PRs without a linked issue will not be reviewed. - Keep PRs focused β one concern per PR; do not mix unrelated changes
- Describe what and why β fill out the PR template
- Include screenshots β for UI changes, show before/after
- Ensure CI passes before requesting review
- All UI text must be internationalized (i18n) β do not hardcode user-facing strings
Commit Message Convention
We follow Conventional Commits:
<type>(<scope>): <short description>
[optional body]
[optional footer]
Types: feat, fix, docs, refactor, test, chore, ci, perf, style
Examples:
feat(tts): add Azure TTS provider
fix(whiteboard): prevent canvas from resetting on window resize
docs: add CONTRIBUTING.md
AI-Assisted PRs π€
PRs built with AI tools (Codex, Claude, Cursor, etc.) are welcome! We just ask for transparency and self-review:
- Mark it β note in the PR title or description that the PR is AI-assisted
- AI-review your own code first β before requesting maintainer review, run an AI code review (e.g. Claude, Codex, Copilot) on your changes and address the findings. This is required for AI-assisted PRs to avoid dumping large amounts of unreviewed generated code on maintainers.
- You are responsible for what you submit β understand the code, not just the prompt.
AI-assisted PRs are held to the same quality standard as any other PR. Community members are also encouraged to leave constructive feedback on any PR β peer review helps everyone improve.
Project Structure
MultiMind Classroom/
βββ app/ # Next.js app router pages and API routes
βββ components/ # React components
βββ lib/ # Shared utilities and core logic
βββ packages/ # Internal packages (mathml2omml, pptxgenjs)
βββ public/ # Static assets
βββ messages/ # i18n translation files
βββ .github/ # Issue templates, PR template, CI workflows
Reporting Bugs
Use the [Bug Report](https://github.com/THU-MAIC/MultiMind Classroom/issues/new?template=bug_report.yml) issue template. Include:
- Steps to reproduce
- Expected vs. actual behavior
- Browser / OS / Node version
- Screenshots or error logs if applicable
Requesting Features
Use the [Feature Request](https://github.com/THU-MAIC/MultiMind Classroom/issues/new?template=feature_request.yml) issue template. For larger features, please open a [Discussion](https://github.com/THU-MAIC/MultiMind Classroom/discussions) first.
Security Vulnerabilities
Please report security vulnerabilities through [GitHub Security Advisories](https://github.com/THU-MAIC/MultiMind Classroom/security/advisories/new). Do not open a public issue for security vulnerabilities.
License
By contributing to MultiMind Classroom, you agree that your contributions will be licensed under the AGPL-3.0 License.