Inspiration

Every semester starts the same way: five syllabi in five different formats, and an hour of copying due dates into a calendar by hand. Grade weights get lost too, so by finals week most students have no idea what score they actually need. I wanted a tool that reads a syllabus the way a student does and does the busywork for them.

What it does

  • Upload a syllabus PDF. Gemini reads it directly, including tables and messy layouts.
  • Extracts every graded item (exams, quizzes, homework, labs, projects) with dates, times, and grade weights.
  • Flags problems: weights that don't add to 100%, "TBA" dates, and dates it had to compute (like "Thursday of Week 13").
  • Review & edit: every item is editable because AI can make mistakes, and the student should have the final say.
  • Exports a .ics calendar with reminders that imports into Google, Apple, or Outlook Calendar.
  • Crunch weeks: highlights the weeks with the most grade weight due.
  • Grade calculator: enter your scores so far and see the average you need on the remaining work.
  • Ask your syllabus: questions like "What's due in the next two weeks?" are answered by Gemini using only the extracted data.

How I built it

  • Google Gemini API is the core. The PDF goes to Gemini as raw bytes, and I use structured output with a Pydantic response_schema, so Gemini always returns JSON of the exact shape the app expects.
  • Python + Streamlit for the web app, which let me build a working UI quickly as a solo builder.
  • Plain Python for the math. The LLM handles the fuzzy part (reading documents); deterministic code handles calendar generation and grade arithmetic, so the numbers are exact:
  • Unit tests cover everything that doesn't call the API.
  • Deployed on Streamlit Community Cloud. All prompts are documented in PROMPTS.md.

Challenges I ran into

  • Syllabi don't agree on how to write dates. "Oct 14," "Week 7 Thursday," and "TBA" all show up. The prompt has explicit rules: compute week-based dates and flag them, and return null instead of guessing.
  • Stopping the model from inventing things. Allowing null fields and a warnings list gave Gemini a way to express uncertainty instead of hallucinating.
  • Double-counted weights. The first "crunch weeks" calculation counted the Final Project's 10% twice because it had two deliverables. A unit test caught it.

Accomplishments that we're proud of

  • Going from a prompt to a working, deployed product in one day.
  • Reliable structured output: every Gemini response matches the schema, so the app never breaks on a malformed reply.
  • Keeping a human in the loop. Students can review and fix anything before it reaches their calendar.
  • Exact grade math, because it's done in code instead of by the AI.

What I learned

  • Structured output with a schema is what makes LLM results reliable enough to build a product on.
  • Let the LLM read; let code calculate.

What's next

  • Direct Google Calendar sync
  • Multi-course semester dashboard
  • Canvas integration to pull in real scores

Built With

Share this project:

Updates

Submission history