Repository navigation
CONTRIBUTING
We love to receive contributions from the community and are thrilled that you're interested in making this project better! 🚀✨
Join our Discord server for discussions, support, and to connect with other contributors: https://discord.gg/ewHtFk9G 💬✨
🍔 The top contributor gets a meal from the admin at McDonald's! 🍟🥤
But that's not all — the 🌟 top contributor will also earn a spot as one of the 🔥 Super 5 Core Members for PersonalLearningPro. This is your chance to shape the future of this product, have a direct say in key decisions, and be recognized as a core part of the team. 👑✨
How to become the top contributor:
- 📝 Submit high-quality pull requests
- 🐞 Fix bugs and resolve issues
- ✨ Add meaningful new features
- 🤝 Help other contributors and review PRs
- 📖 Improve documentation and testing
🎉 Contribute, rise to the top, enjoy a burger, and join the Super 5! 🚀🍔
The fastest way to get a development environment running — no Node.js install required.
-
📦 Fork and clone the repository:
git clone https://github.com/your-username/PersonalLearningPro.git cd PersonalLearningPro -
⚙️ Set up environment variables:
cp .env.example .env
Edit
.envwith your credentials. All variables are optional — see README.md for details. -
🏗️ Build and run:
docker compose build docker compose up
-
🌐 Open http://localhost:5001 in your browser.
🔄 Source files are bind-mounted, so your edits are reflected immediately via hot reload — no rebuild needed for code changes.
Requires Node.js v18+ and npm.
-
📦 Fork and clone the repository:
git clone https://github.com/your-username/PersonalLearningPro.git cd PersonalLearningPro -
📦 Install dependencies:
npm install
-
⚙️ Set up environment variables:
cp .env.example .env
Edit
.envwith your credentials (all optional). -
🚀 Start the development server:
npm run dev
💡 Pro Tip: Want to test with a full environment immediately? Run
npx tsx server/scripts/seed-pilot.tsto seed a complete "Pilot School" with an admin user, classes, and tests.
- 🌐 Open http://localhost:5001 in your browser. Both the frontend and API are served from the same port.
📖 For a more detailed manual setup guide, see LOCAL_SETUP.md.
We require all contributors to sign a Contributor License Agreement before their first PR can be merged. 📝 When you open a PR, the CLA Assistant bot will comment with instructions. Simply reply with:
I have read the CLA Document and I hereby sign the CLA
You only need to sign once — it applies to all future contributions. Read the full CLA here. 📜
-
🌿 Create a new branch for your feature or bug fix:
git checkout -b feature/your-feature-name
- 🛠️ Make your changes.
-
🧪 Run TypeScript checks before committing:
npm run check
- 📝 Commit your changes with a descriptive message.
-
🚀 Push your changes to your fork:
git push origin feature/your-feature-name
-
🔗 Open a pull request to the
mainbranch of the original repository.
If you are using an AI coding agent (like Gemini CLI, Cursor, or Aider) to contribute to this project: 🧠🤖
-
📖 Read
AGENTS.mdandCLAUDE.md: Both live in the root directory and are tracked in git. They act as a "README for agents" — environment tips, testing instructions, coding conventions, and skill routing. 📜✨ -
🔐 Agent state stays local:
.agent/,.agents/,.claude/and.kiroare listed in.gitignoreand are not tracked. They hold per-developer assistant configuration (agent definitions, commands, hooks, rules, skills, and machine-specificsettings.local.jsonfiles), so their contents differ from machine to machine and are not shared through the repository. Set yours up however your tooling expects. -
📋 Shared context belongs in tracked files: anything other contributors need to see goes in
AGENTS.md,CLAUDE.md,docs/, orTODOS.md— never in an ignored agent directory, where a fresh clone will not have it. 🛡️✨
- 📦 Modular Server — Express serves the API via domain-driven routers (analytics, billing, chat, ai, etc.) and the Vite-powered React frontend on port 5001 🖥️
- 💾 Hybrid storage — PostgreSQL (relational), Redis/BullMQ (queues), MongoDB (legacy), and Cassandra (chat) 📊
- 📱 Mobile app — React Native + Expo with full offline support and push notifications 📲
- 🔥 Firebase (optional) — Used for legacy auth compatibility; the platform primarily uses local PostgreSQL auth 🔐
- 🤖 AI Engine — Powered by Google Gemini 2.0 Flash with OpenAI fallback 🧠💡
This project uses ESLint and Prettier for code formatting and linting. Please run these commands before committing:
npm run lint # Check for linting errors
npm run lint:fix # Auto-fix linting errors
npm run format # Format code with Prettier
npm run check # TypeScript type checkingFollow the existing code style in the files you are editing to maintain consistency. 📏✨
If you find a bug, please create an issue on GitHub. 🐞 Include:
- A clear and descriptive title 📝
- Steps to reproduce the bug 🔄
- Any relevant error messages or screenshots 📸
If you have an idea for an enhancement, please create an issue on GitHub. 💡 Include:
- A clear and descriptive title 📝
- A description of the enhancement and the problem it solves 🚀
Thank you for your interest in contributing to this project! 🚀✨🎓