Inspiration

Procrastination is a response to an overwhelming task. It's often told that you should break large tasks into little ones, and by watching the pennies, the dollars will handle themselves. But what if you can't find the pennies? I've seen it time and time again where my peers are so overwhelmed with clubs, office hours, presentations, labs, and assignments that they can't even rest to open the syllabus and jot down all the important dates, let alone find deep working time. PitStop seeks to solve this issue by fuelling students with perfectly balanced calendars that let them accelerate their learning and take pole position (1st place)!

What it does

PitStop can parse your course syllabus and immediately note down the due dates of important assignments, quizzes, and midterms. Additionally, it extracts key topics from the syllabus and offers an area for you to regularly reflect on your own understanding. Your self-reported understanding is then used by PitStop's LLM as context for it to schedule conflict-free deep working time, with a topic recommendation for your most pressing course.

How I built it

As a solo hacker who cared much more about the LLM, I wanted the front-end to not cause any integration issues. Because of this, I chose a simple Flask HTML/CSS front-end. On the inside, I attached OAuth2.0 to a Google Cloud Platform project instance for Google Calender integration. The LLM of choice was OpenAI's GPT-4 model, where I fed a detailed prompt attached context from the existing calendar information, the assignment due dates, and the user's own understanding of course concepts.

Challenges I ran into

It was a scrappy battle to ensure that the LLM was returning a usable output. Despite a very detailed prompt, it would often disagree or hallucinate information; as their non-deterministic nature allows them to. I tried a variety of solutions, ranging from doing a standard HTML scrape of the syllabus, double-prompting with Google Gemini, and even translating the prompt into Chinese to try to save tokens and reduce attention loss. In the end, I managed to find a decently consistent prompt with randomness that could be dealt with by an external data cleaning function.

Accomplishments that I'm proud of

This is only my 2nd hackathon, and my first one alone. I'm proud of being able to execute my creative vision to its entirety by combining my interests in RAG models with my passion to create technology that can actually benefit other people. Furthermore, I'm excited to deploy my first machine learning application. Numerous Jupyter Notebooks are still gathering dust in my GitHub account.

What I learned

I honestly spent more time ensuring that the front-end matched my vision. I learned a lot about the struggles that exist when building full-stack applications, especially without a collaborative partner to lessen the burden. I additionally learned the art of credit conservation; preserving acceptable past outputs for repeated queries and in general deepened my understanding of transformer architecture.

What's next for PitStop

I want to complete the RAG pipeline by integration a vector database (Pinecone) which would avoid some redundant calls to the LLM. Additionally, I would like for PitStop to also support course syllabi that are not downloadable pdfs; ones that instead live as a webpage.

Share this project:

Updates