A revision-planning web app: users register subjects and topics, and the platform generates a day-by-day study schedule that spreads their topics evenly across however many days they have before an exam.
Note: the plan generation is currently a deterministic scheduler (even distribution of topics across days), not an LLM-based planner — see
generate_planinbackend/app.py.
- Add user & subjects —
POST /adduserstores a user's subjects/topics in Firestore - Generate a revision plan —
POST /generateplantakes an email + number of days, fetches the user's topics, and splits them evenly across the days, saving the result to Firestore - Fetch a user's saved plans —
GET /getplans/<email> - Lookup a user —
GET /getuser/<email>
| Layer | Tools |
|---|---|
| Backend | Flask, Flask-CORS |
| Database | Firebase Firestore (via firebase-admin) |
| Frontend | React (Create React App) |
| Hosting | Backend on Render, frontend on Vercel |
backend/
app.py Flask API: user CRUD + plan generation
frontend/
src/components/
AddUser.js Form to register a user's subjects/topics
GeneratePlan.js Form to request a revision plan
ViewPlans.js Displays saved plans
Unit tests cover the plan-distribution logic (backend/ml/distribute_topics) — no Firebase credentials needed:
cd backend
pip install pytest
pytest tests/ -vTests run automatically on every push via GitHub Actions.
cd backend
pip install -r requirements.txtSet GOOGLE_APPLICATION_CREDENTIALS_JSON in a .env file to the JSON contents of a Firebase service account key (Firebase Console → Project Settings → Service Accounts → Generate new private key). The app reads this from the environment — do not commit the key file itself.
python app.pycd frontend
npm install
npm start