Build journal
CORELearning 5 min read

Focused Lesson Viewer

Published Jul 4, 2026

A distraction-free, single-column reading view with a collapsible chapter rail and sources shown inline.

The Focused Lesson Viewer is where learning actually happens in Praxis924. Once an admin publishes a lesson, learners read it in a single-column, distraction-free reader at /learn/lessons/[id] — the four AI-generated sections, a collapsible chapter rail to jump between them, sources cited inline, a per-framework timeline for context, and a direct link to ask Lucy about what you're reading. This walkthrough is for learners (and admins verifying published output): by the end you'll know how to open a lesson, navigate it, follow its sources, and move into practice without losing your place.

What you'll need

  • A registered, verified account (register with email verification, then sign in).
  • At least one lesson in published status. Draft or generating lessons don't appear in the library — if you're an admin, publish the lesson from /admin first.
  • Nothing else. The viewer is read-only and login-gated, so your progress is tracked automatically as you go.

Step 1 — Find a published lesson

Go to /learn. This is the library of published lessons, organized by Technology → Framework → Lesson. Browse to the framework you're studying and pick a lesson. Every lesson you see here has finished the generation workflow and reached generated, then been marked published — so the four sections and exercises are all present.

Click the lesson to open the viewer at /learn/lessons/[id].

Step 2 — Read in the single-column reader

The viewer deliberately shows one column of content, not tabs, sidebars of widgets, or split panes. It renders the lesson's four sections in reading order:

  1. main_explanation — the core concept.
  2. practical_explanation — how it's applied.
  3. key_principles — the rules worth remembering.
  4. summary — the recap.

Each section was written and then AI-reviewed with a score during generation, and low-scoring sections were improved before publish — so what you're reading is the refined version. Markdown renders with proper headings, code blocks, and lists in the dark theme.

Step 3 — Jump around with the chapter rail

On the side sits a collapsible chapter rail listing the four sections. Click any entry to jump straight to it — handy when you're reviewing and only need key_principles, or want to re-read the summary before an exercise.

Collapse the rail to reclaim horizontal space and go fully distraction-free; expand it again when you want to navigate. The rail is a map, not a second reading surface — the content always stays in the single column.

Tip: For a quick review pass before a mock interview or a spaced-review resurfacing, collapse the rail, jump to summary, then to key_principles. Two clicks gets you the high-value recap without scrolling the whole lesson.

Step 4 — Follow the sources inline

Where a lesson was grounded in a dataset attached to its framework (via RAG), its Sources appear inline rather than being buried in a footer. As you read, you can see which retrieved chunks backed a claim. This is what separates a grounded lesson from a generic one — the citations let you verify the material and dig deeper into the original source.

If a lesson shows no sources, it wasn't grounded in a dataset (it was generated from raw content) — that's expected, not an error.

Step 5 — Use the timeline for context

The viewer also shows a per-framework timeline so you always know where this lesson sits in the larger sequence — what came before, what comes next. It doubles as a roadmap: your completed lessons are reflected there, so the viewer isn't an isolated page but a stop on a tracked path through the framework.

Step 6 — Ask Lucy without leaving the lesson

Stuck on a concept? Use the Ask Lucy link in the viewer. Because you're opening the chat from a lesson, Lucy folds that lesson's content into her system prompt (capped at ~3000 characters), so her answers cite and stay anchored to the material in front of you instead of answering generically. It's a streaming chat with provider failover, personality, and safety guardrails — ideal for "explain this differently" or "give me another example."

Step 7 — Move into practice

The viewer is for reading. When you're ready to do, head to the separate /practice/[lessonId] workspace, where the interactive exercises (mcq, fill_blank, calculation) and the coding challenge live. Keeping practice out of the reader is intentional: reading stays focused, and practice gets its own full workspace with the execution sandbox and AI grading. Your completions and challenge-passed status flow back into your progress summary.

When it goes wrong

SymptomLikely causeWhat to do
Lesson isn't in /learnStill draft or mid-generatingAdmin publishes it once status is generated
A section looks thin or emptyA gap slipped through generationAdmin runs Fill Gaps — it regenerates only the missing sections
No Sources shownLesson wasn't RAG-groundedExpected; it was generated from raw content
Lucy answers genericallyChat wasn't opened from the lessonUse the Ask Lucy link inside the viewer, not a fresh chat
Exercises missing from the viewerThey're not there by designOpen /practice/[lessonId] instead

Note: The viewer is login-gated. If you hit it while signed out, sign in and reopen the link — your position and progress tracking depend on an authenticated session.

What you get

A reading experience that respects your attention: one column, a rail you can hide, sources you can trust, and a timeline that keeps you oriented — with Lucy one click away and practice one route away. Next, finish the read, jump to /practice/[lessonId] to attempt the exercises and coding challenge, and watch your completion %, accuracy, and streak update in your progress summary. Lessons you've read will also resurface on a spaced-review schedule, so the viewer is where you'll return to reinforce what you learned.

Published in build journal