Inspiration

As students, we noticed that most missed deadlines don’t happen because of poor time management, but because information is fragmented. A single course can involve multiple tools, long syllabus, and frequent updates. We wanted to build something that works with existing materials rather than replacing them, and that reduces overhead by automating the boring parts of organization.

What it does

SyllaBuddy centralizes all the deadlines across multiple courses and platforms into a single agenda that updates itself. By leveraging generative AI, our platform parses syllabi and course schedules to automatically extract deadlines and events, allowing students to focus on learning rather than logistics.

More precisely, SyllaBuddy allows users to:

  • Securely log in and manage their courses
  • Automatically extract key events such as assignments, exams, quizzes and important deadlines from syllabus
  • View all events in a centralized agenda
  • Update automatically when the source material changes
  • Manually edit events to override or correct AI output

How we built it

We designed SyllaBuddy as a full-stack web application:

  • Authentication: We implemented Auth0 for secure login and authorization with the @auth0/nextjs-auth0 SDK. Users log in and out through Auth0’s built-in routes (/auth/login and /auth/logout), and after a successful login they are automatically redirected to the main dashboard page (/main) using the returnTo parameter. Authentication state is accessed on the client via the useUser hook, which provides the current user’s profile and loading status. The dashboard layout reacts to this state to display the user’s login status and appropriate actions, while session management is handled securely by Auth0 using HTTP-only cookies.
  • Frontend: We presented a responsive dashboard for viewing and managing agenda items. After login, the user is redirected to the Main page. Navigation links change the page without reloading the site. Then the main page fetches events from the API when it loads. React state updates the UI when data arrives. The layout and content update automatically as the user navigates.
  • Backend: It is implemented as an automated web scraper using Python and Selenium to log into the course platform, navigate course pages, and download syllabus-related files. It launches a configured Chrome browser, waits for the user to manually log in, then automatically detects available course links from the dashboard. For each course, the script navigates to the content area, searches through regular and shadow DOM elements using predefined keywords, opens relevant folders or files, and triggers downloads when a matching syllabus or outline is found. All downloaded files are saved locally to a designated directory, and the process runs sequentially for each course before closing the browser.
  • Database: The database is a single Event table that stores all calendar items (either manually created or AI-generated) which uses shared fields like startAt, allDay, notes, and source metadata. Because both manual and Gemini-generated events are stored in the same schema, they automatically appear across the full calendar and mini calendar views without any additional frontend logic, keeping the UI purely presentational and the data flow centralized on the server.

Challenges we ran into

  • Auth0 Integration: Integrating Auth0 with Next.js was challenging because authentication needed to work across both frontend and backend. As authentication was a new tool for our team and required careful handling.
  • Automatic Calendar Sync: Syncing the calendar automatically was difficult because each course stores its syllabus in different folders and formats. The backend needed logic to intelligently locate the correct syllabus, parse its content, and track changes to update deadlines accurately, requiring careful handling of file paths, formats, and incremental updates.
  • Gemini API Integration: Integrating the Gemini API was complex because it required reading data collected by a Python script, parsing it correctly, and converting it into structured events in the database. Ensuring reliable data mapping, handling JSON schema validation, and storing results consistently in Prisma added additional layers of challenge.

Accomplishments that we're proud of

Despite the limited time, we delivered a working pipeline from syllabus input to agenda output. We’re proud of building a complete system that meaningfully integrates generative AI into a real student workflow.

What we learned

Through this project, we learned how to safely integrate generative AI into a production-style application, especially the importance of prompt engineering and output validation. We also gained experience designing APIs, coordinating team responsibilities, and working with real-world, messy data rather than idealized inputs.

What's next for SyllaBuddy

In the future, we plan to add features like notifications to alert users when deadlines are approaching, customizable calendar backgrounds for a more personalized experience, and support for other school websites beyond McGill. These improvements will make SyllaBuddy more flexible, engaging, and useful for students across different institutions.

Share this project:

Updates