Course Outline to Calendar
Inspiration
It was the start of another semester, and I found myself doing what I always did manually typing out every lecture time, assignment deadline, and exam date from five different course syllabi into my Google Calendar. Twenty minutes into the first PDF, I thought: there has to be a better way.
That's when the idea hit me: what if I could just upload my course outlines and have AI extract everything automatically? No more squinting at poorly formatted PDFs, no more missing deadlines because I forgot to add them. Just upload, review, and done.
What it does
Course Outline to Calendar transforms course outline PDFs into importable calendar files in under two minutes. Students upload their syllabi, and our AI extracts lectures, assignments, exams, and office hours including recurring patterns like "MWF 10-11am" and generates a single .ics file that works with Google Calendar, Apple Calendar, and Outlook.
The workflow is simple:
- Upload - Drag and drop multiple course outline PDFs
- AI Extracts - Automatically detects all events, dates, times, and recurrence patterns
- Review - Preview and edit events in an interactive calendar
- Export - Download one
.icsfile for all your courses
How we built it
We built this with a tech stack optimized for speed and reliability:
- Frontend: Next.js with TypeScript for a responsive UI, FullCalendar for the interactive preview
- Backend: FastAPI (Python) for handling PDFs and API routes
- AI Layer: LangChain with OpenAI/Anthropic models for intelligent extraction
- Calendar Generation: iCalendar (RFC 5545) standard for universal compatibility
The extraction pipeline has multiple stages:
- Extract raw text from PDFs using
pypdf - Feed text to an LLM with carefully crafted prompts that understand course outline structure
- Normalize dates and times (handling "Feb 15" → infer year from semester context)
- Validate extracted data (is the lecture time reasonable? is the date within the semester?)
- Flag low-confidence extractions for user review with a confidence scoring system
Challenges we ran into
PDFs are hostile territory. Text flows across columns, tables break mid-page, and dates can be formatted in a dozen different ways. Some syllabi had "Week 3" instead of actual dates. Others had "Assignment due 11:59pm" with no date at all. We had to build intelligent date inference that understands semester context.
Recurring events are deceptively hard. Early versions treated "Lectures: TTh 2:00-3:15pm" as a single event spanning the entire semester. Calendar apps would show a three-month-long block instead of individual Tuesday/Thursday classes. The fix required deep understanding of iCalendar's RRULE format:
DTSTART:20220913T140000 # First Tuesday at 2:00 PM
DTEND:20220913T151500 # Same day at 3:15 PM (not semester end!)
RRULE:FREQ=WEEKLY;BYDAY=TU,TH;UNTIL=20221206
Timezone handling was a nightmare. One missing TZID=America/Toronto identifier and Google Calendar would shift events by 5 hours. We had to ensure consistent timezone handling throughout the entire pipeline.
AI hallucinations were real. LLMs occasionally made up dates ("Lecture on Feb 30th") or assigned random times to deadlines. We added post-processing validation to catch impossible dates and flag suspicious extractions before they reach the user.
FullCalendar quirks required specific event formats. Recurring events needed startTime, endTime, and daysOfWeek properties not the standard start/end we used for one-time events. Debugging why events showed in the "all-day" section instead of their scheduled time slots took hours.
Accomplishments that we're proud of
We built a tool that actually solves a real problem. Every semester, students waste hours on manual data entry. We've automated that completely.
The extraction accuracy is solid. Our multi-stage validation catches most errors, and the confidence scoring system flags uncertain extractions for review. Users can trust the AI while maintaining control.
Multi-course support works seamlessly. Upload five syllabi at once, get one unified calendar file. No juggling multiple exports.
The UX feels polished. Small details matter 1-second tooltip delays, mouse position tracking, smooth animations. It's not just functional, it's pleasant to use.
Universal compatibility. Following the iCalendar RFC exactly means our exports work everywhere Google Calendar, Apple Calendar, Outlook, you name it.
What we learned
- Standards matter. The iCalendar RFC is dense, but following it precisely ensures compatibility with every calendar app. There's no room for "close enough."
- Context is everything. PDFs don't just need text extraction they need understanding. Is "10-11" a date range or a time range? Context clues are crucial.
- User experience is in the details. Tooltip delays, button visibility, error messages—small things separate "clunky" from "polished."
- Validation is non-negotiable. AI is powerful but not perfect. Human-in-the-loop review catches errors before they become missed exams.
- Multi-stage pipelines work. Break complex problems (PDF → Calendar) into discrete steps (extract → parse → validate → generate). Each stage can be optimized independently.
What's next for CALEND
Smarter date inference. We want to handle "Week 3" and "Reading Week" automatically by extracting semester calendars from university websites.
Multi-language support. Right now we assume English syllabi. International students need this too.
Mobile app. Skip the download step preview and sync directly to your calendar from your phone.
Smart reminders. Different event types need different reminders. Assignments should alert 2 days before, exams should alert 1 week before, lectures don't need reminders at all.
Integration with learning management systems. Pull syllabi directly from Canvas, Blackboard, or Moodle instead of requiring PDF downloads.
Collaborative editing. Let study groups share and refine extracted calendars together.
The core problem is solved. Now we're thinking about how to make it indispensable.
Built with too much coffee, a healthy fear of PDF parsers, and the belief that tedious tasks should be automated.
Built With
- fastapi
- icalendar
- langchain
- next.js
- pydantic
- pypdf
- pytest
- tailwind
- typescript
- uvicorn
Log in or sign up for Devpost to join the conversation.