Registering for classes is not a fun process. Trying to find an open spot in a highly sought after class that fits in your schedule is akin to winning the lottery. Doing so requires old-fashioned page refreshing and frantic checking for any changes amidst other information that isn’t pertinent. We thought this could be handled better and first checked to see if anything else existed to remedy this common problem. There were a few services out there, but they appeared to be insufficiently maintained and therefore were not good enough for serious use. So we looked into what tools were available and found USC’s Schedule of Classes API, which would provide the data we would need in an easily parseable format. From there we began deciding how our site could best utilize and display that information to any given student. On the high-level, the goal was reasonably straightforward. We’d enable USC students to authenticate themselves, create accounts, add classes they’re interested in, and have any changes in their availability update on the site as they occur. The most important change, a spot becoming available in a previously full class, would warrant an email notification, of course.

On a technical level, we had to do a fair amount of work. The killer feature is the asynchronous updating, which was handled with PHP polling for changes in our database consisting of users and classes, which would have to be updated on a regular basis. To do this efficiently, we had to devise an optimal relationship between students and classes. We decided that each user would have a set of classes that they would watch for changes and each class would have a set of students that are watching it. The former would ensure a speedy transition from login to the main page with all of their classes displayed, and the latter would be used to efficiently push updates for that class to the correct students.

We intend for this site to be used by any student at USC who wants to make their registration process more enjoyable and successful.

Built With

Share this project: