I’m building RMP-Bot, a Chrome extension that automatically pulls RateMyProfessor scores and injects them directly into college registration portals like Ellucian. The goal is to stop the endless tab-switching when trying to pick classes.
I started this project basically just vibecoding, so the first chunk of time was spent wrapping my head around how Manifest V3 actually works. I had to figure out how to separate the logic between the content script (which lives on the registration page and sees the DOM) and the background service worker (which acts as the brain and handles the API requests so I don’t get blocked by CORS).
Got the basic skeleton loading via Chrome Developer mode, then moved on to the UI. I built out the popup.html to have a clean toggle switch so users can turn the extension on and off. The tricky part here was state management. I had to wire up chrome.storage.local so the extension actually remembers if you turned it off after you close the popup.
I originally thought about hardcoding specific school URLs to detect if the extension should be active, especially since I was testing it on my own local portals like Chaffey and Valley College. But I realized that’s a terrible way to build it if I want to share this with other people, since every institution uses a custom domain. Instead, I spent some time writing a DOM detection script that injects into the active tab to search for the specific Ellucian .instructor-name class. If it finds it, the popup turns active. Much more bulletproof.
For the last part of this session, I tackled the actual data fetching. I hooked the background script up to the RateMyProfessor GraphQL API. Once the background script gets the professor’s data, it sends it back to the content script, which builds a custom HTML badge and slaps it right next to the professor’s name on the page.
I added logic to color-code the badges (green for 4.0+, yellow for average, red for avoid) and made them clickable links directly to the RMP profile. Finally, to make sure RMP doesn’t rate-limit me for spamming their API every time a student refreshes the page, I built a local caching system. Once a professor is searched once, their data is saved to local storage.
Next up for Devlog 2 will be refining the DOM injection and maybe handling hover previews or edge cases where professors have weird name formatting.
(the image shows the popup.js window for this extension, I still have to fix some bugs like course registration page detection so I’ll keep you updated on future devlogs :))