Skip to content

Curriculum

The Curriculum page is your structured learning material — the "book" against which your sessions happen. It's an optional but powerful layer on top of free-flowing AI sessions.

What a curriculum is

A curriculum is a tree of topics plus a flat list of lessons, all belonging to one learner. You can have multiple curricula side by side ("Spanish grammar", "Spring Boot for Java devs", "Lead guitar fundamentals").

  • Topics form a tree — chapters and sub-chapters. Each topic has a title, optional description, and a parent reference. The "Add subtopic" button creates a child.
  • Lessons are flat under the curriculum. Each has a title and a rich-text content body. Use them for written material: notes, summaries, exercise sheets.

Creating a curriculum

The Curriculum page lists every curriculum you own. The "Create curriculum" form takes a title + optional description + optional language; pressing Create opens the new curriculum view immediately.

The topic tree

The left side of the curriculum view shows the topic tree, drag-and-drop reorderable (touch-friendly on mobile too). Click a topic to drill in; the breadcrumb under the heading shows the path back to the root.

  • Add topic at the root level — sibling of every existing top-level topic.
  • Add subtopic under the currently-focused topic.
  • Rename by clicking the title in edit mode.
  • Delete removes the topic AND its descendants (Dexie mode handles the cascade in a single transaction; API mode delegates to the backend).

The tree is just metadata; topics don't have content of their own. Content lives in lessons.

Lessons

The right side of the curriculum view is the lesson list, ordered by order_index. Each row shows the lesson title and a snippet of its content; clicking opens the lesson editor.

The lesson editor is TipTap rich text (since v1.14.0): bold / italic / underline / strike, headings (H1-H3), bullet + ordered + task lists, blockquote, inline code, fenced code blocks with lowlight syntax highlighting across 11 languages (bash / css / html / java / javascript / json / markdown / python / sql / typescript / yaml), links, text alignment, highlight, undo / redo, character count. The toolbar is mobile-friendly with horizontal scroll + 40px touch targets.

Curriculum descriptions, session notes, and lesson content all use the same editor. Markdown / PDF exports go through renderStoredContent which walks the TipTap doc tree and emits GFM Markdown; plain-text content from before v1.14.0 passes through verbatim.

How curricula connect to sessions

Sessions can be seeded from a chat-history import or from scratch. The conversation analyzer (/api/imports) extracts a suggested_curriculum field; one click on the analyzed import seeds a Curriculum with topics + lessons matching the gaps the AI identified.

The session AI does not (yet) auto-pull individual lesson content into the system prompt — that's a deliberate hold until the curriculum-AI integration shape settles.

Per-storage-mode behaviour

Both ApiStorage and DexieStorage implement curriculum CRUD. In Local mode the data lives in IndexedDB and survives browser reloads as long as you don't clear site data. In Server mode the data lives in the FastAPI backend's SQLite database.

How storage modes work