WPI's existing tools for exploring courses are lacking. Not only is searching for courses to take difficult, but when you find a course, the course description can differ wildly from what you would experience when you actually take the course. This can result in many people asking many of the same questions about many courses to upperclassmen every time course registration comes along. What if we could replace those old outdated course descriptions with modern ones, written by students who actually took the classes?

What it does

Currently the database has three parts:

Course Search

An intuitive search feature that allows for searching for any course at WPI. It even supports special search options like term:B (for only classes that run in B term) or dept:CS (for only classes in the CS department).

Course Edit/View

A page where users can view course descriptions and edit them as they please. They can also view other information fetched from WPI servers, like what sections there are, how full they are, and when they meet.

API Access

An easy-to-use API so other student applications can leverage the community course information. Every page has a button in the lower right with the actual query used to fetch the information being displayed on the page.

How I built it

The backend was just a simple Node.js application using express.

The frontend uses SolidJS as the main framework and Ionic for the UI. Because Solid is relatively new and doesn't have any UI frameworks specifically built for it yet, the fact that Ionic has a Web Components distribution made it perfect for the job.

Challenges we ran into

While I had significant experience with React (which Solid is inspired by) before this project, I had no experience with Solid, and so there were a lot of quirks I had to figure out when writing this. Additionally, while Ionic just being a set of Web Components made it usable, the JSX type annotations were intended for Ionic's React distribution, and so they didn't perfectly line up with the actual Web Components usage, which made things pretty complicated (especially with using TypeScript).

Accomplishments that we're proud of

  • It looks pretty
  • It works
  • It provides useful information
  • Managed to coax libraries that were not necessarily intended to be used together into working together

What I learned

The main thing I learned from this was how to use Solid, which was surprisingly much harder to work with than the documentation would suggest (I'll probably switch back to React on future projects...). Ionic was also new to me, though it was fairly straightforward. I also learned a little about how to use Quill, the rich text editor I use for editing descriptions.

What's next for WPI Community Course Database

While letting anyone on the internet edit descriptions might be nice, there should probably be some kind of login and edit approval system, similar to how some wikis do it (and at the very least, there should be audit logs). It would also be cool to have integrations with other WPI tools like Oscar (our course reports system) and Planner (our solver for course scheduling). Other cool things could involve a rating/recommendation system, but that would be further off.

Built With

Share this project: