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

  1. 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.
  2. Non-blocking behavioral tracking — capturing events without slowing down the user experience required careful use of sendBeacon and batched requests.
  3. Smart triggering — deciding when to regenerate a path (cooldown + meaningful behavior change) so we don't waste LLM calls.
  4. Observability — building a full /trace page 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 /demo that 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
Share this project:

Updates