Waypoint
A learning-path recommender that plans over a skill graph instead of searching course text. It never puts a course in front of you before you're ready for it.

Highlights
- 0% prerequisite violations vs 49% for similarity search, on 9 paths written by hand by a human expert.
- Closes 93% of the learner's skill gap vs 65%, and agrees with the expert's ordering far more (Kendall tau 0.459 vs 0.111).
- Built in four days by a team of three, with 181 tests. I was the team captain.
Overview
Round 2 of HCL's hackathon asked for an AI learning-path recommender: understand a learner's goal and background, recommend courses, put them in a sensible order, explain each step, and adapt as they make progress. We were a team of three and I was the captain. My two teammates curated the course catalogue (65 skills, 126 resources) and wrote the expert learning paths we evaluated against. I helped with the catalogue too. We weren't shortlisted for the final pitch round, but I'm proud of how it turned out.
Problem
Course platforms have thousands of good courses, but learners struggle with the order. The usual approach ranks courses by how similar they are to the goal text, which happily puts an advanced course in front of someone who hasn't learned the basics yet.
Approach
I treated it as a planning problem instead of a search problem. A learner is a vector of skill levels, a goal becomes a target skill state, and the path is a sequence of courses that closes the gap in the fewest hours while respecting prerequisites. The language model only reads your goal into structured skills and phrases the explanations. It never picks or orders a course.
Architecture / how it works
- Beam search over the prerequisite graph. The graph decides which courses are even allowed as the next step, so an out-of-order step can't be generated. That's why the violation rate is 0%, by construction.
- Hybrid retrieval scored against the learner's skill gap, not their query: skill-tag overlap, Cohere
embed-v4.0embeddings and lexical match, with an optionalrerank-v3.5stage. - Every step carries a reasons object built by the planner (what it closes, what it unlocks, difficulty fit, hours). The LLM only turns that into a sentence, so explanations can't be made up.
- Conversational intake: the LLM's output is validated with Zod against the skill graph's own names, so it can't invent a skill that doesn't exist.
- Feedback ("I finished this", "I struggled here") updates the learner's skill levels and replans the route, showing what changed.
- Runs with no database and no API keys: the corpus loads from CSV and learner state lives in memory, so a reviewer can try it instantly. Postgres + pgvector kicks in when configured.
Tech stack
Outcomes
Evaluated against a similarity-search baseline on 9 expert-written paths, with the same corpus and the same embeddings: prerequisite violations 0% vs 49%, skill gap closed 93% vs 65%, redundant effort 16.8% vs 36.3%, nDCG 0.392 vs 0.168, ordering agreement (Kendall tau) 0.459 vs 0.111. One of the 10 test goals ("I want to work with AI") was too vague to plan, so the intake asked a clarifying question instead of guessing.
Gallery




