Case study · 2025 · EdTech

How we replaced the syllabus with a graph

Orno treats every curriculum as a directed graph of dependencies, not a linear playlist. Learners see what unlocks what, an AI mentor anchors to the current node, and progress is structural — measured by the topology you've earned, not the videos you've watched.

  • ClientSynara product
  • CategoryGraph-based learning · AI mentor
  • Year2025
  • EngagementBuilt and operated by Synara
Orno learning platform — an interactive learning roadmap rendered as a directed graph of connected lesson nodes, with a focused chat thread alongside an AI mentor.
01 — At a glance
0 → ∞
Curriculum shapes supportedAny DAG of dependencies — not just a linear playlist.
1
LLM providerGemini, end-to-end. No model-routing complexity.
≤ 2s
Mentor first tokenp95 streaming latency from question submission to first visible token.
Summary

Learning platforms ship a syllabus. A syllabus is a list. The world is not a list — concepts depend on other concepts, and the moment you skip a dependency the entire path collapses into noise. We built Orno as the opposite — every curriculum is a directed graph of lesson dependencies, every node carries an AI mentor anchored to its scope, and progress is measured by which dependencies you've unlocked, not which videos you finished. The result is a product where a learner can see the shape of what they're learning, not just the next item on the queue.

The problem

Procurement was held together with Excel and goodwill.

Every learning product is shaped by the same assumption. Concepts are arranged into chapters, chapters into modules, modules into a course. The user advances forward through that list. If they fall behind, the product nags. If they finish, the product congratulates. The metaphor is the playlist.

It works for the easy cases — a four-week intro to React, a thirty-minute knife-skills video — because in those cases the dependencies are weak enough that a linear order is at least defensible. It collapses immediately the moment the subject is dense. Try learning calculus this way. Try learning macroeconomics, or distributed systems, or auction theory. The dependencies between concepts are not linear; they fork, merge, recur, and a syllabus is the lowest-resolution approximation of that real shape.

A syllabus is the lowest-resolution approximation of how a real subject is structured. We wanted to ship the structure itself.

The cost shows up as boredom dressed as failure. Learners drop off not because they couldn't have understood the material but because the product gave them no map of where they were. They could not see what they had earned. They could not see what was a prerequisite they'd skipped. The chapter list was a flat fluorescent hallway with no doors visible until the next click. Every modern syllabus-shaped LMS we tried — Coursera, Khan, Udemy, the in-house tools at three Series-A startups — failed the same way at the same depth.

So we asked the inverted question. What if the curriculum *is* the dependency graph? What if you can see every prerequisite, every branch, every parallel path? What if a mentor knows where you are in the graph, not just what page you opened?

Orno's interactive roadmap — a directed graph of connected lesson nodes with completed nodes glowing, locked nodes greyed, and a pulsing 'next-best' node highlighted.

The curriculum *is* the dependency graph. Locked nodes grey out, completed nodes glow, and the next-best step pulses.

02 — Why us

Why Synara owns this

Orno is a Synara product, not a client engagement. We built it because we kept watching learners — including our own engineers onboarding into unfamiliar stacks — collapse against linear curricula. The pattern was consistent enough that we believed the structural rethink was worth a product, not just a blog post.

Graph-shaped learning needs craft in three places simultaneously: the rendering layer (a graph people can actually navigate without going dizzy), the AI layer (a mentor that knows the *local* topology, not just the page they're on), and the data layer (a backend that can describe arbitrary dependency shapes without forcing them into a hierarchy). We're a design + engineering studio that does all three on the same team, in the same codebase. That alignment is the actual unlock for Orno.

03 — What we built

A three-portal procurement platform — buyer, supplier, admin.

Orno learning platform rendered on a MacBook on a warm walnut desk in a sunlit study — graph view in focus, AI mentor chat docked alongside.
01

Roadmap as a directed graph

Every curriculum is authored as a DAG of lesson nodes with named dependency edges. Nodes glow when completed, grey when locked, pulse when the next-best step is identified. Built on XYFlow with Dagre layouts — pan, zoom, click to focus, double-click to enter a lesson.

02

An AI mentor that knows your local topology

Ask a question and the mentor doesn't just see the current lesson — it sees the chain of dependencies you've already unlocked and the next-best concepts in front of you. Responses are anchored to where you are, not where the lesson assumes you are. Powered by Gemini with structured context injection.

03

Progress measured by unlocked structure

Instead of "4 of 12 modules complete," Orno shows you the *fraction of the graph you have unlocked* — and surfaces which downstream concepts are now reachable. Progress is a property of the topology, not the playlist.

04

Authoring without losing your mind

Curriculum authors define lessons and dependencies in a focused builder — drag to connect prerequisites, drop in a lesson body, link to media. The graph layout is computed automatically via Dagre, so authors spend zero time arranging nodes.

05

WorkOS AuthKit identity

Magic link by default; GitHub and Google OAuth one click away. WorkOS handles SSO, MFA, and the boring parts. We never see a password, and enterprise SSO is a deploy-config switch when a customer asks.

06

Subscription billing with a real lifecycle

Trial → active → past-due → cancelled, with a re-activation flow that doesn't lose history. Built on a clean billing module so adding course-level pricing or enterprise seats later is config, not surgery.

Orno's AI mentor — a chat thread anchored to the current lesson node, with the mentor referencing prerequisite concepts the learner has already unlocked.

The mentor knows where you are in the graph — not just which page is open. Responses are anchored to your local topology.

04 — Architecture

In plain English, why each choice.

Frontend
Next.js 16 + React 19 with the App Router. shadcn/ui as the design system. Redux Toolkit for the curriculum-graph state (because a graph with thousands of nodes is exactly where Redux's normalized store pays off). XYFlow for the visual layer with a custom Dagre layout pipeline for automatic node positioning. TanStack Query for server data fetching.
AI mentor layer
Gemini as the single LLM. Context injection is structured — the mentor receives the current node, the unlocked prerequisite chain, and the immediate downstream nodes as JSON, not as raw prose. Streaming responses via Server-Sent Events. Topology-aware prompt construction means the mentor never has to ask "what are you studying" — it already knows.
Backend
FastAPI on Python 3.12 — async-first, with SQLAlchemy 2.0 in async mode and Alembic for migrations. The graph schema is a thin join table over lessons and curricula; we resisted the urge to use a graph database because Postgres handles DAGs of this size effortlessly and operationally we wanted one boring data store. Pre-commit hooks enforce Black + Ruff + mypy strict on every commit.
Auth + identity
WorkOS AuthKit handles magic links, OAuth (GitHub, Google), and session management. JWTs verified server-side on every request. SSO is a one-config-switch upgrade for enterprise customers.
OpenAPI contract
FastAPI emits an OpenAPI 3 schema; we generate the Next.js client via openapi-typescript + openapi-fetch. The frontend has zero hand-written API client code. Every route is type-safe end-to-end, and breaking changes are caught at build time.
Infra
Docker Compose for local development with Postgres, Redis, FastAPI, and Next.js in one orchestrated stack. Production is split: Vercel for the Next.js frontend, a containerized FastAPI service for the backend. Single-tenant deployments are turn-key — same compose file, different env.
05 — Outcomes

What changed after launch.

Graph-native
Authoring modelAny curriculum shape — not just a linear sequence.
≤ 2s
First mentor tokenStreaming latency from question to first visible token (p95).
1 LLM
Provider countGemini end-to-end. No multi-provider routing complexity.
0
Manual graph layoutsAuthors never position a node. Dagre runs every render.

MethodologyLatency numbers measured against the production staging environment over the most recent four weeks at the time of writing. Mentor responses are evaluated against a fixed-prompt benchmark internally; the streaming time-to-first-token is the user-perceived metric we optimize for.

Orno is the first learning product where I could see the shape of what I was learning — and where I'd already been. Every other LMS I've used is a list pretending to be a course.

Pilot learnerSeries B engineer onboarding into systems theory
06 — What’s next

Per-cohort branching — different paths through the same graph for different learner archetypes (junior vs. senior, theory vs. applied). A public marketplace of community-authored graphs. And a deeper mentor mode that proactively flags weak prerequisites *before* a learner gets stuck downstream — a teacher's intuition, encoded.

Stack
  • Next.js 16
  • React 19
  • shadcn/ui
  • Redux Toolkit
  • XYFlow
  • Dagre
  • TanStack Query
  • FastAPI
  • Python 3.12
  • SQLAlchemy
  • Alembic
  • WorkOS AuthKit
  • Gemini
  • openapi-typescript
  • Docker Compose
  • Vercel

Building something dense enough to need a graph?

If you're shipping internal training, technical education, certification programs, or any curriculum where prerequisites matter — the graph model isn't a UX gimmick, it's the correct primitive. We can scope a private Orno deployment or build a graph-native learning surface on your stack.

Start a conversation