Timesort was inspired by our team's struggles with time management. We, like millions of other college students, have to balance our academic, personal, and extracurricular life, and struggle with developing a method of effectively doing so. It often takes students years to develop an effective method to plan out their time, and even once they develop one, implementing that plan takes time and effort itself. One of the biggest contributing factors to this time-management crisis is an abundance of unscheduled time with nobody telling students what to do with it. Timesort solves this problem.
What it does
Timesort asks users to input all of their tasks while including the task's due date and the estimated amount of time the task will take. Once it has a list of all of the user's tasks, the user logs into their Google account and grants timesort access to their calendar. Timesort uses an intelligent and adaptable algorithm to populate the user's calendar with a plan guaranteed to help them finish their assignments efficiently and on time. Relevant features include:
- Each new GCal event has a link that users can click when they finish the task, and timesort will update the calendar accordingly
- If users do not indicate that they have completed a task, timesort will assume the task is unfinished and reorganize the user's calendar to allocate time to finish up the job ## How I built it Frontend:
- We used React.js for the frontend elements of the project. Using React helped keep our code clean, compartmentalized, and simplified our state management flow.
- We utilized the styled-components library to clearly and dynamically style all of our components
- The react-router library helped us turn timesort into a multiple page web application
- The react-datepicker npm package creates an easy and illustrative UI for the user to input their tasks Backend:
- We used two backend technologies: Ruby and Flask
- The Flask backend is responsible for interacting directly with the GCal API. When it receives a JSON object containing all of the user's inputted tasks and a Google access token from the Ruby server, it gets all of the user's calendar data and uses it to begin scheduling! After generating the optimized schedule with an intelligent Python scheduling algorithm, it adds a new calendar containing their personalized time-management plan to the user's GCal.
- The Ruby backend serves as a middleman between the Flask backend and the React frontend. It uses Google's OAuth2.0 flow to generate a user-specific access token allowing the Flask backend to read and write to the user's calendar. It also receives a JSON object from the React frontend containing the user task data, and sends it to the Flask backend. ## Challenges I ran into
- The Google OAuth system, particularly for the Google Calendar API, is not well-documented, and so we had a lot of trouble allowing users to log in
- There are a lot of moving parts in Timesort-- between the Ruby and Flask backends and the Google OAuth flow, we had to deal with a lot of asynchrony issues.
- While timesort works well locally, deploying the web app caused issues with the Authorization flow, and so we faced a lot of challenges in production ## Accomplishments that I'm proud of
- Despite the poor documentation of Google Calendar, our team learning how to authenticate with Google and was able to successfully read and write to the user's calendar
- The frontend is beautiful-- despite not having a product designer on our team, one of our developers was able to create a clean and effective UI design to maximize the user experience ## What I learned ## What's next for Timsort
- A notification system