uOCal is a web extension I made to simplify the process of porting my class schedule from uOZone to my calendar app on my phone.
For most of my undergrad, I would manually import my class schedule, every semester. That is, I would manually add each class, tutorial, lab and what not to my calendar app. It’s pretty tedious, time consuming and somewhat error-prone.
I don’t know why uOZone just does not allow us to just download the schedule as an ICS file.
So, I decided to make a web extension to do just that: parse my class schedule on uOZone and save it as an ICS file.
And just like that, uOCal was born!
The architecture is very simple. Parsing the relevant sections of the DOM was a bit tricky but not too bad. Once the extension has extracted all the schedule info, I am using the ical-generator library to make the ICS file. ical-generator is Node.js package, so I used Webpack to bundle it with the extension.
uOCal is completely free and open-source. You can find the source code here: https://github.com/vishans/uOCal
The extension works with both the English and French version of uOZone! However, the UI is only in English. Sorry 😬 But contributions are welcomed! If ever you are in the mood to translate the UI in French, you know where to find the repo.
All processing happens in your browser. Your schedule data never leaves your device. uOCal is a stand-alone extension and does not require any other external services to work.
Since it’s also open-source, its source code can be inspected!

Well, it will probably save you a lot of time if you create your schedule manually (like I used to do). It takes less that 5 minutes to import you schedule to your phone’s calendar using uOCal.
It’s also much better to have your schedule in your phone’s calendar app than as a screenshot. You get notifications about upcoming events and is way easier to navigate.
Refer to these instructions. It covers installation and usage.