Inspiration

College calendars show when things are due, but they never show when you should actually do the work. The moment something changes (a midterm moves, a rehearsal gets added, you miss a day), the whole plan falls apart and you're left dragging blocks around by hand.

I wanted a single place that holds both academic deadlines and personal tasks, so I don't have to manually transfer everything into Google Calendar, and that can rebuild the plan when life changes.

What it does

Quill is a semester planner that keeps academic deadlines and personal tasks in one place.

  • One feed in, a full plan out. Paste one calendar feed (Canvas or any iCal) and Quill builds a realistic weekly study plan around your deadlines, fixed commitments, and capacity. No more copying every assignment into Google Calendar by hand.
  • Replan in plain English. When life changes, such as "my midterm moved to Thursday and I have rehearsal that night," you just type it. Quill replans the week with Gemini, shows the tool calls it made, explains every change, and updates your schedule live.
  • Study tab. A timer and checklist, so planning and actually doing the work live in the same app.

How I built it

  • Backend: FastAPI with a single JSON file for state
  • Frontend: Next.js + TypeScript
  • Planning: Gemini via function calling, with tools for adding, moving, and deleting blocks, plus a validator that enforces locked exams, no overlaps, waking hours, and daily capacity
  • Views: a month home view, a weekly plan view with a visible tool-call log, a Study tab with a timer/stopwatch music playlists, task checklist, and a shareable recap card

Challenges I ran into

  • Reliable replanning. Early on, Gemini would propose invalid schedules (blocks past deadlines, overlapping times), so I had to build a strict validator plus a retry loop.
  • Matching requests to the right block. Natural-language requests like "move Saturday's assignment" would sometimes grab the wrong item.

Accomplishments that I'm proud of

  • The core replan loop works: you can type "add a rehearsal Friday 7–9pm," "move my midterm to Thursday," or "delete the club meeting," and the week updates with visible tool calls and an explanation.
  • The validator actually prevents bad plans instead of silently accepting them.
  • A clean Study tab and a shareable recap card
  • A UI that looks intentional instead of like a default dashboard.

What I learned

You have to design the tools and the validator carefully, or the model will generate plans that look fine until they aren't.

What's next for Quill

  • Study-block reminders and notifications
  • Drag-and-drop editing of the generated plan
  • Per-course workload and difficulty weighting
  • Export plan back to a calendar (.ics)

Built With

Share this project:

Updates

Submission history