Every quarter I (and most students at Northwestern) have to create a Google Calendar by hand after already creating our schedule in CAESAR once. It is always extremely time consuming and after 6 quarters, I decided to find a better way.

What it does

Roman Calendar is Google Chrome extension that utilizes the Northwestern Course Data (CAESAR) API. When you click the icon and enter your class information, RoCal retrieves the respective course information from the CAESAR API, creates and formats an ".ics" style file which can then be imported into Google Calendar et al. More specifically RoCal figures out the name, time, days of the week, and duration of a course and uses them to create a recurring event, from the correct beginning of the quarter until Reading Week.

How I built it

For the frontend, I built a really simple Chrome Extension body. However, I built everything off of Google's Material Design Library for added visual aesthetic. The backend is a miniature custom API in the form of a Flask Python server running locally doing most of the heavy lifting, so all the frontend needs to do is make an HTTP request.

Challenges I ran into

I didn't originally intend to build an API, but don't know enough JS to rebuild the whole thing in JS, so I needed to find a way to use the Python I had written. Datetime is super weird, especially their string formatting and making sure you are in the right time zone. Classes this quarter started on a Tuesday, so in the API, the start date for every course was set to Tuesday Sept. 20th which was not actually true because many classes actually have a Mo-Wed-Fri lecture schedules, so I had to make a way to find the correct start date. I have never built a Chrome extension or a Flask server before, so that was a challenge to learn. Many course have multiple sections (101-0 vs 101-1) which leads to many API errors. The original python library I used to form the .ics file was actually too restrictive and wouldn't let me create repeating events so I ended up building one version, scrapping it and building another with a different library. I did quite a bit of reading into the international standards the for formatting calendar files, Check it out if you want. I also had to find a way to protect my api-key so I wouldn't accidentally upload it to Github.

Accomplishments that I'm proud of

I'm just happy that it actually works. It's one thing to declare and idea and a plan but actually seeing it though, that's something that I'm proud of, especially with all the snags I ran into.

What I learned

My Python skills definitely got better. I learned a bunch about the "Internet Calendaring and Scheduling Core Object Specification". I now know how to develop a Chrome extension, and implement Google's MDL. I also picked up slightly more JavaScript.

What's next for Roman Calendar

The next goals is one more level of abstraction. The user won't need to enter any info about classes, they would simply bring up their schedule in CAESAR, click the icon, the icon would find their classes on the page, and download all their courses. My Flask server is only running local for now, but I have plans to deploy it to an AWS EC2 instance, I even bought a domain, And probably somewhere really long term, I imagine it would be a lot cleaner to rebuild the whole thing in JS and nix the need for the server.

Share this project: