19 programs · one twin · an AI that actually reads the sheet
You're a MAGE student at UMD. You're sharp — but the system isn't one linear checklist. It's degree sheets, choose-N electives, fall-only courses, prereq chains, Testudo, PlanetTerp threads, and a clock ticking toward 30 credits / 10 courses (or GCEN rules) before the 5-year policy window shows up in the rearview mirror.
Sound familiar? You've probably felt one (or all) of these:
| The pain | What it feels like |
|---|---|
| 😪 Spreadsheet fatigue | "Which bucket is this course even in?" |
| 🎯 Prereq roulette | "If I want that class in Spring, what do I need first?" |
| 📆 Offering anxiety | "Is this actually offered when I need it?" |
| 💬 Advisor time crunch | Office hours are gold — you want answers now, not after three PDFs. |
| :scales: Plan paralysis | Balanced vs. accelerated pacing — what does that mean for your transcript? |
TerpPlanner is the hackathon answer: turn scattered MAGE reality into a living dashboard, a prerequisite constellation, a drag-and-drop planner, and a Claude-powered agent that calls the same tools as the UI — so demos feel real, not scripted.
🎯 North star: We don't replace advisors or Testudo — we compress confusion so you walk in prepared.
- 🏠 Home → Build Academic Twin — transcript + program; watch progress light up.
- 📊 Overview → Degree sheet — bucket progress without squinting at PDFs.
- 🗺️ Prereq map — pick a goal course; the graph shows why order matters.
- 📋 Planner — drag courses into terms; watch the degree structure check react.
- 🤖 Agent — ask for a credit-safe next semester with bold terms + electives; watch tool traces + structured answers.
| Feature | What you get |
|---|---|
| 👥 Academic Twin | Browser-stored profile: program + transcript powers everything. |
| ⚔️ Plan Battle | Pick pacing; jump into the planner with intent. |
| 📝 Degree sheet view | Clean bucket labels; progress you can screenshot. |
| 🧭 Prerequisite map | D3 force graph: goal vs. transcript vs. still-needed. |
| 📆 Degree planner | Drag/drop terms, offering hints, conflict sniffing. |
| ⚖️ Course compare | Side-by-side; PlanetTerp-flavored "which elective?" energy. |
| 🔬 Professors & grades | Distributions + radar demo — the vibe-check layer. |
| 🧠 AI Agent (Claude) | Function-calling advisor — no API key in the browser. |
Data: curated MAGE JSON for 19 programs in backend/data/scraped/. Live bits via umd.io + PlanetTerp (where configured).
Next.js 14 (Vercel-ready)
|
| /api/backend/* (server proxy — secrets stay server-side)
v
FastAPI + Claude tool loop
|
+-- Redis (optional)
+-- httpx -> umd.io / PlanetTerp
+-- MAGE degree JSON + PDFs
| Layer | Stack |
|---|---|
| Frontend | Next.js 14 App Router, React 18, TypeScript, Tailwind, Framer Motion, D3, Recharts, react-markdown |
| Backend | FastAPI, Uvicorn, Anthropic SDK, httpx, pydantic, Redis (optional) |
git clone https://github.com/akashsv01/Terp-Planner.git
cd Terp-Plannercd backend
python -m venv .venv
# Windows: .venv\Scripts\activate
# macOS/Linux: source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env # add ANTHROPIC_API_KEY (+ optional keys)
python serve.pyHealth check: GET http://127.0.0.1:8000/health (port may differ — check your .env).
cd ../frontend
npm install
cp .env.example .env.localPoint at your API:
BACKEND_URL=http://127.0.0.1:9080npm run dev| Variable | Purpose |
|---|---|
ANTHROPIC_API_KEY |
Claude — required for agent. |
ANTHROPIC_MODEL / ANTHROPIC_FALLBACK_MODEL |
Optional model overrides. |
ELEVENLABS_API_KEY |
Optional. |
UMD_IO_BASE / PLANETTERP_BASE |
API bases. |
REDIS_URL |
Optional cache. |
HOST / PORT |
Bind address. |
CORS_ORIGINS |
Production: comma-separated browser origins (your hosted frontend URL(s)). |
| Variable | Purpose |
|---|---|
BACKEND_URL |
Proxy target for /api/backend/*. |
Never commit real .env files — only .env.example belongs in git.
| Where | Command |
|---|---|
frontend |
npm run dev / npm run build / npm run start / npm run lint |
backend |
python serve.py |
See scripts/scrape_degree_sheets.py and backend/data/scraped/. Not required for a normal run — JSON ships with the repo.
- Agent / model errors: use current Claude IDs from
backend/.env.example. - CORS: API must list your exact frontend origin (scheme + host, no path).
- Windows bind errors: try another
PORTor useserve.py. - 502 / fetch failed: wrong
BACKEND_URLor API asleep (free tier).
- UMD MAGE programs and public catalogs
- umd.io / PlanetTerp
- Anthropic Claude for the agent experience