Skip to main content

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 topicRelationshipSeparate 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 TitleTypeEst. TimeKB Pages Used
01[Title]Foundations / Pipeline / Tools / Application / Methodology / Final Project30 min[list of KB page IDs]
02...

Module Types

TypePurposeTypical Content
FoundationsWhat it is, how it works, why it mattersConcept explanations, history, theory
PipelineStep-by-step processCapture → process → export workflows
ToolsEcosystem surveyTool/addon comparisons, decision guides
ApplicationIntegration into BlenderImport, editing, rendering, hybrid workflows
MethodologyInvestigation contextDocumentation, admissibility, limitations
Final ProjectEnd-to-end projectFull 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)
└── ...
  1. Module categories are EXPLICIT, not autogenerated. Write each module as a { type: 'category', label, collapsed: true, link, items } block in sidebars.js — do NOT use { type: 'autogenerated', dirName: '...' } for course modules. Autogenerated dirs flatten folders that contain an index.md (the index absorbs the folder), producing a flat mess instead of nested modules. This is the single biggest structural gotcha.
  2. The Module Syllabus (index.md) is the category's link, never a sidebar item. The category block sets link: { type: 'doc', id: '<course>/<module>/index' } and does NOT list the index in items. This makes the syllabus the module's landing page (click the module heading) without a duplicate "— Module Syllabus" entry in the sidebar. The items list only the module's content pages (intro/lessons) plus composed refs.
  3. 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. Use doc, not ref: a doc item 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). With ref, 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.
  4. Display labels carry NO numbers. Module labels in sidebars.js and _category_.json are the clean title ("Establishing the Satellite Baseline"), not "02 — Establishing the Satellite Baseline". On-disk NN- 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 (folder 01-what-is-site-reconstruction → id what-is-site-reconstruction). Reference these IDs without the prefix.
  • Reference-page IDs for ref items: 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 PageSectionTypeCurrent StatusWork NeededUsed In Module
path/to/page.mdTechniquesTechnique🔸 draftExpand to validated01, 03
path/to/tool.mdToolsToolWrite content04
...

New Pages Needed

Pages that don't exist yet and need to be created.

Proposed PageSectionTypeReason
path/to/comparison.mdTechniquesComparisonGS vs Photogrammetry
...

5. Learning Objectives

By the end of this course, the reader will be able to:

  1. [Objective 1 — measurable, e.g., "Explain the difference between X and Y"]
  2. [Objective 2 — e.g., "Execute a full pipeline from A to B"]
  3. [Objective 3 — e.g., "Choose the right tool for scenario Z"]
  4. ...

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]