First off — thank you for considering contributing! SchoolSoft+ is a student-built project and every contribution, no matter how small, makes it better for everyone.
- Code of Conduct
- How Can I Contribute?
- Development Setup
- Coding Conventions
- Commit Messages
- Pull Request Process
This project follows the Contributor Covenant Code of Conduct. By participating you agree to abide by its terms. Be kind, constructive, and respectful.
Before creating a bug report, please check existing issues to avoid duplicates.
When filing a bug, include:
- What you expected to happen
- What actually happened
- Steps to reproduce
- Browser / OS
- Any relevant console errors
Use the Bug Report template.
Feature suggestions are welcome! Use the Feature Request template. Describe the problem it solves, not just the solution.
- Fork the repo and create your branch from
main - Follow the coding conventions
- Test your changes locally
- Make sure
npm run buildandnpm run lintpass - Open a PR with a clear description
git clone https://github.com/elias4044/schoolsoftplus.git
cd schoolsoftplus
npm install
cp .env.example .env.local
# Fill in your Firebase + Gemini credentials
npm run devThe dev server starts at http://localhost:3000.
- TypeScript everywhere. No
anyunless absolutely necessary. - Tailwind CSS v4 for styling. Use
oklchcolor values to match the design system.- Background:
oklch(0.10 0 0), cards:oklch(0.13 0 0), primary:oklch(0.62 0.16 263)
- Background:
- Framer Motion for animations. Keep them smooth and purposeful.
- API routes: use fire-and-forget pattern for stats (never
awaitstat calls — they must never block the response). - Components: functional, typed props, no default exports from
lib/files. - File structure: page-level components go in
app/, shared UI incomponents/, reusable logic inlib/.
Use Conventional Commits:
feat: add countdown widget
fix: schedule not loading on mobile
docs: update README setup section
style: fix alignment in sidebar
refactor: extract statsHelper into separate module
chore: bump next to 16.2.3
- Update
README.mdor docs if your change affects them - One feature / fix per PR — keep things focused
- Be responsive to review feedback
- PRs are merged by the maintainer once approved
Thank you for helping make SchoolSoft+ better! 🎉