Learning Path Curation
What is a Learning Path?
A Learning Path is a curated sequence of lessons, each pairing short theory with a set of coding challenges, that guides a learner from one concept to the next. Use it to teach a topic end-to-end — pick the challenges that best reinforce each concept, decide which ones are required to complete the path, and leave the rest as bonus.
Paths you build are saved as drafts while you work on them and can be published when you're ready to share. A published path with community visibility appears on the Explore Learning Paths page, where other users can copy it into their own account.
Creating a Learning Path
Start a new draft
Go to My Learning Paths and click the NEW DRAFT button at the top of the list. A modal opens.
Fill in the basics
The modal asks you for:
- Title (required) — a short, descriptive name for the path. Minimum 3 characters, maximum 120.
- Description (optional) — a couple of sentences explaining what a learner will come away with. Up to 500 characters.
New paths are created as Private drafts. You can change visibility later from the edit page.
Click Create draft
You'll be taken straight to the edit page, where you can flesh out the path.
The edit page at a glance
┌─────────────────────────────────────────────┐
│ [Banner: "Shape Your Learning Journey"] │
├─────────────────────────────────────────────┤
│ [Delete] [Save] [Publish] │ ← top toolbar
├─────────────────────────────────────────────┤
│ Content | Settings | ... │ ← tabs
├─────────────────────────────────────────────┤
│ ┌ Path details (title/visibility/desc) ──┐ │
│ │ │ │
│ └────────────────────────────────────────┘ │
│ │
│ ┌ Lesson 1 card ─────────────────────────┐ │
│ │ │ │
│ └────────────────────────────────────────┘ │
│ ┌ Lesson 2 card ─────────────────────────┐ │
│ │ │ │
│ └────────────────────────────────────────┘ │
│ + Add lesson │
└─────────────────────────────────────────────┘Tabs: Content is the only active tab. Settings, Assignments, Reminders, and Translations are placeholders for future features.
Path details
At the top of the Content tab you'll find the path-level form:
- Title — rename the path at any time while it's still a draft.
- Visibility — Private keeps the path to yourself; Community makes it appear on the Explore page once published. You can flip visibility before or after publishing.
- Description — the longer-form explanation shown on list cards and on the path detail page. Markdown is not rendered here — treat it as plain text.
All three fields are staged locally. Nothing is written until you press Save in the top toolbar (or Ctrl+S / ⌘+S).
When the path is Published, these fields are disabled. Mark the path as draft first if you need to edit them.
Lessons
Below the details form is the lesson list.
Adding a lesson
Click + Add lesson (at the bottom of the list, or in the empty state when the path has no lessons yet). A new lesson appears immediately with default values — you can then expand it and edit.
Lessons are created server-side as soon as you click the button, so they persist even if you close the tab before saving field edits.
Lesson card anatomy
Each lesson is a collapsible card with a header that shows:
- Position indicator & reorder controls on the left — a numeric input (1-based position) plus up/down chevrons.
- Title and a meta line: N challenges · difficulty · XP · minutes.
- Unsaved tag (amber) when the card has pending field edits.
- Edit (pencil) and Delete buttons on the right.
Click the pencil to expand the card and edit the lesson. Click it again (now a collapse icon) to close the card back up.
Lesson fields
Inside an expanded card you'll find:
| Section | Fields |
|---|---|
| Lesson info | Title, Short description |
| Theory | A markdown-supported text area shown to the learner before they attempt challenges |
| Questions for the learner | A list of short prompts. Add / remove individual entries freely |
| Reward & difficulty | Difficulty (Beginner / Intermediate / Expert), Lesson XP, Estimated minutes |
| Challenges | The coding exercises that back the lesson (see next section) |
Difficulty & Lesson XP
Setting the Difficulty auto-fills a default Lesson XP value:
| Difficulty | Default Lesson XP |
|---|---|
| Beginner | 50 |
| Intermediate | 100 |
| Expert | 150 |
You can override the XP afterwards if you want to reward a particular lesson more or less heavily. XP is awarded to the learner when they complete the lesson (i.e. finish it via the AI mentor chat).
Challenges
Click Add challenges to open the challenge picker. It's the same multi-select modal used elsewhere on the platform — search by title, toggle entries on or off, and click Add N challenges to confirm. Selections are added to the lesson and marked dirty; they persist on the next Save.
Each challenge row shows:
The challenge title and a difficulty tag (Beginner / Intermediate / Expert).
A Required checkbox — see Required vs Optional.
XP label — the XP the learner earns when solving the challenge, derived automatically from its difficulty tier (this is read-only; challenge XP is owned by the challenge itself, not by the path):
Challenge difficulty Challenge XP Beginner 50 Intermediate 200 Expert 500 Pending / no difficulty yet 20 Up/down chevrons to reorder within the lesson.
An ❌ to remove the challenge from this lesson (doesn't delete the challenge itself).
Required vs Optional challenges
A Required challenge gates path completion — the learner must solve every required challenge (and finish every lesson) for the path to be marked complete. Optional challenges are bonus — the learner can solve them for the XP, but skipping them doesn't block completion.
By default every challenge you add is Required. Tick the Required checkbox off to make it Optional.
Reordering lessons
Three ways:
- Up/down chevrons next to the position indicator — move one slot at a time.
- Type a new position directly into the numeric input and press Enter / Tab — jump to that position.
- (Challenges only) Up/down chevrons on each challenge row — move a single challenge within its lesson.
Reorder changes apply immediately — no Save required.
Deleting a lesson
Click the 🗑 on the lesson card. A confirmation modal opens. On confirm, the lesson is deleted permanently and the remaining lessons' positions are compacted (no gaps).
The "Unsaved" indicator
As soon as you edit any field inside an expanded lesson card, an Unsaved amber tag appears next to the lesson title in the header. The top-bar Save button also becomes active. Click Reset inside the card to discard that card's pending edits without saving.
Saving
The Save button in the top toolbar commits:
- Any staged path-level changes (title, description, visibility).
- Every lesson card with pending field edits.
The button is disabled when there's nothing to save. Fail-safe rules:
- Lesson CRUD actions (add, delete, reorder) apply immediately — they're not staged.
- Field-level edits are staged until Save.
- Ctrl+S / ⌘+S triggers Save anywhere on the page.
- If a lesson save fails, a toast surfaces the error and that lesson stays dirty so you can retry. Other lessons that saved successfully keep their saved state.
Publishing
- Click Publish in the top toolbar. A confirmation modal opens.
- If you have unsaved changes, you're prompted to save them first.
- On confirmation, the path's status flips to Published.
Publishing rules:
- A Private + Published path is marked finalised on your side but doesn't appear anywhere public.
- A Community + Published path shows up on the Explore Learning Paths page. Other users can copy it into their own account (see below).
- Once Published, all fields (path details and lesson cards) become read-only. To edit again, click Mark as draft first.
Rank requirement
Anyone can create a learning path and publish it as Private. Switching the visibility to Community (so the path appears on the Explore page) requires the Persistence DOJO rank (3001+ XP). See User privileges for the full table.
Unpublishing
Click Mark as draft in the top toolbar. A confirmation modal opens. On confirm:
- The path disappears from the Explore page (if it was community).
- All fields become editable again.
- Existing copies other users made remain theirs — they're unaffected.
Deleting
The Delete button is visible while the path is a draft (and for super admins, always). Deletion is permanent: the path and all its lessons are removed. Users who have already copied a community version of the path keep their copies — deletion only affects your original.
Copy flow
When a path is Community + Published, it appears on /explore-learning-paths. Any user can click Copy on the card to add a fresh copy of the path to their own My Learning Paths. A few details:
- The copy is Private and set back to Draft status — the copier can then progress through it, or further customise it.
- The copy retains the same lessons, theory, questions, and challenges.
- The author of the original is credited on the copy via the
copiedFromlink. - Pre-completed credit applies: if the copier has already solved a challenge elsewhere, that challenge is marked complete in the copy with 0 path XP — no double-counting.
Super-admin editing
Super admins can view and edit any user's learning path, regardless of ownership:
- My Learning Paths lists every path in the system when viewed as a super admin.
- The Edit entry in the context menu opens the same edit page used by owners.
- Save, Publish, Mark as draft, and Delete all work the same way.
This is intended for moderation and content curation — use it sparingly and communicate changes to the original author.
Keyboard shortcuts
| Key | Action |
|---|---|
| Ctrl+S / ⌘+S | Save all pending changes |
See the full list on the Keyboard Shortcuts page.
Best practices
- Keep lessons focused. One concept per lesson, with two or three challenges that drill it in.
- Use Required sparingly. Mark only the challenges that are essential to "finishing" the lesson; leave exploration-oriented ones as Optional so you don't gate completion on tangents.
- Tune Lesson XP deliberately. The defaults (50/100/150) are a starting point — raise them for lessons that require deep engagement, lower them for quick refreshers.
- Write theory that earns its keep. Markdown formatting, code blocks, and concrete examples all render — use them.
- Mix challenge difficulties. A path made entirely of Expert challenges is punishing; a path of only Beginner ones is forgettable. Aim for a gradient that matches the concept's progression.
- Publish when it's ready, not before. Draft mode is for you. Once published with community visibility, other users can copy it; substantive changes after that point live in your original and won't propagate to their copies.
Troubleshooting
"Save" button never activates. No pending changes are detected. Reorder / add / delete actions are auto-saved, so they never activate the Save button. Field edits inside lesson cards do.
Added a challenge, but the path details says 0 challenges. The count in the lesson card updates immediately from your local edits. The count on the path detail page (outside the editor) only reflects saved state — click Save to persist.
Can't edit fields on a published path. That's by design. Click Mark as draft in the top toolbar to re-enable editing.
Reordering fails with an error. The path state got out of sync — the page reloads automatically to recover. Try the reorder again.
Deleted a challenge from a lesson, but the learner's progress history still mentions it. Deletion only affects the lesson's attached challenges. Any CompletedChallenge records the learner already had remain — as they should, because the learner really did solve that challenge outside this specific lesson.