Projects/ was my Senior Design project at Purdue University.

It provides an open API for all of the Purdue University course data, and a few extra APIs for things like registering an authenticated user for classes.

On top of that it has a pretty nifty demo UI to showcase how easy it is to access and process class scheduling data.

It’s also open source, and I still maintain it today.

Fancy looking subject listing page


The course scheduling software at Purdue isn’t pretty. It is some monstrosity called SunGard Luminis, and in typical education software fashion, its experience is shockingly poor.

Hideous MyPurdue Course Lookup Page

Every semester students would struggle through MyPurdue, combing through giant class tables, writing down Class ID numbers (or CRNs) on a sticky note, typing them all into a big set of input fields, and facepalming over the inevitable errors they’d be presented with, prompting them to repeat the whole process several times over.

Ambitious CS students who wanted to improve this experience were faced with a steep hurdle - Luminis provides no accessible API to allow developers to easily access course data or manipulate student schedules. If you wanted to access MyPurdue programmatically, you had to pretend like you were just another student using a web browser. This is more difficult than it sounds, since Luminis is very particular about how you handle the cookies and HTTP headers it provides the browser through its various iframe and javascript-laden pages.

As a CS student who attempted to programmatically access MyPurdue for several different projects, I decided it was about time to provide a better API. I believe motivated students could probably do a better job than SunGard when it comes to designing class scheduling experiences.

Building It exists in three parts:

  1. CatalogSync program
  2. ASP.NET OData API
  3. Front-end


CatalogSync is a program that runs at a regular interval and scrapes all new class data from MyPurdue. It populates a relational database with all of the class data so it’s quick and easy for API clients to query.

It also manages filtering all of the raw class data into distinct entities for terms, courses, classes, sections, instructors, buildings, classrooms, etc. This makes writing complex queries a whole lot easier, and you don’t have to do any guesswork to determine which lab and recitation sections belong to the same class.


OData (open data protocol) is a standard protocol for accessing data models via HTTP REST calls. Think of it like a REST version of SQL.

The API exposes all of the Purdue course catalog as OData entities. Consumers can even construct advanced queries using $filter, $select, and more.

The API also provides some authenticated endpoints for things like registering for classes.


In order to demonstrate just how could be used to provide better registration experiences, a quick web browser front-end was hacked together over a couple of days.


  1. API
  2. Front-End