Inspiration

Every semester I get five syllabi, and each one hides 30+ dates inside a PDF: lectures, quizzes, midterms, homework, holidays. Copying them into my calendar takes an hour, and I still missed a quiz. Then a professor moves an exam and the whole thing is out of date again. I wanted a tool where the syllabus goes in once and my phone just knows.

What it does

Syllabus2Cal turns syllabi into a live calendar on your phone.

  • Upload anything: PDF, Word, screenshots or pasted text. Drop several courses at once.
  • AI extraction: finds weekly class times, exams, quizzes, deadlines and no-class days, and flags anything it's unsure about.
  • Review & edit: a month calendar and a course editor. Click to edit an exam, add an event, or cancel a single class.
  • Workload heatmap: combines all your courses week by week, so you can spot "hell weeks" before they arrive.
  • Live phone sync: scan a QR code once to subscribe. Every edit on the site shows up on your phone, with reminders before classes and exams.
  • Smart re-upload: if a professor sends an updated syllabus, re-upload it and only what changed is updated (e.g. "Midterm 1: Oct 7 → Oct 9").
  • No sign-up, free, works on any network.

How I built it

  • Backend: Python + FastAPI
  • AI: Google Gemini API reads PDFs and images natively and returns structured JSON. Text-based PDFs and Word files are pre-extracted with pdfplumber / python-docx.
  • Calendar: standards-compliant iCalendar feeds built with icalendar. Weekly classes are recurrence rules with holiday exceptions, and time zones and daylight saving time are handled correctly.
  • Storage: Firebase Firestore
  • Frontend: a single-page vanilla JS app (calendar view, heatmap, editor)
  • Deployment: Render, with the calendar feed regenerated on every request so subscribed phones always get the latest version
  • Domain: live at syllab.club (registered with GoDaddy Registry)

Challenges I ran into

  • AI output isn't deterministic. Re-uploading a syllabus sometimes produced "MATH 2101" instead of "Mathematics 2101.001", creating duplicate courses. I fixed it by sending existing courses to the model as context, plus fuzzy matching of courses and event titles (while making sure "Midterm 1" never matches "Midterm 2").
  • Unreliable free AI tier. Models were retired or overloaded mid-hackathon, so I added automatic retries and fallback to other available models.
  • Campus Wi-Fi blocks device-to-device traffic, so my phone couldn't reach my laptop server. I deployed to the cloud and moved storage to Firestore so data survives restarts.
  • Calendar edge cases: recurring classes, holiday exceptions, time zones and deadlines that end at 11:59 PM.

Accomplishments that I'm proud of

  • Built and deployed solo in 24 hours, and it's live and usable right now.
  • Tested on real Temple University syllabi: every exam was extracted correctly.
  • Edits made on the website sync to a real iPhone calendar.

What I learned

AI extraction is powerful but never 100% reliable, so good design keeps the human in the loop: review before saving, clear warnings, and easy editing. I also learned a lot about calendar standards, cloud deployment, and handling flaky external APIs.

What's next

  • Google sign-in, so your calendars follow you across devices
  • One-click Google Calendar integration for Android users
  • Canvas / Blackboard import
  • Smart study-time suggestions before heavy weeks

Built With

Share this project:

Updates

Submission history