ScheduGator: AI-Driven Academic Schedule Optimizer

Inspiration

As Gator Engineering students, we realized that the "Degree Audit" is often where academic dreams go to die in a wall of unorganized text. Navigating Critical Tracking (the "Gold Rules"), "double-dip" general education requirements, and the daunting 24,000-word Writing Requirement feels like a full-time job for students. We wanted to build an advisor that actually understands the nuance of a UF student's journey—from the Innovation District to the Marston Science Library.

What it does

ScheduGator is an AI-driven academic optimizer that transforms messy UF degree audits into actionable, color-coded weekly schedules.

  • Bulk Enrollment Scraper: Instantly parses "Class #XXXXX" codes from raw One.UF text and populates a calendar in a single turn.
  • Dynamic Requirement Discovery: Automatically identifies technical elective prefixes (like COP, POS, or EML) based on the student's selected major.
  • Conflict & Prerequisite Guardrails: Checks the user's current schedule and prevents them from adding courses if the prerequisite isn't already satisfied.
  • Universal Requirement Filters: Native support for Civic Literacy, Quest 1/2, International (I), and Diversity (D) boolean searches.

How we built it

The project is built on a "Hardened Agentic" architecture designed for both performance and security:

  • Frontend: Built with React and Tailwind CSS, featuring a responsive mobile-first design and a custom "Gator Blue/Orange" palette.
  • Brain: Powered by Gemma 3 via a custom Flask API. We implemented a Hierarchy of Instructions to ensure the AI stays strictly within its academic role boundary and ignores adversarial prompt injections.
  • Logic: A sophisticated tool-calling system using search_catalog and add_course functions. We used a strict JSON-only protocol to ensure zero-latency communication between the LLM and our PostgreSQL backend.

Challenges we ran into

  • The "Dumb" Tool Call: Early versions of the AI tried to search the catalog using generic keywords like "CS electives" instead of specific UF prefixes. We solved this by implementing Dynamic Elective Discovery, which forces the AI to scrape valid prefixes from the major's requirement JSON first.
  • JSON Parse Errors: Dealing with LLM "chatter" before tool calls caused our backend to crash. We built a custom "Nuclear Option" guardrail in the system prompt to enforce raw JSON responses.
  • Mobile Responsiveness: Ensuring the "Export Calendar" button didn't break the layout on smaller viewports required careful CSS "viewport-fit" adjustments and flexible flex-box containers.

Accomplishments that we're proud of

  • The Security Layer: We built a "Hardened Advisor" that successfully refuses out-of-scope prompts, making it safer for potential university deployment.
  • Multi-Turn Reasoning: ScheduGator can remember your current schedule and check prerequisites in real-time before suggesting a search.
  • Zero-Manual Entry: You can paste a messy 20-line text block from One.UF, and the bot will extract and add 5 courses simultaneously in one turn.

What we learned

We learned that UX is the differentiator. As my dad pointed out during development, "UX/UI is what makes it pop". We moved beyond a simple chatbot to include color-coded courses (e.g., Math as Orange, Programming as Blue, and Critical Tracking as Green) to improve human readability. We also mastered the "Gemma Tool-Calling" flow, which is far more complex than a standard RAG pipeline.

What's next for ScheduGator

  • RateMyProfessor Integration: Automatically showing instructor quality scores and "Would take again" percentages alongside section IDs.
  • Prerequisite Mapping: Generating a full 4-year visual "Flowchart" of prerequisites using LaTeX and Mermaid diagrams.
  • Live One.UF Sync: Moving from copy-paste to a direct browser extension integration for real-time schedule management.

Built With

Share this project:

Updates