Inspiration
Choosing courses often means guessing whether a professor will be a good fit. RateMyProfessors has the data, but switching between your schedule builder and RMP is slow. We wanted to bring those ratings into the place where students actually build their schedules.
What it does
ZooReviews is a Chrome extension that brings RateMyProfessors data into your school’s schedule workflow.
It currently supports two main features:
- Inline ratings on the schedule page (overall rating, difficulty, and number of ratings) shown next to professor names
- A search feature inside the extension that lets students look up any professor and fetch their RateMyProfessors data directly
This keeps everything in one place, so students do not have to constantly switch tabs while building their schedule.
How we built it
We built ZooReviews as a Manifest V3 Chrome extension with:
- A content script that injects rating badges into the schedule page
- A background service worker that proxies requests to RateMyProfessors' GraphQL API (for CORS handling and caching)
- An extension UI/panel where users can search for professors and view RMP data
A schedule parser extracts:
- Subject
- Course
- Section
- Instructor
...from different table layouts in the schedule builder.
For name matching, we normalize schedule names (including hyphenated and apostrophized forms) and match them to RMP results using:
- Last-name matching
- First-initial heuristics
- Manual mapping fallback when automatic matching fails
To keep the extension responsive and respectful of the API, we use:
- A 7-day cache
- Rate limiting (about 3 requests per second)
Challenges we ran into
- RMP's GraphQL API is undocumented and can change without notice
- Schedule page parsing is brittle because layouts vary by school and page type
- Professor name matching is error-prone due to:
- Different formats
- Nicknames
- Typos
- We had to proxy RMP requests through the background script to avoid CORS issues
- We needed careful caching and rate limiting to avoid overloading the API
Accomplishments that we're proud of
We delivered a usable end-to-end experience with:
- Inline ratings directly on the schedule page
- A built-in professor search feature in the extension
- Reliable RMP fetching with caching and rate limiting
- Graceful fallback behavior when data is unavailable
We are especially proud that:
- The parser handles multiple schedule layouts
- The name matcher supports varied professor name formats
- The extension remains usable even when matching is imperfect
What we learned
- Browser extension architecture (content scripts, service workers, extension UI) requires a clean separation of concerns
- Parsing real-world schedule UIs takes lots of heuristics and edge-case handling
- Building against undocumented APIs means planning for breakage and graceful degradation
What's next for ZooReviews
Planned improvements include:
- Bringing back the "Are there better professors?" feature in a future version
- Broader Schedule Builder compatibility
- Support for more schools beyond the initial configuration
- More robust parsing and name matching
- Better handling of RMP API changes
- Improved discovery when professors are listed as "Staff" or "TBA"
And yes, we kept the name ZooReviews because navigating course selection can feel like a zoo, and we figured we might as well lean into it.
Built With
- css3
- graphql
- html5
- javascript
Log in or sign up for Devpost to join the conversation.