Inspiration

As senior teaching assistants for the largest CS course at UBC, we know that one of the toughest issues is making a successful course schedule. While proprietary software can be great for this, we've found out the disadvantages the hard way - huge costs from such a large team, while software we previously used no longer works.

Hence, our goal was to create an open-source, free, and maintainable scheduler, which you can deploy anywhere!

What it does

The core of our project focuses on making it easy for you to start scheduling - leaders get to create teams and time slots through an intuitive interface, while team members can easily drag and drop to select their availability. Our system is able to dynamically generate a schedule at the click of a button, ensuring that the leader gets all their time slots filled while respecting preferences as much as possible.

How we built it

We knew from the beginning we needed a good algorithm, so we chose the Python library networkx for their linear programming algorithms. Access to the algorithms is supported by a Flask backend API, SQLAlchemy for our database, and React/TypeScript for our frontend.

Challenges we ran into

We ran into lots of challenges with divergence due to a lack of communication between the frontend and backend teams - our integration work took a significant amount of effort and collaboration. We also struggled with focusing too much on the details - while we had a lot of cool features, it would have been much less stressful to focus on a smaller and simpler-looking MVP product first.

Accomplishments that we're proud of

We are very happy with how our frontend turned out, especially features like dragging and dropping to select a schedule and a clean interface.

We're also proud of how we were able to incorporate lots of parameters into our algorithm, such as maximum slot size, time preferences, and the maximum number of slots someone can work.

What we learned

Our biggest lesson was about the importance of writing stuff down. Lots of our design ended up changing as we developed quickly, and the main thing connecting the new stuff to the old was our documentation.

What's next

Next up on our roadmap is more integrations with enterprise systems, like OAuth2 for user authentication and the ability to import from different data sources. Then the plan is to show this to the lead course coordinator in UBC CS, and see where we go from there!

+ 3 more
Share this project:

Updates