Inspiration

Every year, elementary schools across the province of BC are tasked with coordinating the schedules of all of their teachers, for every week of the year. Due to specifics in their union contract and the BC Provincial Regulations, no software currently exists to build schedules that satisfy the unique constraints and requirements of teachers. Consequently, they're forced to do it all by hand. That's why we've decided to create a tool that automatically does it for them.

What it does

PrimaryTime builds the optimal weekly schedule for an elementary school. That is, one where there are no problematic overlaps in teachers' schedules.

How we built it

Client-side:

  • UI was built using Astro + React

Server-side:

  • Schedule Generator was built using a genetic algorithm in Python

Challenges we ran into

We struggled the most with creating the front-end framework, as none of us had very much experience using Javascript frameworks. It was also quite challenging to design the algorithm that generated the schedules for the teachers, as doing so requires satisfying a large number of constraints. Thus, it was imperative for us to choose an algorithm that has low time complexity.

Accomplishments that we're proud of

  • Designing our own genetic algorithm
  • Creating a user-friendly UI
  • Building a piece of software that has the potential to improve the lives of people who dedicate their lives to inspiring and educating young children.

What we learned

  • We need more practice with React/JS :)
  • Satisfying/optimizing a job schedule is very complex
  • Being an elementary school teacher seems hard!

What's next for Primary Time

  • Give users more control over the school parameters (ie, length of recess and lunch, duration of the school day, etc).
  • Share our work with a BC elementary school teacher (Ben's mother) to have them demo the project.
  • Add the ability to deal with more constraints in schedule generation (ie, Learning assistance blocks, share gym time, etc).
  • Expand scope of the UI and allow users to save their schedules in a profile.

Built With

Share this project:

Updates