Overview
Every registration season, UMD students juggle two sites: Testudo for seats and sections, and PlanetTerp for professor ratings and GPA history. Terp Rater merges them. It injects ratings, GPA data, and live seat/waitlist counts straight into Testudo’s own course listings, so you never need the second tab.
Live on the Chrome Web Store: 51 users, rated 5.0★ from 6 ratings.
How it works
A Manifest V3 Chrome extension: about 935 lines across 8 JavaScript
modules, talking to two REST APIs: PlanetTerp (/api/v1/course,
/api/v1/professor?reviews=true) and Testudo’s SOC (/soc/{semester}/sections).
- Living inside someone else’s page. Testudo re-renders its listings
on the fly, so a
MutationObserverin the content script re-applies the injected data whenever the DOM changes. - Request coalescing. One professor teaches many sections on a page,
and sections load concurrently via
Promise.all. A result cache plus an in-flight request map means a cache miss awaits the existing promise instead of firing a duplicate call. One professor gets one request, no matter how many sections they teach. PlanetTerp is a free community API, so being polite to it matters. - Graceful degradation. A 5xx or network failure from PlanetTerp shows a banner instead of failing silently. A per-course try/catch keeps one bad course from breaking the whole page.
- Minimal permissions. Scoped
host_permissionsand a custom content security policy. The extension asks for exactly what it needs, nothing more. - The features themselves: average GPA and rating badges with a review
modal, seat/waitlist highlighting, sort by rating or open seats, filter
out full sections, and a bookmark manager persisted in
chrome.storage.local.
Result
Shipped in August 2024 and still maintained: version 0.0.2, last updated July 2026, almost two years later. 51 students use it every registration cycle. The listing collects no data and shares nothing with third parties. Licensed Apache-2.0, with known issues listed in the README.