Inspiration
Most roadmap and career-guidance tools assume every student is the same — same stream, same goals, same milestones. We wanted to build something that adapts to any student (engineering, medical, law, commerce, arts, school-level) the same way a fitness app adapts to any body type: by first understanding the person, then generating a path just for them. We were also inspired by how addictive progress feels in Duolingo and GitHub's contribution graph, and thought: why not bring that same dopamine loop to career planning?
What it does
WayfindAI profiles a student through an adaptive onboarding flow and a skill/interest quiz, then uses AI to:
- Determine the student's current skill level (Beginner/Intermediate/Advanced) and ideal domains.
- Generate a personalized, RPG(Role-Playing Game)-style skill-tree roadmap (locked → unlocked → mastered nodes, boss missions).
- Build a daily AI Life Planner with interactive, clickable tasks broken down into sub-topics matched to the student's actual stated skills.
- Run "boss battle" and "diagnostic assessment" game simulations to measure real performance.
- Calculate a live Career Readiness Score from that simulator performance, plus AI-generated, reality-based improvement suggestions
- Track progress in real time with XP, levels, streaks, badges, and modern dashboards (contribution heatmap, skill radar, growth line chart, career-path Sankey diagram, readiness gauge, treemap).
How we built it
- Frontend: React, TypeScript, Vite, Tailwind CSS, Shadcn/ui, Zustand, Framer Motion, Recharts, React Flow
- Backend: Java 21, Spring Boot, Spring Security with JWT, Spring Data JPA/Hibernate, Maven
- Database: PostgreSQL (hosted on Neon)
- AI Layer: Groq API (Llama models) for the quiz analyzer, roadmap generator, AI Life Planner, AI Mentor Chat, and Career Readiness Engine
- Deployment: Frontend on Vercel and backend on Render We designed the data model so a single adaptive onboarding flow (board/stream/career goal-aware) feeds every downstream module — quiz, roadmap, planner, and career simulator — so a change in user input always reflects consistently across the app.
Challenges we ran into
- Generalizing onboarding: Our first version assumed every user was an engineering student (e.g., always asking for "semester"). We rebuilt it into a dynamic, branching form that adapts its fields based on education stage (10th/12th/UG/PG) and target career (engineering, medicine, law, etc.).
- Entity leakage in AI output: Early on, raw JPA entities (User, UserGoal) were being passed directly into AI prompts and responses, so the UI displayed Java toString() dumps instead of clean text — including sensitive fields. We fixed this with strict DTO mapping and banned passing entities into prompts or API responses.
- Render loops: The AI Life Planner page had an infinite re-render/loading loop caused by a useEffect keyed on a Zustand object that updated on every fetch. We fixed it with effect dependencies tied to stable primitive IDs, store selectors, and fetch-in-progress guards.
- 403 errors on protected routes: Onboarding API calls were being blocked by Spring Security; we had to align JWT handling with the security filter chain and CORS configuration.
- Non-functional buttons: "Launch Battle" and "Begin Assessment" weren't wired to their handlers; we traced and connected them to the simulator and quiz engine logic.
Accomplishments that we're proud of
- A fully adaptive onboarding flow that works for any student type, not just engineering students
- A working RPG(Role-Playing Game)-style skill-tree roadmap with XP, levels, and badges
- A Career Readiness Score that is actually derived from live simulator performance (Boss Combat Arena, Diagnostic Assessment Center) rather than static numbers
- An interactive AI Life Planner where every task expands into AI-generated sub-topics matched to the student's real skill inputs
- A modern, glassmorphic, dark-themed dashboard with real-time analytics graphs
What we learned
- Never pass raw backend entities into AI prompts or API responses. We learned this the hard way — clean DTOs are what stand between a polished response and a Java object dump showing up on screen.
- React effect dependencies need to be primitive values, not object references. Chasing down an infinite render loop taught us this — get it wrong and you end up debugging the same fetch firing over and over.
- One shared, adaptive data model that every feature reads from is key to consistent personalization. Without it, every page starts behaving like its own silo.
- Good gamification genuinely changes how engaging a learning tool feels. XP, streaks, and skill trees made a real difference — even to us while testing it.
What's next for WayfindAI
- AI Mentor Chat with persistent memory of a student's full journey.
- A Failure Recovery Engine that detects when a student is falling behind and re-plans their roadmap.
- A Scholarship and University Recommendation Engine.
- Public leaderboards and peer accountability groups.
- Expanding the skill-tree content library beyond tech/CS into medicine, law, commerce, and the arts.
Built With
- axios
- framer-motion
- git
- github
- groq
- hibernate
- java
- jpa
- jwt
- llama
- maven
- neondb
- postgresql
- react
- react-flow
- recharts
- render
- shadcn-ui
- spring-boot
- spring-security
- swagger
- tailwindcss
- typescript
- vercel
- vite
- zustand
Log in or sign up for Devpost to join the conversation.