Inspiration
We were all planning out our registration one day when we came upon two different classes that were apparently equivalent. We've all seen websites like Rate My Professor, that can help with finding the right professor, but never something to help us pick between classes. All over social media students were asking for recommendations to fulfil one requirement or another, but had no central place to turn. With our own experiences, and seeing those of other students, we thought we could come together to provide a solution, leading us to create Rate My Classes.
What We Do
Rate My Classes takes the entire Undergraduate course catalog from both UNC and Duke, and provides a means to rate, compare, and see what others had to say about various classes.
How we built it
We split the work three ways: web-scraping, back-end, and front-end.
Using Puppeteer in JavaScript, we designed web scrapers to keep our catalog up-to-date with any new courses that may be offered in the future. The scrapers check the UNC Class Search and the Duke Class Search forms periodically to stay up-to-date.
Our web scrapers compiled all of our course-data into a JSON format, so we used typescript to import to our database. We used Golang to get scores from Rate My Professor, and we used Rust to match each subject with its extended name (AAAD = African, African American, Diaspora Studies).
The parsing of the data and the building of our website was done using TypeScript.
Challenges
The biggest challenge we faced was the problem of actually getting all of our courses in a format where they were easily accessible. We had to batch the courses we fetched so that our web scraper could handle the amount of data we were trying to store. We then had to import the data into a database and start parsing before we could do anything with it.
It was also difficult parsing HTML in Rust, because of the language's focus on memory safety (as opposed to a language like Python that makes it easy).
Accomplishments that we're proud of
We are proud of the product that we've built. Compiling data from all of our sources into a database was difficult, but we are happy with our rating system and the feel of our site. We are very happy and grateful for the opportunity to create this in just a day.
What we learned
We each experimented with using and implementing new frameworks and API's to get this project off the ground. For the search function of our website, we opted to use Meilisearch, a really fast and open-source tool that enabled us to search through all of our data. We also learned how to use various web frameworks: Rocket for Rust and Fiber for Golang.
What's next for Rate My Classes
The most obvious next step is to add support for more schools. We had wanted to include NC State courses in our database, but the website that stored the information on all of those classes was down this weekend. We would also like to extend the information that is available on the courses we currently have listed. Ultimately, we hope to establish Rate My Classes as a valuable and widespread service amongst university students.
Built With
- docker
- go-fiber
- golang
- javascript
- kubernetes
- meilisearch
- nextjs
- puppeteer
- react
- rocket
- rust
- typescript
Log in or sign up for Devpost to join the conversation.