Student Planning and Academic Management System
This web application allows students at Universidad Pedro Henríquez Ureña (UNPHU) to easily and informedly plan their course selection for upcoming academic terms. With over 200 registered users and planned schedules in the last two academic terms of 2024, this tool has proven its usefulness.
The development of this application was a joint effort between my brother Jorge Lorenzo and me. We implemented the solution using Django and Django Rest Framework for the backend, React and Redux for the frontend, PostgreSQL as the database, and Redis as the caching system.
It's worth noting that the university did not sponsor this project nor intervene in its development. Student and schedule information was obtained through their public API.
At UNPHU, students have a course selection period that lasts approximately one week before the start of the new academic cycle. Each faculty is assigned a specific day for their students to begin their course selection.
The selection is not simultaneous for all; the university organizes students into groups based on their academic index (GPA). Those with the highest GPAs have priority to select their courses and secure spots before students with lower GPAs.
Currently, students can only view available course sections through the student portal,
However, it is limited to showing existing sections for only one course at a time, so if students want to plan their complete course selection, they must manually ensure there are no conflicts between any of the sections of the courses they wish to select. This is an arduous and uncomfortable process that leads many students to not plan their course selection in advance and instead wait until their turn to select.

This portal has limitations:
Students can log in with their institutional account (@unphu.edu.do). Upon registration, the application obtains information such as major, GPA, curriculum, and class year through calls to UNPHU's API. Additionally, user grades are loaded to generate statistics about courses and professors.
Authentication is managed with JSON Web Tokens (JWT), generating a refresh token and an access token, which are stored in local storage and used to access protected routes.

The main interface shows:
To obtain pending courses, the application filters available sections for the next academic period through UNPHU's API. In the backend, courses that the student hasn't taken yet are identified, and additional information is added, such as which courses each one unlocks and completed and missing prerequisites. This information is cached for one day.
Students can view available sections for each course and access detailed information, such as professor and course statistics.

When clicking on a course, available sections can be viewed.
When clicking on a section, its details can be viewed. Users can choose between several tabs:
The application provides statistics to help students make informed decisions. These are divided into:

In the Data (section) tab, statistics are shown for students who have taken the course with the selected section's professor:

To obtain these statistics, records and grades of all students who have taken the course are considered, regardless of the professor who taught it.
Students can save their schedule to revisit it later. When they log in again or return to the home page while authenticated, the saved schedule will automatically load in the interface.
Before saving a schedule, validations are performed in the backend to ensure:
When loading the schedule on the client, the backend verifies the availability of each section by querying UNPHU's API. If any previously saved section has been modified in the university's database, the backend updates the student's schedule with the new information. If any section's schedule has changed, the entire saved schedule is deleted. This ensures that students always have the most up-to-date information.
Schedules can be exported in CSV, PDF, and JPG formats. Additionally, students can share their schedule through a URL, allowing others to view their planning.

