Inspiration

Transitioning from high school to college was pretty difficult for us, and figuring out which classes we needed to complete as prerequisites for upper-division classes turned out to be quite the hassle given the vast size of both high school and college course catalogs. We wanted to find a way to simplify the process of planning our schedules, so here we are.

What it does

The backend provides detailed descriptions of what prerequisite classes you need to take in order to be eligible to enroll in a particular class, and whether or not it is possible to do so given your timeframe until graduation. The frontend provides a chatbot that helps guide you in an interactive way, providing both academic guidance and a charming personality to talk to.

How we built it

  • We realized we could represent courses and their prerequisites as directed acyclic graphs, so to sift through finding the shortest paths of getting from a prerequisite course to our desired course in a schedule, we utilized a reverse post-order depth-first search traversal (aka a topological sort) to parse through raw data provided in a tidy JSON format.
  • We expanded by using "assumption"-based prerequisite clearances — i.e., eduVia will assume a student has also completed CS 61A if they input CS 61B (61A's sequel course) as completed.
  • To put icing on the backend cake, we also organized non-conflicting classes into semester-/year-based schedules optimized for expediting graduation speed.
  • Instead of using the vanilla HTML/CSS to design our website, we utilized a more modern framework, React.js, to structure our web application.
  • For the front end, we implemented the React-Bootstrap library to make our UI look fancy and crisp.
  • We also used an open-source chatbot library API to implement our academic assistant Via which will in theory help high school students plan out their four years.

Challenges we ran into

  • Figuring out how to effectively parse through a JSON file while simultaneously implementing an efficient topological sort was quite the steep learning curve at first.
  • There were a slew of issues around the AM times with effectively clearing out all prerequisite classes based on a more advanced class - for example, we couldn't directly get rid of Pre-Calculus if we listed AP Calculus BC as a completed course, since PreCalc isn't a direct prereq of AP Calculus BC.
  • Building out that semester-/year-based schedule was TOUGH! Values would aggregate together when they shouldn't and you'd have semesters where you're taking every class at once. It became near-impossible to build out after merging two different "class paths" together since the sorting became wonky and unusable.
  • We were also fairly new to web development so it took a while to get used to the React.js framework and figure out the ins and outs. Given more time, we definitely could have made more progress on this project.

Accomplishments that we're proud of

It was really rewarding to be able to implement a clean and efficient topological sort successfully, and there was a special joy in getting data to be displayed just the way we wanted it to be.

Learning how to use complex Python data structures, JavaScript, React, and several APIs (albeit to varying degrees of return on investment) on the fly was extremely thrilling.

What we learned

JavaScript may be friendly, but React is your true friend. And Python is your BFF. And Google is just <3

What's next for eduVia

  • Better integration between the frontend and backend.
  • Implementing an AI-powered chatbot (Co:here, anyone?) that can utilize browser cookies to remember conversations with users and provide better academic feedback.
  • Providing full-fledged personalized 4-Year Plans for students based on their academic preferences, utilizing feature engineering and machine learning to weight the student's subject likings and make a schedule of classes suitable to their stated interests.
  • Minor bug fixes.
Share this project:

Updates