Inspiration
Online learning platforms usually show the same generic recommendations to everyone. We wanted something smarter — a system that actually watches how a learner browses, searches, and bookmarks courses, then turns that real behavior into a clear, personalized next learning step.
The SmartReco Build Challenge 2026 gave us the perfect opportunity to build a production-grade, fully grounded recommendation engine instead of another toy demo.
What it does
SkillOrbit converts a user's browsing behavior into a personalized learning path.
- Silently tracks page views, searches, dwell time, and bookmarks
- Builds a live interest profile
- Uses a 7-stage LangGraph agent + Qdrant semantic retrieval
- Generates recommendations that are 100% grounded in the real catalog (no hallucinations)
- Shows full pipeline traces so every recommendation is explainable
- Delivers paths via shareable links and weekly email digests
How we built it
We built a complete production stack:
- Frontend + Backend: FastAPI + Jinja2 (server-rendered)
- Database: Supabase (PostgreSQL) for users, events, profiles & recommendations
- Vector Store: Qdrant for semantic search and RAG
- AI Layer: LangGraph (7-stage agent) + Mesh API (LLM + embeddings)
- Email: Resend for instant + weekly digests
- Scheduler: APScheduler for automated weekly recommendations
- Deployment: Render
The agent pipeline runs:
analyze → retrieve → evaluate → moderate → generate → validate → persist
Every recommended course ID is validated against the live catalog before it is shown to the user.
Challenges we ran into
- Making recommendations truly grounded — preventing the LLM from inventing course IDs was harder than expected. We solved it with strict post-generation validation against the SQL catalog.
- Non-blocking behavioral tracking — capturing events without slowing down the user experience required careful use of
sendBeaconand batched requests. - Smart triggering — deciding when to regenerate a path (cooldown + meaningful behavior change) so we don't waste LLM calls.
- Observability — building a full
/tracepage so judges (and users) can see exactly why a recommendation was made.
Accomplishments that we're proud of
- 100% grounded recommendations (zero hallucinated catalog items)
- Full end-to-end observability with Mesh trace IDs and Qdrant scores
- Beautiful guided demo at
/demothat requires zero setup - Production-ready dual-write (Admin → SQL + Qdrant)
- Weekly proactive email digests
What we learned
- How to design a reliable multi-stage LangGraph agent
- The importance of grounding and validation in RAG systems
- Building real behavioral intelligence instead of simple collaborative filtering
- Shipping a complete, judge-friendly product (not just a notebook)
What's next
- Better interest decay and long-term profile evolution
- Multi-path career orbit recommendations
- Mobile-friendly progressive web app
- Deeper integration with learning platforms for progress tracking
Built With
- api
- apscheduler
- behavioral
- fastapi
- jinja
- langgraph
- llm
- mesh
- postgresql
- python
- qdrant
- rag
- render
- resend
- search
- semantic
- supabase
- tracking
- vector
Log in or sign up for Devpost to join the conversation.