Prof Pulse

Make every course count.

Prof Pulse is a course-and-professor discovery site for Toronto Metropolitan University. It turns 108,000+ student reviews into something students can actually act on: search any course or professor, see how hard a class really is, which professor gets the best results in it, and what grades people walk away with, all in one place.

108K+
Reviews analyzed
7,099
Courses
3,465
Professors
~1s
Page load

The problem: students pick courses, not just professors

Every student knows RateMyProfessors. But it only answers half the question. It rates the professor โ€” not the course. A 5-star professor can still be teaching a brutal, low-average class, and an "easy" course can be miserable with the wrong instructor. When you're building a timetable, you're choosing a course-and-professor pairing, and RateMyProfessors can't show you that.

๐Ÿ“—

RateMyProfessors

  • โ€ข Rates professors only
  • โ€ข No course-level difficulty or grades
  • โ€ข Can't tell you the best prof for a specific course
  • โ€ข No easy-elective discovery
๐Ÿ“Š

Prof Pulse

  • โœ“ Professors and courses, side by side
  • โœ“ Grade distributions + difficulty trends over time
  • โœ“ Ranks which professor is best for that course
  • โœ“ "Bird courses" (easy A's) + liberal-elective browser

The result: instead of guessing, a student can answer the real question โ€” "Which course, with which professor, gives me the best experience and outcome?"

๐Ÿ”Ž
Search anything

By course code, subject, or professor name.

๐Ÿฆ
Find bird courses

Easiest A's, ranked by real grade data.

๐Ÿ“š
Browse electives

Every liberal-studies option with ratings.

โš–๏ธ
Compare

Courses or professors, head to head.

How it's built: from raw reviews to a fast website

Behind the scenes, a data pipeline runs on a schedule. Think of it as an assembly line: raw, messy review data goes in one end, and clean, ready-to-use files come out the other, which the website reads directly. There's no database server to maintain, the site is just fast static files that refresh themselves.

๐Ÿ“ก
RateMyProfessors
The raw source of student reviews
โ†“
๐Ÿ
Daily scrape (Python)
Pulls the latest reviews into cloud storage
โ†“
Cleaned in stages on Databricks (PySpark)
๐Ÿฅ‰Bronze
Raw, validated snapshots. Nothing thrown away.
๐ŸฅˆSilver
Cleaned + standardized (fixing messy grades, codes).
๐Ÿฅ‡Gold
Ready-to-use metrics: ratings, grades, rankings, trends.
โ†“
โ˜๏ธ
Export to AWS S3
~25,000 small JSON files, one per course and professor
โ†“
โšก
Next.js website
Reads only the files a page needs, caches them, refreshes daily

This "medallion" pattern (bronze โ†’ silver โ†’ gold) keeps a clean audit trail: every number on the site can be traced back through the layers to the original review it came from.

The hard problem: a 76 MB download on every page

The first version worked, until it didn't. Because the site read files straight from storage, every professor page downloaded the entire 76 MB reviews file and sifted through it for one person. On a good connection it took 20โ€“35 seconds and the download failed about half the time mid-transfer. Not good enough.

Before
  • Data / page~63 MB
  • Load time20โ€“35 s
  • Reliability~50% fail
โ†’
sharding
After
  • Data / page~500 KB
  • Load time~1 s
  • Reliabilityrock solid

The fix was sharding: instead of a few giant files, the pipeline now writes one tiny file per course and per professor. A page grabs only the few kilobytes it actually shows, a ~99% cut in data per page. Same information, delivered surgically instead of by the truckload.

Other problems solved along the way

๐Ÿงน

Messy real-world data

Grades came in as "Not sure yet" and "Not_Sure_Yet"; course codes had dozens of prefixes. The silver layer standardizes it all so the charts and rankings are actually trustworthy.

๐Ÿ”

Writing 25,000 files, securely

The locked-down Databricks cluster blocks the usual cloud credentials. I stored a dedicated key in a Databricks secret scope and wrote all the shards to S3 in parallel, turning a ~90-minute job into a few minutes.

๐ŸŽจ

A cohesive redesign

The UI was rebuilt on a design-token system: a warm "charcoal + ochre" theme with editorial headings. One change re-skins every page, so the look can't drift as the site grows.

The stack

Data pipeline

Databricks PySpark Delta Lake Python AWS S3

Frontend

Next.js React TypeScript Tailwind CSS shadcn/ui

Delivery

Vercel ISR caching GitHub

The real site, embedded below, search a course or professor to explore ratings, grade distributions, and comparisons.