Inspiration
Every Penn State student has stared at a What-If Report and wondered what it actually means. Which requirements are still open? Does this course count for List A or List B? What should I take next semester? The answers are all in that PDF, but they're buried across dozens of pages. Most of us end up emailing an advisor or guessing. We wanted something that reads the report for you and lets you just ask.
What it does
OnlyPlans turns your Penn State What-If Report into a credit dashboard and a conversation.
- Upload your report and get a breakdown of completed, in-progress, and remaining credits
- Every requirement comes with its source: the PDF page and the exact quote it was pulled from, so you can verify it yourself
- Ask anything in plain language, like "What should I take next spring?" or "Can I add a math minor?"
- An AI advisor agent that looks up the course catalog, checks prerequisites, searches the web for current info, and pulls up the right screen (course details, recommended courses, remaining requirements, a semester plan, or a minor planner) right inside the chat
- Multilingual answers, because a lot of students (especially international students) are more comfortable asking in their own language
- Sign in to save reports, reopen past conversations, and delete your data whenever you want
How we built it
- Frontend: Vue 3 + Vite, deployed on Vercel
- Backend: Spring Boot 3 on Java 21, deployed on Render
- PDF parsing: Apache PDFBox extracts the text, then Gemini extracts requirements as structured JSON constrained by a JSON Schema
- Agent: a tool-calling advisor with 12 tools (report lookup, catalog search, a rule-based prerequisite checker, math minor planner, web search via Tavily, UI view selection, long-term memory). Multi-step planning questions route to Luminal, with automatic fallback to Gemini
- Database: TigerData (PostgreSQL) stores reports, conversations, student memories, and agent run logs (as a hypertable with 90-day retention)
- Auth: Auth0 with JWT issuer/audience validation and per-report ownership checks
We deliberately kept the deterministic parts out of the LLM. Prerequisite checking and credit reconciliation run as code, and the AI handles interpretation and conversation. That way the plan can't quietly break a prerequisite chain.
Challenges we ran into
- Hallucinated requirements. Early on the model would confidently invent requirements. We fixed this by validating every number and checking each quoted line against the actual page text before showing it.
- Speed vs. reasoning. Planning questions on a reasoning model took 17 to 22 seconds per call. We added model routing, fallbacks, and a live progress indicator so users can see what the agent is doing instead of staring at a spinner.
- Vague questions. Students ask things like "what about that one?" We feed a student profile (completed courses, remaining requirements, recently mentioned courses) into every request so the agent can resolve them.
- Deployment. Auth0 audience mismatches, strict CORS, and fitting a JVM into a 512 MB free instance all took longer than expected.
Accomplishments that we're proud of
- Every claim the app makes about your requirements links back to the page it came from
- A working agent that doesn't just answer, but opens the right view for you
- A live deployment at onlyplans.courses, built in under 24 hours
What we learned
LLMs are great at reading messy documents and terrible at being trusted blindly. The most useful thing we built wasn't the chat, it was the validation layer around it.
What's next for OnlyPlans
- Validating generated semester plans end to end before showing them
- Supporting more majors and minors beyond our current catalog
- Faster responses by splitting models per question type
Built With
- apache-pdfbox
- auth0
- deepseek
- docker
- gemini
- java
- javascript
- jwt
- luminal
- maven
- postgresql
- render
- spring-boot
- tavily
- tigerdata
- vercel
- vite
- vue.js
Log in or sign up for Devpost to join the conversation.