A web application to manage, monitor, and analyze the competitive programming progress of students on Codeforces. Built with a modular and scalable architecture using the MERN stack.
-
Displays all enrolled students in a tabular format.
-
Fields: Name, Email, Phone, Codeforces Handle, Current Rating, Max Rating, Last Synced.
-
Options to:
- ➕ Add new student
- ✏️ Edit student details
- 🗑️ Delete student
- 📥 Download student list as CSV
- 🔍 View detailed Codeforces profile
Split into two sections:
-
Filters: 30 / 90 / 365 days
-
Graph of rating over time
-
Table listing contests with:
- Contest name
- Rating change
- Rank
- Unsolved problems (still unsolved today)
-
Filters: 7 / 30 / 90 days
-
Shows:
- Most difficult problem solved
- Total problems solved
- Average problem rating
- Problems solved per day (avg)
- 📊 Bar chart of solved problems by rating bucket
- 🔥 Submission heatmap
- ⚙️ Automatically syncs every day at a configurable time (default: 2 AM)
- Admin can change sync time and frequency (daily, weekly, monthly)
- If a student's Codeforces handle is updated, data is re-fetched instantly
- Each student row shows when data was last synced
-
After every sync:
- Detect students with no submissions in last 7 days
- 🚨 Send automatic reminder email
- Log email sent date, reason, and count per student
- Admin can view email logs in a separate UI
- Option to disable auto-email for specific students
- Theme toggle between Light 🌞 and Dark 🌙 mode
- User-friendly interface with toasts for feedback
| Layer | Tech |
|---|---|
| Frontend | React.js, CSS, Chart.js |
| Backend | Node.js, Express.js |
| Database | MongoDB |
| Authentication | JWT |
| Codeforces Integration | Official CF APIs |
| Nodemailer | |
| Cron Jobs | node-cron |
├── controllers
│ └── codeforcesController.js
├── db
│ ├── student.js
│ ├── codeforcesData.js
│ └── syncConfig.js
| └── inactivityLog.js
| └── user.js
| └── config.js
├── utils
│ └── sendReminderEmail.js
├── job
│ └── startCodeforcesCron.js
├── index.js
git clone https://github.com/yourusername/student-progress-manager.git
cd student-progress-managercd server
npm install
nodemon install
Add "start" : "nodemon index.js"Create a .env file inside the server/ directory with the following variables:
MONGO_URI=your_mongodb_uri
JWT_SECRET=your_jwt_secret
EMAIL_USER=[email protected]
EMAIL_PASS=your_email_password_or_app_passwordStart the backend server:
npm startcd ../client
npm install
npm startThe frontend will start on http://localhost:3000 and connect to the backend at http://localhost:5000 by default.
GET /students?page=1&limit=6- Paginated student listPOST /students- Add studentPUT /students/:id- Update studentDELETE /students/:id- Delete student
GET /sync/:studentId- Manually trigger sync for studentPOST /sync/config- Update sync frequency/timeGET /sync/config- Get current config
GET /inactivity-logs- Paginated logs of reminder emails sent
- 🎥 Video Demo: Link to video demo
- 🔗 GitHub Repo: Link to repo
💡 Tip: All interactions (add, sync, inactivity mail) are demonstrated in the demo video.
- All API calls are handled via Axios, Fetch.
- Realtime updates are handled via
window.location.reload()(basic refresh strategy). - Pagination and filtering handled client-side with backend support.
- Submission heatmap and bar graphs are created using Chart.js.
Priyanka Kumari Final Year, DTU – Fullstack & ML Enthusiast 🔗 LinkedIn | 📧 [email protected]
🧩 Built with care to manage students, encourage practice, and track growth effectively.
