Contribute to UoMMods
UoMMods is an open-source course management system built by University of Manchester students, for students. Join our community to help improve course planning and academic optimization for everyone.
System Requirements
- Node.js v18+ (LTS recommended)
- npm v9+ (comes with Node.js)
- Python v3.8+ (for data scraping)
- Git for version control
- Code editor (VS Code recommended)
Technical Knowledge
- TypeScript/JavaScript (React patterns)
- Next.js 15 (App Router)
- Tailwind CSS (utility-first styling)
- Python (for scraping scripts)
- Git workflows (branching, PRs)
Setup Instructions
- Clone the repository:
git clone https://github.com/b1-ing/uommods cd uommods
- Set up Python environment (for scraping scripts):
python -m venv .venv .venv\Scripts\activate # Windows source .venv/bin/activate # Unix/macOS pip install -r requirements.txt
- Set up Next.js application:
cd uommods npm install
- Configure environment variables:
cp .env.template .env.local openssl rand -base64 60 # Generate SESSION_PASSWORD
Update
.env.local
with the generated session password and any other required values. - Start development server:
npm run dev
Visit http://localhost:3000 to see the application running locally.
Frontend Development
- Improve React components with TypeScript
- Enhance UI/UX using Tailwind CSS and Radix UI
- Add interactive features and visualizations
- Optimize performance and accessibility
- Fix bugs and improve code quality
Data & Backend
- Improve Python web scraping scripts
- Optimize Supabase database queries
- Add new data sources and processing
- Enhance API endpoints and data sync
- Work on authentication and session management
University Data
- Update course information and prerequisites
- Improve grade distribution accuracy
- Add new academic year data
- Enhance module search and filtering
- Validate scraped data accuracy
Documentation & Testing
- Improve developer documentation
- Write user guides and tutorials
- Add unit and integration tests
- Create example workflows
- Document API endpoints
TypeScript/React Standards
- ✅ Use strict TypeScript - avoid
any
types - ✅ Prefer functional components with React hooks
- ✅ Use proper prop typing with interfaces
- ✅ Follow React patterns - useState, useEffect, custom hooks
- ✅ Keep components small and focused
- ✅ Use Radix UI components for consistency
Styling & UI Guidelines
- ✅ Use Tailwind CSS utility classes
- ✅ Follow mobile-first responsive design
- ✅ Ensure accessibility (ARIA labels, keyboard nav)
- ✅ Maintain consistent spacing and typography
- ✅ Test on multiple screen sizes
- ✅ Use semantic HTML elements
Python Standards
- ✅ Follow PEP 8 style guidelines
- ✅ Use type hints for function parameters
- ✅ Add docstrings to functions and classes
- ✅ Handle errors gracefully with try/except
- ✅ Use virtual environments for dependencies
- ✅ Validate scraped data before processing
Git & Development
- ✅ Use conventional commits (feat:, fix:, docs:)
- ✅ Create descriptive branch names
- ✅ Run linting before committing
- ✅ Test locally before pushing
- ✅ Write clear PR descriptions
- ✅ Link PRs to relevant issues
Quality Checklist
Before submitting your PR, ensure you've completed these steps:
npm run build
npm run lint
- Find or create an issue:
Browse existing issues or create a new one. For major changes, discuss in GitHub Discussions first.
- Fork and create a branch:
git checkout -b feat/course-planner-export # Use prefixes: feat/, fix/, docs/, refactor/
- Make changes with clear commits:
git add . git commit -m "feat(planner): add CSV export functionality" # Follow conventional commits format: # type(scope): description
- Test your changes:
npm run lint # Check for linting issues npm run build # Ensure build succeeds # Test manually in browser
- Push and open a Pull Request:
git push origin feat/course-planner-export
Include screenshots/GIFs for UI changes, describe what you tested, and reference the issue with "Fixes #123" to auto-close on merge.
- Respond to review feedback:
Address reviewer comments, make requested changes, and be respectful in discussions. We'll merge once all checks pass!
⚠️ Important Security Rules
- • Never commit real student data - use anonymized test data only
- • Don't expose API keys - use environment variables
- • Handle authentication securely - follow established patterns
- • Validate all user inputs - prevent injection attacks
- • Respect University policies - follow data usage guidelines
Data Privacy
- • Use synthetic data for development
- • Anonymize any real course data
- • Follow GDPR principles
- • Document data usage clearly
Authentication
- • Use University of Manchester SSO
- • Implement proper session management
- • Validate user permissions
- • Log security-relevant events
UoMMods is built by University of Manchester students for the benefit of the entire student community. We welcome contributors of all skill levels and backgrounds.
Getting Help
- • Check existing documentation first
- • Search closed issues for similar problems
- • Ask questions in GitHub Discussions
- • Tag maintainers for urgent issues
Code of Conduct
- • Be respectful and inclusive
- • Provide constructive feedback
- • Help newcomers learn
- • Follow University community standards
Ready to contribute to UoMMods?
Whether you're fixing a small bug, adding a new feature, or improving documentation, every contribution helps make course planning better for University of Manchester students.
View Open IssuesBuilt with ❤️ by University of Manchester students, for students. Thanks for helping make UoMMods better for everyone.