Overview
Gopher Grades is an application designed to improve upon the previous Gopher Grades application by providing students with a user-friendly interface to search for courses and view grade distributions. It's designed to fix issues with data validation from the previous application, provide additional non-grade information to the user, and showcase data as a bar chart instead of a percentile range.
Frontend
The frontend is built using Next.js and Chakra UI. With the site being hosted on Vercel. At its core it allows students to search for courses, professors, and entire departments to view overall and term-seperated grade distributions.
This shows grade distributions shown on Gopher Grades
On top of the website there is also an extension that allows students to view grade distributions on the University of Minnesota - Twin Cities' Schedule Builder application. This is hosted on the Chrome and Firefox extension stores. This allows students to view grade distributions while they are building their schedule for the upcoming semester without having to leave the page.
This shows the extension on the Schedule Builder page notice the addition of graphs on the right screen.
Additionally, the frontend also collects usage data using Umami Analytics. Not only does this provide a live view of how many users are using the site, but it allows us to see what pages recieve the most traffic and what search terms are being used.
This shows the Umami Analytics dashboard for Gopher Grades
Lastly, the frontend also allows for users to report when a course is missing from the database, this information then triggers a discord bot to accumulate this data and inform the development team of what courses are potentially missing.
Backend
The backend is built predominantly using Python's Pandas library and SQLAlchemy, it's responsible for parsing the large amounts of grade data recieved each term from the Office Of Institutional Research and storing it in a database. Moreover, the backend also is designed for catching issues found within the data provided by the Office Of Institutional Research and fixing them. Notably these issues could be found in the original Gopher Grades application with Teaching Assistants being listed as instructors as opposed to the professor of the course. This was solved using a form of backtracking to identify the grade source and go backwards to find the lecture section in order to identify the professor.
This shows the database schema design for the backend and how data is stored.
The backend also improves on the original Gopher Grades by providing Student Rating of Teaching (SRT) information through official releases by the University. This is important for students especially if they're looking for a course based on the enjoyment of students who have taken it in the past. Likewise, the backend also pulls information for the Academic Support Resources department at the University to display general information about a class such as how many credits it has and a description of what it is. Lastly, one of the major improvements of the backend is its ability to multiprocess the parsing and feature engineering to speed up the overall process from hours to minutes.
This shows the backend speeds comparing non-multiprocessed (control), async operations, and multiprocessing.
Outcome
Overall this project has been highly successful with many students using the site to plan out their courses. We continue to maintain this project and highly encourage new students to create issues on the github and try to contribute to the project. There are many ways this project could be improved and integrated with other applications and we're excited to see what students can come up with!