William & Mary Degree Map
A web-based academic planning platform that replaces W&M's fragmented advising workflow with an AI-assisted four-year scheduler, live prerequisite validation, and a searchable catalog of every PATH course.
Degree Map is a web-based academic planning platform that replaces William & Mary's fragmented advising workflow with a single tool combining AI-generated four-year schedule planning, drag-and-drop course placement with live prerequisite validation, COLL curriculum requirement tracking, and a searchable catalog of all 1,574 courses scraped directly from PATH registration. Built end-to-end through vibe coding with Claude Code as the primary development agent, the result is a full-stack Next.js application backed by PostgreSQL on Supabase with a prerequisite graph of 692 course links.
The brief.
Academic advising at William & Mary is currently a job delegated to professors in the department of a student's major. Professors often don't know the ins and outs of the COLL/proficiency requirements or the constant changes to the major catalogs. This can lead to students being forced to take classes they are not interested in, enroll in summer classes, or even delay their graduation. The current PATH registration only lets students look as far as their next semester and has no connection to Degree Works for tracking if a student is meeting their COLL/major requirements.
Students have had to take high credit counts or pay for extra summer classes to make up for missed prerequisites, unknown major requirements, or being unable to get into classes with the correct COLL attributes in a given semester. In the most extreme case, these problems could lead to students having to take an extra semester, driving down the university's 4-year graduation rate.
Target: Liberal arts students at colleges like William & Mary navigating varying general education requirements, proficiencies, and constantly changing major catalogs — plus the faculty advisors who currently shoulder that workload.
Within roughly three weeks, I was able to build a working piece of software from the ground up that offers a solution to a real problem.From the write-up
The landscape.
| Tool | Approach | Weakness | Our edge |
|---|---|---|---|
| Stellic | Commercial degree planning and advising platform | Requirement tracker, drag-and-drop layout, and prerequisite validation only — no conversational advising layer | Adds an AI advising agent that answers real-time questions about COLL curriculum, graduation requirements, and study abroad |
| PATH registration (W&M) | Semester-by-semester course registration UI | Only lets students look as far as their next semester; no connection to Degree Works | Plans a full four years at once and validates against the live catalog scraped from PATH |
| Degree Works | Backend requirement audit at W&M | Read-only audit, no scheduling, no AI | Schedules and audits in one place, with prerequisite-aware drag-and-drop |
Degree Map's edge over commercial planners like Stellic is the embedded AI advising agent: students can ask in real time about COLL curriculum, graduation requirements, and study abroad opportunities, freeing professor advising meetings to focus on higher-value topics like internships, research, and career advice.
The system.
The platform is a Next.js web application with four major feature clusters: student profile and degree-requirement tracking, an AI-powered schedule generator, an interactive multi-semester planner with a weekly calendar view, and a prerequisite-enforced course catalog. The planner's main interface is divided into three panels — a left sidebar listing all semesters, a middle Monday–Friday weekly calendar scaled at one pixel per minute (60 px/hour, spanning 6:00 AM–10:00 PM), and a right-hand searchable, filterable catalog showing all 1,574 courses scraped from W&M PATH registration.
Drag-and-drop is the primary interaction. A student drags a course card from the right-side catalog onto the active semester in the middle calendar; on drop, the planner checks whether all prerequisite courses have been placed in an earlier semester. If not, a warning toast is shown and the course is rejected. Courses already placed in the plan are dimmed in the catalog to prevent duplication. Clicking a course block opens a popover with the course title, professor, meeting time, and a remove button.
The Student Info page captures the student's class year, declared major, and catalog year. When the declared major matches a recognized W&M major, the degree audit runs against that major's requirements automatically. The requirements panel displays progress across all COLL curriculum attributes (ALV, CSI, NQR, COLL 200/400) and major-specific course requirements, each shown as a completion badge derived from the courses placed in the plan.

The implementation.
The frontend is Next.js 14 (App Router) with TypeScript, Tailwind CSS, and @dnd-kit for drag-and-drop. Client state is managed by three Zustand stores: usePlannerStore (semester layout, course placement, per-course completion status), useChatStore (AI conversation history), and useWhatIfStore (what-if major exploration). The source totals approximately 8,200 lines of TypeScript across three page routes, ten API route handlers, and a supporting library layer. The backend is PostgreSQL on Supabase accessed via Prisma ORM. The schema's central Course model carries gen-ed designation fields (collAttribute, alv, csi, nqr), a majorRestriction column populated from PATH registration data, and a Section relation storing Banner CRN-level scheduling data (days, times, instructor, location).
Authentication uses Supabase Auth with a session-cookie-validated withRole middleware factory enforcing three roles: student, advisor, and admin. Course search supports eight filter parameters resolved to Prisma where clauses, with results cached in an in-memory cache at a five-minute TTL. The schedule generator runs as a pure browser-side function. It performs a topological sort (Kahn's algorithm) ordered by course level, places courses using a level-ordering constraint and lowest-load semester heuristic, then runs a retry pass to guarantee all required courses are placed. Elective and fill-pool selection is randomized via Fisher–Yates; courses with a majorRestriction not matching the student's major are excluded before selection.
The AI advisor calls claude-sonnet-4-6 through POST /api/chat, streaming responses to the client via Server-Sent Events. A structured student context block (completed, transfer, and planned courses) is prepended to the first user turn. Token usage is recorded per-call in lib/cost/tracker.ts, persisting cumulative spend to a gitignored cost-tracker.json and logging a warning at each $0.50 milestone. Course data is sourced by scraping W&M's PATH registration API, which accepts unauthenticated POST requests and returns structured JSON. A custom parser extracts prerequisite course codes and major restrictions from a registration_restrictions HTML field, storing 692 prerequisite links and 54 major-restricted courses.

Built with AI.
Where AI helped
- UI layout — Claude was receptive to natural language descriptions of the desired interface, scaffolding the planner shell without iteration.
- API and data pipeline construction — the POST request format, JSON parsing, HTML field extraction, and Prisma upsert logic all worked without debugging.
- Course catalog fetch in the planner page required no debugging.
Where AI struggled
- Code-data connection — Claude would implement backend functionality that was logically correct but had no data to back it up; the prerequisite enforcement system worked in the generator and drag-drop handler, but the Prerequisite table had zero rows because the scraper had not been run on the correct data.
- Properly accounting for real data flow — Claude tested on mocked data and failed when manually tested with real inputs; the operator had to point Claude to errors and force it to run real data through the program.
- Incorrect data scraping — Claude often scraped data incorrectly due to formatting variation or under-specified prompts; specific worked-examples and detailed output specs were required to fix it.
Specificity is vital when vibe coding — the quality of code produced is only as good as the quality of the prompt. Planning is critical to guide the agent in the right direction from the start, and any data scraped or acquired by an AI agent must be verified before being put into production.
The evidence.
Limits & next.
Limits
- Course data is only as comprehensive as what can be scraped from public PATH endpoints — some niche or recently changed offerings may be missing or stale.
- Login uses Supabase Auth rather than W&M's real SSO, because the project did not have access to the university's authentication software.
- The prerequisite graph depends on parsing a free-text HTML field; edge cases in registration_restrictions formatting can drop a link.
- AI advisor cost is tracked but not capped — the warning at each $0.50 milestone is observational, not enforced.
Next
- Major/minor recommendations tuned to current job-market trajectories.
- Add study-abroad terms into the planning surface as first-class semesters.
- Build an in-app platform for reviewing courses and professors.
- Match students interested in research with advisors working in that area.