Redesigned Course Catalog Project: The Server

The Context

My initial goal in the summer of 2017 was for the combined features of the course catalog parser and server to come together as my senior project. I aimed to implement improved search functionality as well as a scheduling system for identifying courses which were available to fit within one’s own schedule. Because I did not ultimately make this my senior project, I only implemented a limited number of these features.

Utilizing some of my experience with the Twitter JSON API, I knew I wanted to use the Flask web development microframework to make one of my own. JSON is a human-and-machine-readable format and I really liked the idea of some developer one day wanting to use this service to make an application of their own. If such a day ever came, my API would be of use to them.

MongoDB had the kind of searchable database that seemed to scale and interface well with Flask, so I read enough documentation to get it working. Some queries happening in the backend for sorting results were particularly difficult to figure out.

The responsive templates I set up for use with Flask were not intended to be permanent solutions. I have very limited web design experience, and making my site look better than the official one was not particularly difficult. Some day soon, I would like to give the site a more modern feel.

The redesigned course catalog home page

Features

The site is live at courses.segal-gould.com. If your browser can handle the loading time, check out all 3900 courses currently in the database at courses.segal-gould.com/all.

Semesters

Browse the list of all semesters’ courses available in the database. Currently the oldest semester available is Fall 2014 due to limitations in the parser.

Semesters list from Fall 2014 to Fall 2018.

Then browse all the courses taught in each department during that semester. The names of these departments are the same as the names used to identify them in the URLs of the official course list.

Example list of departments per semester.

Departments

Another way to browse by department is to ignore each semester and view everything in the database from each department. For instance, there are currently 116 anthropology courses in the database across all semesters.

Professors

If you are looking for a particular course instructor, you can browse the list of all professors in the database of courses. Right now, 577 professors are in the database. Duplicates exist because often professors collaborate with each other to instruct a course, and the system treats the names of multiple professors as one single item.

The alphabetically sorted list of professors. When the official course list shows an instructor as “TBA” it is reflected here.

Locations

Browse by all classrooms. Sometimes courses meet in different locations on different days of the week for lab sessions.

The locations list page. There are currently 348 classroom locations in the database.

Course Codes

The official course list utilizes a system of course codes formatted as three or four letter department identifiers followed by three or four digit course identifiers (e.g. “CMSC 360“). You can browse all courses codes and see which courses have used them.

The list of course codes. There are currently 2,236 course codes in the database.

Distributions

Bard College requires that students complete a specific number of credits from several distributions. In recent years, the institution modified their distribution requirements naming system from using four characters (e.g. “AART”) to using two characters (e.g. “AA”). I developed the redesigned course catalog to work with both naming systems. Often one course fulfills multiple requirements and thus you will find duplicates.

You can browse by all courses which fulfill requirements within the old distributions naming system.

The list of old distributions. There are 39 results in this list but only 10 distributions were officially in use.

And you can browse using the new distributions naming system.

The list of new distributions. There are 31 results in this list but only 11 distributions are officially in use.

Users

I implemented a system for registering accounts with safely hashed passwords using bcrypt. You can login after registering and also add or remove courses from your list of favorites. All users may view the list of users as well as all their favorite courses.

Example list of a user’s favorite courses.

Sorting

All lists of courses can be sorted alphabetically by the following criteria:

Buttons used for sorting.

Search

You can use the search bar on almost any page to look for keywords, descriptions, course titles, scheduled meeting times, and any other information associated with courses. For example, here are the results for a search for “machine” among all computer science courses.

Example search box.

RateMyProfessors Integration

Every course has a link in its description which will take you to a RateMyProfessors search for its instructor. I am not affiliated with RateMyProfessors.

Example link to a search for an instructor on RateMyProfessors.

Course Registration Numbers

If you need to know a course’s CRN for clerical purposes, the redesigned course catalog lets you access a list of all courses which use a specific CRN through a link in every course table. Although course registration numbers are five digits, the official course catalog still has duplicates.

Example list of courses matching course registration number 91761 for which there are two results from totally different departments.

Application Programming Interface

The JSON API is totally free and currently has no rate limits. Each JSON it returns is structured as a string "result" mapped to an array of course objects. To access the API result for any redesigned course catalog page, just insert /api/ into the URL. For example, the result for a specific course registration number is normally formatted like courses.segal-gould.com/crn/91761. To access the API result for the same content the URL would be courses.segal-gould.com/api/crn/91761.

JSON result example.

Future Features to Implement

I managed to implement most of the features I had in mind over that one summer. Since then, I got some nice feedback on the site and have had a few more ideas about what I’d like to add to the project.

Using something like Selenium to automate gathering data on currently offered courses’ required textbooks, it should be possible to match those results with official course titles. It would be really easy to find out what books to purchase for a class if Amazon links and ISBNs were available directly from the course list.

I would like to add some means of leaving comments on courses, preferably as verified course instructors. In my experience, details such as class sizes can vary in how set in stone they are depending on the professor. Maybe additional information such as a course’s syllabus could be left as a comment as well.

An interactive map could serve to direct students to their classrooms, and schedule-based searches would be really convenient. Under the official system, there is no easy way to identify courses which fit within one’s own schedule.

Read more about the documentation and code for this project on GitHub. If you’re interested in what I chose to pursue as my actual senior project, you can read up about that on GitHub as well.

Share your thoughts