theRoughCode / WatsMyMajor

🎓A web app to help you determine your major/minor.
https://www.watsmymajor.com/
MIT License
31 stars 10 forks source link
firebase nodejs reactjs waterloo

WatsMyMajor logo

This project was inspired when I was considering doing a double major in Mathematical Physics and Computer Science at the University of Waterloo. To plan it out, I had to create a giant spreadsheet in Google Sheets and see if I could fulfill the requirements for both majors while still graduating on time. Here's a screenshot of a part of it:

logo

After all the effort, it turned out that it was definitely not possible, even if I took 6 courses every term till I graduate. This is an issue that almost every student faces (unless you have all your courses planned out for you cough Engineering kids cough). I've even met a TA who had to stay back one term because he did not meet a requirement to graduate! I find it crazy that students who are already paying tuition fees have such a difficult time planning out their courses and majors.

After this feat, I realized that a lot of what I was doing in Google Sheets was repetitive and automatable. That meant that I could write a program to do it for me. And thus, WatsMyMajor was born.

What It Does

WatsMyMajor is a web app that assists University of Waterloo students in planning their courses.

Viewing Courses

logo

The most accessible feature is viewing courses. This is done by typing a course in the search bar. This page provides a summary of the course, including:

Requisite Tree

logo

The requisite tree provides a neat and cool way to visualize which courses are required to take a certain course. If the user has their courses filled out, it will highlight taken courses in green. The user can also toggle "Simplified View" on, which parses the tree via depth-first traversal and figures out which nodes can be taken out of three depending on courses the user has already taken. In effect, it "simplifies" the tree down to just the information you need to know.

My Courses

logo

This is the main sauce that binds the app together. This is the feature that brings the other features to their full potential. This page manages your courses and allows you to plan out your entire university career. It functions by drag-and-drop, which makes sense because I drew my inspiration from exactly how I was doing it in Google Sheets: dragging and dropping while I rearranged and planned my schedule. It has the following features:

Filling out your courses allows you to fully utilize the other features, such as the Requisites Tree and Majors.

My Schedule (Early Stages)

logo

This feature allows you to copy and paste your Quest schedule directly into WatsMyMajor and formats into a nice Google calendar-like view. Note: this feature hasn't been fully fleshed out, but my hope is that it will allow users to share schedules and combine schedules

View Majors

logo

This allows users to check out different majors and track their progress towards their majors. if a user's courses have already been filled out, this page would auto-populate with courses that fulfill the requirements. If a requirements board is green, this means that you have fulfilled all the requirements for the current board.

Technologies

This project was structured with the help from https://github.com/mars/heroku-cra-node via the MIT license. It is a combination of 2 npm projects, the backend server and the frontend UI. So there are two package.json configs.

  1. package.json for Node server & Heroku deploy
    • heroku-postbuild script compiles the webpack bundle during deploy
    • cacheDirectories includes react-ui/node_modules/ to optimize build time
  2. react-ui/package.json for React web UI

Contributing

Want to work on WatsMyMajor? Check out our contributing guidelines!

Find a bug?

Create an issue here and I'll get back to you!