Title

Syllable - From syllabus to schedule

Description

Syllable Sync turns messy syllabus PDFs into a plan you’ll actually follow. Upload once, and our Gemini-powered parser pulls out assignments, exams, and key dates, then generates a ready-to-import .ics for Google/Apple/Outlook plus a clean to-do list with due dates. You can even get a quick audio recap via ElevenLabs for on-the-go review. In under a minute, your semester is organized, saving time and helping you avoid missed deadlines.

Inspiration

Syllabi are essential, but they’re often long, inconsistent, and easy to misinterpret. Students end up manually moving dates into calendars, then still miss office hours, quiz windows, or shifting deadlines. Syllable streamlines that process into a one-minute flow: upload → confirm → plan.

The result: clear schedules, fewer surprises, and meaningful time back: ~25–33 minutes per student each semester, with even more saved by preventing missed tasks.

What it does

  • Upload in seconds: Drag-and-drop (or file picker) to add syllabus PDFs.
  • AI parsing: Gemini extracts assignments, due dates, exams/quizzes, office hours, and course details.
  • Calendar export: Generates a clean .ics file you can import into Google Calendar, Apple Calendar, or Outlook.
  • Audio recap: ElevenLabs produces a quick, light-hearted voice summary of the syllabus, great for on-the-go.
  • Flow: Upload syllabus → Gemini parses → generate .ics → (optional) listen to the ElevenLabs summary.

How we built it

Frontend

  • Stack: Next.js (React + TypeScript) with Tailwind CSS for fast, accessible UI.
  • Upload flow: Drag-and-drop / file-picker with simple progress states.
  • PDF extraction: pdf.js in the browser (server fallback for tricky PDFs).
  • Schema-first prompting: We structure the extracted text (headings/tables/bullets) and prompt Gemini to return predictable JSON.
  • Lightweight checks: Basic client-side guards (TypeScript types + sanity checks) before export.
// normalized item model
export type Item = {
  id: string;
  title: string;
  date?: string; // ISO 8601
  type?: 'assignment' | 'exam' | 'quiz' | 'lecture' | 'office_hours' | 'other';
  course?: string;
  confidence: number; // 0..1
  notes?: string;
};
  • Calendar export: Parsed items are transformed into events and packaged into a single .ics file for Google/Apple/Outlook Calendar.
  • Audio recap: A short, friendly syllabus summary is generated and voiced via ElevenLabs.

Backend

  • API: FastAPI endpoints for /parse (Gemini orchestration) and /export/ics (calendar packaging).
  • TTS: ElevenLabs streaming for low-latency playback.

Deployment

  • Frontend: Vercel
  • Backend: Railway or Render
  • Secrets & limits: Env vars for Gemini/ElevenLabs; conservative rate limits and request-size caps.

End-to-end flow

Upload PDF → pdf.js text → Gemini JSON → client checks & normalize → generate .ics → optional ElevenLabs audio summary.

Challenges we ran into

  • Wild syllabus formats: Tables, prose, and bullet lists don’t parse the same. We added structure-aware chunking and few-shot prompts tailored to each pattern so Gemini returns consistent JSON.
  • Date interpretation is tricky: Phrases like “Week 4” or “midterm window (10/10–10/12)” needed context. We map relative terms to concrete dates using course start date + meeting days, then normalize to ISO 8601 for .ics generation.
  • Calendar fidelity: Different calendars (Google/Apple/Outlook) are picky about .ics details. We iterated on timezone handling (UTC storage, local render), event durations, and all-day vs timed events to import cleanly everywhere.
  • Frontend ↔ Backend integration: Getting Next.js to play nicely with FastAPI under hackathon speed meant fighting CORS, file upload limits, and content-type quirks. We standardized endpoints (/parse, /export/ics) and added simple health checks and retries.
  • Auth scope creep: We started wiring Auth0, but token refresh/guards slowed us down. We cut auth for the demo to focus on parsing + calendar export (lesson: ship the core loop first).
  • TTS latency: Early calls buffered too long. Switching to chunked/streaming synthesis with ElevenLabs made the audio summary feel instant.

Accomplishments that we’re proud of

  • End-to-end in ~60–90 seconds: Upload a syllabus → Gemini parses → generate a clean .ics file → (optional) listen to a quick ElevenLabs audio summary.
  • Crisp, accessible UI: Fast drag-and-drop intake, clear progress states, and sensible defaults that work on the first try.
  • Calendar-ready output: Robust date normalization (ISO/UTC) and .ics packaging that imports cleanly into Google, Apple, and Outlook calendars.
  • Modular parsing pipeline: Structure-aware chunking and prompts that make adding new syllabus patterns “one function away.”
  • Battle-tested integration: Next.js ↔ FastAPI wiring (uploads, CORS, content types) stabilized under hackathon pressure.
  • Snappy audio recap: Streaming ElevenLabs TTS for a friendly, on-the-go summary of each syllabus.

What we learned

  • People + AI work best together. A quick human check beats fully automatic parsing for messy syllabi.
  • Agree on the data first. Defining a simple Item shape early made the screens, API, and calendar export fit together.
  • Small details matter. Little things, keyboard shortcuts, clear empty states, helpful toasts, make the demo feel polished.
  • Auth was harder than expected. Auth0 took more time than planned. Next time we’ll either keep login super simple or set it up on day one.
  • Hackathon time flies. Everything takes longer than you think, so cut scope early, timebox tasks, and ship the core demo first.

What’s next for Syllable

  • Direct calendar sync + reminders: Go beyond .ics with optional Google/Apple sync and native reminders (via OAuth, privacy-first).
  • Text notifications (opt-in): Smart SMS nudges for upcoming deadlines or changes, with quiet hours, frequency controls, and one-tap unsubscribe.
  • Multi-file merge: Detect and merge updated or partial syllabi (addenda, v2 PDFs) without duplicating events.
  • Smarter date logic: Better handling of “Week 4” and time windows; auto-infer times/locations from context.
  • Richer item types: Lightweight classification on top of Gemini to tag assignments/quizzes/exams and add sensible defaults (duration, location).
  • Change tracking: Show what changed between versions and let users apply updates to regenerate the .ics.
  • More ways to ingest: Email forward or a browser extension to capture syllabi directly from LMS portals.
  • Audio upgrades: Multiple ElevenLabs voices, adjustable tone/length, and downloadable summaries.
  • Accessibility polish: Strong keyboard flows, high-contrast themes, and clear screen-reader cues for the upload → export path.

Built With

Share this project:

Updates