Inspiration
Course enrollment is a stressful period, especially since you're competing against many other students in your exact situation. Between prioritizing the highest rated professors on RMP, avoiding overlapping classes, planning prerequisites, and having backups for backups, designing schedules typically wastes time we students can't afford to spare. If only there was a tool to automate this...
What it does
PetrPlanner extracts real-time course data from the UCI catalog and various API's to compile a sorted list of courses to take in order to complete the lower-division requirements of a B.S. in Computer Science. It displays lecture sections only, sorted based on "desirable" qualities such as a professor's RMP rating, the historic average gpa in the class, class difficulty, and more.
How we built it
The PetrPlanner backend extracts a list of required courses from the UCI catalog website, and from these required courses, queries the PeterPortal REST API for the corresponding class schedule information (if any), any prerequisites, and the average gpa in the class. Then, it compiles data on the instructor's RMP rating, difficulty, would-take-again, and other relevant parameters available on the RateMyProfessorAPI. Courses with prerequisites that have not been satisfied are eliminated (filtered) from the list. A sorting algorithm assigns a score to each lecture/instructor based on the "desirable" qualities. Using this information to sort classes, PetrPlanner builds pandas dataframes to display the resulting list of courses.
Challenges we ran into
As we continued to add modules and extract more data, our program's latency worsened. Furthermore, inconsistencies with course names (ICS32A and ICSH32) and designing a key to store a lecture's discussion/lab sections in a relational database proved challenging. While these problems were tough for first-time hackers like us, we improved efficiency by compiling lists of dictionaries and building a pandas dataframe at the end of the program instead of during each step (extracting, compiling, filtering, sorting), and used the pair (sectionNum, course) to relate a course to its discussion/lab sections.
Accomplishments that we're proud of
Designing a full-stack program with minimal prior experience is no mighty feat!
What we learned
We learned to collaborate on a single project by using GitHub and creating separate branches to incrementally develop our program. In addition to our backend work using SQLite and python, we ventured into front-end development, despite having no prior experience in this area. Utilizing React and flask, we were able to create a user interface that displayed the dataframe we compiled!
What's next for PetrPlanner
We plan to implement a quarter, year, and 4-year plan generator that compiles courses and/or instructors based on the same sorting algorithm. Additionally, we'd like to expand PetrPlanner's functionality to students of all majors and narrow course selection based on major specialization (if any). Our hope is that students no longer have to stress out about schedule planning!
Log in or sign up for Devpost to join the conversation.