Inspiration

We wanted to reach new heights by more properly managing our time and having realistic assistance in this endeavor. We needed a way to review our past actions and use that to make actionable suggestions for our future plans.

What it does

We created a calendar app that provides feedback on tasks put in by the users to suggest time changes to what they submit. These suggestions are based on a record of past tasks that are stored in MongoDB. If users mark that past tasks took longer than expected, or if they create a new task that is significantly shorter than their event history, Gemini can suggest increasing the time for this task. It also has all the functionality of a standard calendar, including task tags, easy task addition, and day, week, and month views. The tags that the tasks are separated by allow for easy separation of tasks, and give an easy element to go from for searching with MongoDB.

How we built it

MongoDB is the main database for our application, and most of our structure is based on implementing information from it. Within Mongo, our cluster contained 3 main collections: users, tasks, and tags. Users store users' email addresses and user ids. Tasks store task name, description, time, duration, tag, and task id. Tags store tag names, descriptions, and tag ids. The collection that is most frequently written and drawn from is the tasks bucket. New tasks get stored in it on creation, and during review, our agent utilizes MongoDB Atlas Vector Search to find past tasks that are related to the current task. This search is filtered by the tag associated with the task, and also dissociated with its own id to ensure it doesn't draw itself from the database. We also have a secondary database solely for user login information and the implementation of email verification. This database was supabase and it allowed for a very easy setup and implementation.

Gemini is the primary llm that creates suggestions for our application. This is implemented using langgraph as the main structure for the agent. The agent has 2 primary nodes, one that gathers information to feed to Gemini, and the other structures a Gemini call to provide an output to the user. This call either determines that the allotted time is fine as is or gives a suggestion for a time increase. We decided not to allow it to decrease the time as this is to prevent stress on users, and we worried that this could lead to it creating unreasonably short task windows for not well-described tasks.

Challenges we ran into

The largest and foremost problem we needed to solve was the interaction between the frontend and backend of our application, and for our teammates. This not only required a large amount of troubleshooting and the use of Gemini to learn new concepts, but also communication within our team of the exact structure of the different sides of our application. Before this, we had a more basic problem we needed to overcome: the direction that we intended to take. This stemmed from us all having different ideals and understanding of the prompt that was given to us. However, during our planning phase, we continually returned to the idea of time management, which landed on our current project. Finally, the last recurring problem was using git and having merge conflicts. Though these were shorter compared to the other problems that arose, they were still very prevalent, and show our need for working in a structured-team environment more often.

Accomplishments that we're proud of

We both demoed and publicly deployed a full-stack application within the span of 24 hours. This was accomplished by a team in our first Hack-a-thon and our first large-scale project together. This is something we are very proud of, and it is not what we expected to be able to finish pre-development.

What we learned

Primarily, we learned how to utilize MongoDB to fully leverage its capabilities. This was a vital skill for our project and took a significant portion of our time, but it was a venture that was well worth it. Not only does it create the backbone for our current project, but we already have ideas for future projects that we can create using a similar framework.

What's next for FlowState

The first step we would like to take with this project is calendar integration with major providers. The first ones we would like to get for this are Canvas, Outlook, Gmail, and Apple calendars. These would allow users to easily convert from their current platform to ours without having to manually add events or tasks. Secondly, we would like to add a future task reminder/preparation system. This would inform users of the most significant events approaching and what types of preparation they should begin doing for these events. This increases our original goal of an app that is focused on time management and leads to better use of user time.

Built With

Share this project:

Updates