A Chrome extension that injects Rate My Professors ratings inline on university course-registration pages — no extra clicks, no copy-pasting professor names.
Works on:
(Coming soon)
chrome://extensionsClick the extension icon and search for your school — typeahead pulls from Rate My Professors’ full directory of ~1,400 universities. Selection syncs across devices when signed into Chrome.
| System | Match pattern | Example schools |
|---|---|---|
| Ellucian Banner SSB9 | */StudentRegistrationSsb/*, */ssb/*classRegistration*, */ssb/*scheduleDetails* |
USF, UF, FSU, UCF, FIU, Penn State, Texas A&M (~1,400 total) |
| Oracle PeopleSoft Campus Solutions | *COMMUNITY_ACCESS.CLASS_SEARCH.GBL* (the public guest namespace) |
NAU, U Houston, FIU, Ohio State, SF State (hundreds total) |
| Workday Student | (planned) | Cornell, USC, Yale, Brown, CMU, Duke, Georgetown, U Miami |
Each registration system is a separate adapter in content/adapters/. Adapters detect themselves based on URL pattern and only run on matching pages — so the Banner adapter never fires on PeopleSoft pages and vice versa. Adding a new system means writing one file.
content/
├── name-parser.js # Banner instructor pattern extractor
├── common.js # shared: RMP search, badge inject, popover, walker
├── adapters/
│ ├── banner.js # Banner SSB9 scan (walks "(Primary)"/"(Secondary)" text)
│ └── peoplesoft.js # PeopleSoft scan (queries span[id^="MTG_INSTR$"])
└── index.js # dispatcher — picks first matching adapter
background.js # service worker; RMP GraphQL client (6 concurrent max)
popup.{html,js} # school picker + report-an-issue link
styles.css # card + popover + dark mode
background.js handles every RMP GraphQL fetch — service workers bypass CORS so requests to ratemyprofessors.com succeed from any university domain. Concurrent fetches capped at 6 to avoid hammering the public API on large class-search pages.common.js exposes window.RMP to adapters: searchProfessor (with department-aware disambiguation), fetchDetails (rating distribution), injectBadge, hover popover, course-context walker.RMP.processInstructorElement. MutationObserver re-scans on AJAX-loaded results.searchProfessor returns ambiguous: true when 2+ candidates matched and neither firstName match nor subject-dept match resolved them — UI surfaces this as a warning on the badge and popover.popup.js lets users search any RMP school via the live newSearch.schools GraphQL query; selection saved to chrome.storage.sync. Multi-campus universities are deduped by name.Tests live under tests/ (Jest with jsdom). Run with npm test.
npm install
npm test
29 tests covering name parsing (Banner + PeopleSoft variants) and DOM scan against a live NAU PeopleSoft fixture. CI runs them on every push (.github/workflows/test.yml).
This is an independent open-source project. Not affiliated with, endorsed by, or sponsored by any university or by Rate My Professors.
Ratings shown are pulled from Rate My Professors and may be inaccurate, outdated, or unrepresentative. Use them as one input, not a verdict.
The extension stores only your selected school in Chrome’s sync storage. It does not collect, transmit, or share any other data.
See PRIVACY.md for the full policy.
MIT — feel free to fork, adapt, and ship for your school.
Issues and PRs welcome. If you ship a fork for another school or registration system, open an issue and I’ll link it from this README.