Inspiration

William & Mary can be an overwhelming school when you first arrive, with so many classes to choose, buildings laid out in confusing ways, and a campus that zigs and zags all over the place. With this set of tools, students will have a much easier time learning about course offerings, building their schedule, and then making sure they can actually get around to classes!

What it does

Ampersand Courselist has three primary functionalities:

  1. The first and foremost is being a courselist for students to use. This has more filtering options, an updated UI, and can accept more complicated queries so students can search for exactly what they want.
  2. A map of campus that can display the distances between buildings using Google Maps API to get walking distance and time, and eventually provide information about each building such as the departments it contains or the purpose of each building. This combines with an easily readable graphic showing the building to be a helpful utility for new students especially.
  3. An assistant for navigating ISC, based on pathfinding between specific rooms. This is built on a very flexible node-based structure that will be expanded to include instructions in English on where to go, turning the indicators into a full guide of the building. Floor 1 of ISC is completed as a demo of the concept.

How We Built It

Ampersand Courselist is built using a Flask backend that is hosted through Google Cloud with Firebase. The courselist application uses scheduled functions to interface with the W&M Open Courselist API to pull data for each term, each subject, and every single class, compiling it into a Realtime Firebase NoSQL Database. This database is the real core of the course functionality. The other data on buildings is scraped using Selenium and then it's all put together into one great website with a lot of imagery and CSS.

Challenges We Ran Into

(Ian): I don't have too much knowledge of hosting websites and databases, so it was a bit of a struggle at first to adapt my existing skills with web development. Once settled, though, it was super enjoyable. The biggest struggle for me was in developing the ISC navigation tool, as it was done in JavaScript rather than Python which the majority of the website functionality is done with. JavaScript isn't my strongest language (nor one I'm particularly familiar with the syntax of) so writing a breadth-first search algorithm and ensuring it worked with my data structures was quite a feat to pull off during the timespan of the hackathon.

(Collin): Having little experience with NoSQL prior to this project, I found it challenging to struggle the database in a way that allowed for queries that were both fast and complex. Database management really is crucial for a project like this that is handling thousands of related records and needing to update them semi-frequently, but eventually we developed the back-end to minimize read and write calls while still keeping operations quick.

Accomplishments that we're proud of

Making an alternative to the open courselist that students seem geniunely excited to use. During development we asked our peers things that bothered them about courselist and then implemented solutions to those requests. The campus routing tool is excellent for new students and we hope people find it useful, The ISC navigation feature is also something very exciting, as it is a growing building and we hope to be the future of its navigation!

What we learned

  • NoSQL databases are a lot more tricky than their alternatives, and that needs to be kept in mind from the first moment of designing the architecture of the project (but we made it work!)
  • How to display large quantities of data with an interface that's aesthetically pleasing, easy to ready, and responsively mobile-friendly
  • Using Flask is excellent and Python is wonderful but certain functionalities are quite difficult as it only minimally interfaces with the website's JavaScript, this was especially clear with Google Maps API
  • SVGs are a surprisingly handy data structure for web development as they can work for mapping geographically but also for graph structures, this was such a great discovery for the ISC project
  • (Ian): How to use Flask, more intricacies of how hosting works, and a lot about GET and POST requests and APIs - all very useful things!

What's next for Ampersand Courselist

ISC Assistant

  1. Expand ISC Assistant to all floors of ISC and allow for routing between floors
  2. Subsequently, allowing clicking on specific rooms to navigate from there or take the room as input from classes taking place in ISC
  3. Embed instructions into each ISC path as to how to walk around so that when the paths are read back they can form a guide

Ampersand Courselist

  1. Rework the mobile UI of the database results to be even more responsive and show course data more helpfully
  2. Get specific details for every course to allow filtering by building, time, and more
  3. Continue to add features requested by our peers

Campus Routing

  1. Display walking route between buildings
  2. Scrape for data on every type of building and landmark on campus, not just academic
  3. Expand to the School of Ed and Law School
  4. Add data for each building on the purpose and a link to the building's webpage
  5. Make a more interactable map that can display all these building attributes

Thanks for checking out our project!

Share this project:

Updates