About Nexora

Most learning platforms recommend courses using purchase history or basic keyword similarity. We wanted to solve a harder, more meaningful problem:

What if a platform could understand what a learner is genuinely trying to learn — before they ever type it into a search box?

That idea inspired Nexora, an explainable AI learning marketplace that turns real learner behavior into personalized guidance. Instead of static recommendations, Nexora watches meaningful signals — searches, course clicks, time spent, saved courses, and cart activity — and uses them to infer each learner's evolving interests.

How we built it

At the core of Nexora is a seven-node LangGraph agent:

  1. activity_analyzer — turns raw events into a behavioral digest
  2. interest_extractor — extracts interest signals with confidence + evidence
  3. retrieval_node — hybrid dense (Mesh embeddings via Qdrant) + BM25 keyword search, fused with Reciprocal Rank Fusion
  4. relevance_grader — an LLM judge scores and re-ranks candidates
  5. retrieval_refiner — loops back to broaden the search if results are thin
  6. persuasion_writer — writes a grounded, evidence-based recommendation narrative
  7. recommendation_storer — persists the result and invalidates caches

Every recommendation is transparent: the "Why this recommendation?" panel shows the actual interest signals, confidence scores, and evidence behind each suggestion — nothing is hidden behind a black box.

We built the stack on FastAPI, Jinja2, PostgreSQL, Qdrant, and Redis, with every LLM call and embedding routed through a single MeshAPI gateway. Zerops hosts the live, production-style deployment, bringing the frontend, backend, database, cache, and vector search together as one working, accessible application rather than a collection of disconnected demos.

What we learned

We learned that making an AI system feel trustworthy is a harder problem than making it feel smart. A recommendation can sound confident while being poorly grounded — so we prioritized traceable evidence, visible reasoning, and honest failure states over polish alone. We also learned that resilience has to be designed in from the start: every agent node needs a deterministic fallback, because a recommendation engine that goes down when one dependency fails isn't actually usable.

Challenges we faced

  • Keeping SQL and vector data in sync. Every product mutation needed a dual-write to PostgreSQL and Qdrant, including deletes and deactivations, so a removed course could never resurface in recommendations.
  • Avoiding wasted or duplicate agent runs. We designed a trigger policy (first-time users, event thresholds, staleness rules) plus Redis-based locks so the graph runs only when it's actually useful.
  • Graceful degradation. Mesh, Qdrant, or Redis being unreachable had to degrade recommendation quality, never availability — so every node ships with a deterministic heuristic fallback.
  • Making reasoning legible, not just logged. Turning internal agent state into something a learner can actually read and trust took real UI iteration, not just backend logic.

Nexora isn't just a course catalog — it's a learning agent that watches, understands, explains, and helps every learner find their next best step.

Built With

Share this project:

Updates

Submission history