Inspiration

I've spent too much time trying to plan my schedule each semester. I'd find a class I wanted, only to realize it overlapped with another required course. Then I'd have to start over. On top of that, tracking Core and Major requirements across multiple web pages and workday was exhausting.

I thought — why isn't there a simple tool that does this for us?

What I learned

  • Finding hidden APIs: Calvin's course data wasn't publicly documented. We used browser DevTools (Network tab) to discover the Workato API endpoint that powers the course search page.
  • API authentication: The course API required specific headers (api-token, referer, origin) and a session cookie to work. We learned how to reverse-engineer these from the browser.
  • Data cleaning: Raw API responses had formats like "MWF | 9:15 AM - 10:20 AM | 08/31/2026 - 12/17/2026". We wrote parsers to extract days, start/end times, and convert them to a usable format.
  • JSON transformation: Converting Excel/API data into clean JSON structures for the frontend.

How we built it

  1. Data Collection: Fetched course schedules from Workato API, Major/Minor requirements from Calvin Catalog's widget-api, and Core Program requirements via web scraping.
  2. Backend Processing: Python scripts to parse, clean, and structure all the data.
  3. Frontend: React app where students can upload transcripts, view degree progress, and build schedules.
  4. Deployment: Hosted on Vercel.

Challenges we faced

  • API Access Denied: The course API initially returned "Access to this API has been disallowed". We solved this by creating a session that first visits the Calvin page, then makes the API call with proper headers. -Text Matching from Transcript. Had to figure out algorithm to read the trasncript.

Built With

Share this project:

Updates