Topic Architecture Template
Use this template to design a new topic curriculum. Fill in each section to create the roadmap. The result guides what KB pages need to exist, what content needs to be written, and how the course is structured.
1. Topic Identity
Topic Name: [Name of the technique/topic]
Tagline: [One-sentence summary]
Target Level: [beginner / intermediate / advanced]
Est. Course Time: [e.g., 6 hours]
Prerequisites: [List of concepts or KB pages the reader should know first]
2. Scope
What this topic covers
[Clear definition of the scope — what the reader will be able to do after completing the course.]
What this topic does NOT cover
[Explicit exclusions — what's adjacent but out of scope for this course.]
Relationship to other topics
| Related topic | Relationship | Separate course? |
|---|---|---|
| [Topic A] | [GS builds on this / Alternative to this / etc.] | Yes/No |
| [Topic B] | [etc.] |
3. Module Progression
Define the modules in order. Each module should have a clear type.
| # | Module Title | Type | Est. Time | KB Pages Used |
|---|---|---|---|---|
| 01 | [Title] | Foundations / Pipeline / Tools / Application / Methodology / Final Project | 30 min | [list of KB page IDs] |
| 02 | ... |
Module Types
| Type | Purpose | Typical Content |
|---|---|---|
| Foundations | What it is, how it works, why it matters | Concept explanations, history, theory |
| Pipeline | Step-by-step process | Capture → process → export workflows |
| Tools | Ecosystem survey | Tool/addon comparisons, decision guides |
| Application | Integration into Blender | Import, editing, rendering, hybrid workflows |
| Methodology | Investigation context | Documentation, admissibility, limitations |
| Final Project | End-to-end project | Full walkthrough, deliverables, solution guide |
3b. Physical Structure & Sidebar Contract
How a course is laid out on disk and wired into the sidebar. This is the part that turns a module map into a working course. Follow it exactly — an agent scaffolding a new course uses this as the spec.
Folder layout (per course)
docs/courses/<course-name>/ # e.g. site-reconstruction
├── _category_.json # (optional) only if autogen used; label + link to syllabus
├── syllabus.md # Course Syllabus (front door) — from syllabus-template
├── <NN>-<module-slug>/ # one folder per module, N-prefix for on-disk ordering
│ ├── _category_.json # label (NO number) + position
│ ├── index.md # MODULE SYLLABUS — the module's front door (from module-syllabus-template)
│ ├── introduction.md # (optional) framing page when the module has one
│ └── lesson.md # the module's core teaching page (content lives here)
└── ...
Sidebar wiring (the rules that matter)
- Module categories are EXPLICIT, not autogenerated. Write each module as a
{ type: 'category', label, collapsed: true, link, items }block insidebars.js— do NOT use{ type: 'autogenerated', dirName: '...' }for course modules. Autogenerated dirs flatten folders that contain anindex.md(the index absorbs the folder), producing a flat mess instead of nested modules. This is the single biggest structural gotcha. - The Module Syllabus (
index.md) is the category'slink, never a sidebar item. The category block setslink: { type: 'doc', id: '<course>/<module>/index' }and does NOT list the index initems. This makes the syllabus the module's landing page (click the module heading) without a duplicate "— Module Syllabus" entry in the sidebar. Theitemslist only the module's content pages (intro/lessons) plus composed refs. - Composed reference pages are injected as
{ type: 'doc', id: ... }items inside the module (or at its boundary), at the pedagogically right position. They point at the canonical technique/tool/addon page by its doc ID — one file, one URL, no copies. Usedoc, notref: adocitem makes the course module context a first-class active location in the sidebar, so when a reader lands on a composed page from inside the course, the sidebar stays in the course (the course-context item is first in DOM, and Docusaurus auto-scrolls to the first active item). Withref, the canonical reference-layer location is the only "owned" one and the sidebar jumps to the bottom of the sidebar (out of course context) when the composed page opens — a continuity break. - Display labels carry NO numbers. Module labels in
sidebars.jsand_category_.jsonare the clean title ("Establishing the Satellite Baseline"), not "02 — Establishing the Satellite Baseline". On-diskNN-prefixes are for ordering only; Docusaurus strips them from IDs/URLs.
Doc ID conventions
- Course module IDs:
courses/<course>/<module-slug>/<file>— e.g.courses/site-reconstruction/satellite-baseline/lesson. - Module syllabus IDs:
courses/<course>/<module-slug>/index. - Docusaurus strips
NN-numeric prefixes from folder names for IDs and URLs (folder01-what-is-site-reconstruction→ idwhat-is-site-reconstruction). Reference these IDs without the prefix. - Reference-page IDs for
refitems:techniques/<section>/<page>(no prefix) — e.g.techniques/foundation-preparation/scale-estimation,addons/fspy.
Reference-composition rule
Each numbered module keeps its own syllabus + intro + lesson (course-specific prose) and COMPOSES canonical reference pages via ref — it does not copy them. Modules that teach a technique/tool map to { type: 'ref' } items AND to the course syllabus's "KB Reference Pages Used" table.
Worked example (Site Reconstruction by Camera Matching)
{
type: 'category',
label: 'Establishing the Satellite Baseline',
collapsed: true,
link: { type: 'doc', id: 'courses/site-reconstruction/satellite-baseline/index' },
items: [
{ type: 'doc', id: 'courses/site-reconstruction/satellite-baseline/lesson' },
{ type: 'doc', id: 'techniques/foundation-preparation/measurements' },
{ type: 'doc', id: 'techniques/foundation-preparation/scale-estimation' },
],
},
An agent scaffolding a new course: (1) creates the folder + _category_.json + index.md (module syllabus) + lesson(s) per Module Map, (2) adds the explicit category blocks to sidebars.js exactly as above, (3) injects refs for composed pages, (4) builds and verifies the sidebar renders nested modules with no "— Module Syllabus" duplicates.
4. KB Pages Required
List all KB pages this course depends on, with their current status.
| KB Page | Section | Type | Current Status | Work Needed | Used In Module |
|---|---|---|---|---|---|
path/to/page.md | Techniques | Technique | 🔸 draft | Expand to validated | 01, 03 |
path/to/tool.md | Tools | Tool | — | Write content | 04 |
| ... |
New Pages Needed
Pages that don't exist yet and need to be created.
| Proposed Page | Section | Type | Reason |
|---|---|---|---|
path/to/comparison.md | Techniques | Comparison | GS vs Photogrammetry |
| ... |
5. Learning Objectives
By the end of this course, the reader will be able to:
- [Objective 1 — measurable, e.g., "Explain the difference between X and Y"]
- [Objective 2 — e.g., "Execute a full pipeline from A to B"]
- [Objective 3 — e.g., "Choose the right tool for scenario Z"]
- ...
6. Blender Integration
How does this topic connect to Blender?
- [List of specific Blender workflows]
- [Addons that bridge the gap]
- [What the reader can produce in Blender]
7. Investigation Context
- [How this technique fits in a visual investigation workflow]
- [Evidentiary considerations]
- [Documentation requirements]
8. Asset Checklist
Files needed for the final project walkthrough:
- Sample footage / dataset
- Pre-trained model (for when training isn't feasible)
- Blender scene file with reference geometry
- Solution guide
9. Status
Course Status: [planned / in-progress / complete]
KB Pages Complete: [X of Y]
Lessons Written: [X of Y]
Exercises Written: [X of Y]
Final Project Ready: [yes / no]