Inspiration

Every VT student registers for classes blind. The registration system tells you a schedule is valid, but not what it's actually like: can you make it from Torgersen to Whittemore in 10 minutes? Is that professor's grade history all over the place? We wanted students to see the real cost of a schedule before they commit.

What it does

HokieLens scores a set of courses out of 100 and breaks the risk down per course. It combines grade distributions, professor difficulty, class times, and building locations into:

  • a schedule risk score with per-course risk badges
  • walking times between back-to-back classes on a campus map, with tight walks flagged
  • an expected GPA range with a confidence label
  • what-if swaps: swap one course and watch the score move (49 → 19 in our demo)
  • Ask Gemini: plain-English explanations grounded in the schedule's own data

How we built it

  • FastAPI backend (Python) with a five-axis risk engine: workload, exams, travel, professor variance, grades. Grade stats use empirical Bayes shrinkage, and walking times use a Tobler hiking-function model
  • React + Vite + TypeScript + Tailwind frontend on Vercel, backend on Render
  • Gemini API for explanations, proxied server-side so the key never reaches the browser, with a grounded fallback if Gemini errors or times out
  • Live on hokielens.courses, with an agent card at /.well-known/agent-card.json (GoDaddy ANS)
  • Student impact analysis with a Databricks-importable notebook and CSVs (Deloitte x Databricks)
  • 200+ backend tests, and fixture scores stay fixed so the model is deterministic

Challenges we ran into

Keeping the risk model explainable instead of a black box, making the scores stable and testable, and wiring generative AI in without letting it invent facts.

What we learned

Grounding an LLM in real schedule data makes it far more useful and trustworthy than free-form chat.

What's next

Live Banner data, real section seat counts, degree-audit-aware planning, and friend schedule overlap.

Built With

  • databricks
  • fastapi
  • gemini-api
  • godaddy-ans
  • playwright
  • python
  • react
  • render
  • tailwindcss
  • tanstack-query
  • typescript
  • vercel
  • vite
Share this project:

Updates

Submission history