ProTrack is a web application designed to track and visualize the competitive programming progress of students using data fetched from the Codeforces API. It provides administrators with an intuitive interface to manage student records, monitor contest performance, analyze problem-solving trends, and automate inactivity reminders via email.
-
Student Table View
-
List all enrolled students with:
- Name, Email, Phone Number
- Codeforces Handle, Current Rating, Max Rating
-
Actions per row:
- Add, Edit, Delete student
- Download entire dataset as CSV
- View detailed profile (opens Student Profile View)
-
Display last data-sync timestamp for each student
-
-
Student Profile View
-
Contest History
-
Filter by: last 30 / 90 / 365 days
-
Rating trend graph
-
List of contests including:
- Rating change
- Rank
- Problems unsolved by the student (to date)
-
-
Problem Solving Data
-
Filter by: last 7 / 30 / 90 days
-
Metrics:
- Most difficult problem solved (rating)
- Total problems solved
- Average problem rating
- Average problems per day
-
Bar chart of solves by rating bucket
-
Submission heat map (calendar view)
-
-
-
Codeforces Data Sync
- Nightly cron job (default: 2 AM) to fetch and update all students' Codeforces data
- Configurable schedule and frequency
- Real-time fetch if a student's handle changes in the main table
-
Inactivity Detection & Reminders
- Backend enqueues sendReminder jobs to the BullMQ “reminder” queue (Redis) immediately after each sync
- Email-service’s BullMQ Worker pulls sendReminder jobs from Redis and sends templated reminder emails via your transporter
- Worker, on successful send, calls the backend API to increment that student’s reminderCount field
- Option to disable reminders on a per-student basis
- Cron Schedule: When sync time is filled by user, it is scheduled to sync the overall data of the student by the help of cronJob
- Real-time sync: When a student’s Codeforces handle is updated via the UI, data is fetched immediately regardless of cron.
A standard cron expression consists of the following fields:
| Field | Allowed Values |
|---|---|
| Second | 0-59 |
| Minute | 0-59 |
| Hour | 0-23 |
| Day of Month | 1-31 |
| Month | 1-12 or names (JAN to DEC) |
| Day of Week | 0-7 (0 or 7 is Sunday) or names (SUN to SAT) |
Note: Named values are case-insensitive.
| Symbol | Description | Example |
|---|---|---|
* |
Asterisk: Represents any value | * * * * * – every minute |
1-3,5 |
Ranges: Specifies a range or list | 1-3,5 – 1, 2, 3, and 5 |
*/2 |
Steps: Repeats at regular intervals | */2 – every 2 units |
- Cron Expression: 0 */10 9-17 * * MON-FRI
- Human-Readable form: Runs every 10 minutes between 9:00 AM and 5:59 PM, Monday through Friday, at 0 seconds past the minute.
- You can get all the information about Codeforces data like data of user, contests or problems along with Methods and Return Objects from Codeforces API
- Navigate to Students to add or manage records.
- Click on a student row to view their Profile.
- Use the filter dropdowns in Contest History and Problem Data to adjust time ranges.
- Toggle email reminders in the student profile to enable/disable automated emails.
- Download the full student list as CSV using the Export button.