Inspiration

There are many schedule builder tools available, but they all lack one thing - they make you do the work! The process of creating a schedule is tedious, but it doesn't have to be. It's basically just a matter of criteria (I like this professor, this class is too early), which can all be automated. We tried to solve this and build a tool to assist with this.

What it does

Mercury is a website that creates class schedules. The front page has a box to upload your transcript PDF, or copy and paste it. The data is then parsed and key fields such as major and previous classes are extracted. From this, we determine graduation requirements, remaining gen eds, and which classes you might like taking. Finally, it creates a bunch of permutations of classes that maximize your wants. These are displayed, and then there are several criteria that allow you to specify more restrictions. The site generates new schedules and displays them, and then repeat as necessary.

How we built it

Using umd.io we downloaded the classes and sections offered next semester. For each of these, we manually re-coded the prerequisites into our data format. Then, we wrote code to permute these together and come up with schedules. Finally, we added filters and weights so that the correct schedules would appear.

Challenges we ran into

There were many significant challenges we ran into:

  • The way prerequisites are defined is very weird and not standardized - we had to create a custom data structure to represent all of the different combinations of classes that could fulfill it
  • Similarly, representing graduation requirements was not simple and we had to write an algorithm to determine which schedules reduced the number of remaining graduation requirements
  • Determining what a 'good' schedule is: with 2 upper level CS classes and 1 gen-ed class, there can be up to 500,000 schedules, which need to be ranked somehow. Each criteria can 'grade' a schedule, but figuring out what the scale is and how to combine these criteria was a challenge.

Accomplishments that we're proud of

Creating the system to check prereqs and grad requirements was a ton of work and the result was very rewarding. We essentially had to re-implement the degree audit system in a basic way. Also, we learned a lot of technologies along the way, which was nice.

What we learned

We learned a new frontend framework, Sycamore. We also learned more about parsing PDFs, data structures, and writing in Rust in general.

What's next for Mercury

A lot more work needs to go into the degree requirements system to make it more robust. Also, we downloaded professor ratings and grades from PlanetTerp, but weren't able to utilize the data in time.

Built With

Share this project:

Updates