Inspiration

We're CS students at GMU, and honestly? Planning our degree is a pain. Every semester we're asking: "What classes do I still need?", "Can I even take this class?", "Does this count toward my degree?" The existing tools are either too generic or don't know anything about GMU's specific CS requirements.

So we built something that actually gets it—a tool that reads the real GMU course catalog, checks prerequisites on the fly, and lets you see your whole degree path from day one to graduation.

What We Learned

The Tech Stack

  • PDF Parsing: Used pdf-parse to extract course data from GMU's PDF catalog. Turns out PDFs are messy and inconsistent, so we built a static catalog as backup
  • Prerequisite Validation: Built a system that checks if you've taken required classes, got a passing grade (C or better), and that the class actually counts toward your degree
  • AWS Lambda + S3: Deployed the backend to Lambda and frontend to S3. Learned about cold starts, environment variables, and why serverless is both awesome and annoying
  • MongoDB: Designed schemas that handle academic history, planned courses, and all the edge cases (retakes, nullified courses, etc.)

The Hard Parts

  • Grade Rules: GMU says "at most one C- or D grade" but C and F are fine. Had to distinguish between C (passing) and C- (not passing). Took way too long to get right.
  • Retake Logic: When you retake a class, we compare grades and automatically nullify the lower one. Sounds simple, but handling all the edge cases was tricky.
  • Roadmap Planning: Students want to plan future semesters, but we were requiring grades for classes they hadn't taken yet. Made grades optional and added a "Planning" option.

How We Built It

The Stack

  • Frontend: SvelteKit 5 with TypeScript
  • Backend: SvelteKit API routes (deployed to AWS Lambda)
  • Database: MongoDB (stores student profiles, academic history, etc.)
  • Hosting: AWS S3 for frontend, Lambda for backend
  • AI: Anthropic Claude API for the chatbot

The Main Features

  1. Course Catalog: 100+ GMU CS courses with prerequisites, credits, and requirements. We parse the PDF but have a static catalog as the source of truth.

  2. Academic History: Track all your classes with grades, semesters, and whether they count toward your degree. Real-time GPA and credit calculations.

  3. Roadmap Planning: Plan future semesters by adding "potential courses." The system checks prerequisites across your entire roadmap, not just completed classes.

  4. Prerequisite Validation: When you try to add a class, we check:

    • Have you taken the prereqs? (in your history or planned earlier)
    • Did you pass with C or better?
    • Do the prereqs actually count toward your degree?
  5. Degree Progress: Automatically calculates how many credits you've earned, your GPA, and what classes you still need.

How It Works

You type a course number → We look it up in the catalog → Fetch prerequisites → Check if you've met them → Validate your grade → Calculate if it counts → Update your progress. All in real-time.

Challenges We Faced

1. Prerequisite Validation Was Way Harder Than Expected

The Problem: Prerequisites need to check not just completed classes, but also planned classes in earlier semesters. Plus, the prereq needs a passing grade (C or better) AND it needs to count toward your degree.

What We Did: Built a validation system that checks all of that. It looks in your academic history, validates the grade, checks if it counts (using a cache to avoid hitting the API 100 times), and even looks at your roadmap to see if you've planned the prereq earlier.

2. PDF Parsing Is Terrible

The Problem: GMU's course catalog PDF has inconsistent formatting. Sometimes courses are on one line, sometimes they're split. Prerequisites are formatted differently throughout.

What We Did: Gave up on relying solely on PDF parsing. Built a static catalog with all the courses we care about, and only use PDF parsing as a fallback. Also added multiple file path checks because the PDF location changes between dev and production.

3. Grade Rules Are Confusing

The Problem: GMU says "at most one C- or D grade" but C (without minus) and F are fine. We kept blocking C grades thinking they were below C.

What We Did: Created a GRADES_BELOW_C array that explicitly lists ['C-', 'D+', 'D', 'F']. C is NOT in that list, so it passes. Took us way too long to realize the issue.

4. Svelte 5 Migration Was Painful

The Problem: Started with Svelte 4 ($: reactive statements), then Svelte 5 came out with runes. Had to rewrite everything.

What We Did: Converted all $: to $derived or $state. Spent hours debugging {@const} errors because $derived.by() can't be inside {@const} blocks. Eventually got it working and the code is actually cleaner now.

5. Natural Science Requirements

The Problem: We marked Physics as required, but GMU accepts any lab science sequence (Bio, Chem, Geo, or Physics).

What We Did: Changed all science courses to required: false and updated the logic to accept any valid lab science sequence. Updated comments to clarify.

6. Potential Courses Needed Grades

The Problem: Students wanted to plan future semesters, but we required grades for everything. You can't have a grade for a class you haven't taken yet.

What We Did: Made grades optional. Added "Planning" as a default option. Now you can add classes to your roadmap without grades, and the system still validates prerequisites by checking if you've planned them in earlier semesters.

7. Real-time Progress Calculation

The Problem: Every time you add/remove a class or change a grade, we need to recalculate your entire degree progress. That's a lot of API calls.

What We Did: Built a courseCountsCache that stores whether each course counts. Process all courses in parallel, cache the results, and use Svelte's $derived to automatically recalculate when data changes.

What It Does For Students

  • Saves Time: No more Excel spreadsheets or digging through the catalog
  • Prevents Mistakes: Can't add a class if you haven't met the prereqs
  • Helps You Plan: See your entire degree path and plan semesters ahead
  • Keeps You Motivated: Watch your progress bar fill up as you get closer to graduation

What's Next

  • Connect to GMU's registration system
  • Support BS vs BA tracks
  • Check for schedule conflicts
  • Mobile app (maybe)
  • Export your degree audit as a PDF

Built With

Share this project:

Updates