A TeachRepo course is just a Git repo with a specific directory layout and YAML frontmatter. No build step required — push and it publishes.
my-course/
├── course.yml ← required: course metadata
├── 01-intro.md ← lesson 1
├── 02-setup.md ← lesson 2
├── 03-deep-dive/
│ ├── lesson.md ← lesson in subfolder
│ └── sandbox.json ← optional sandbox config
└── quizzes/
└── intro-quiz.yml ← auto-graded quizLessons are discovered by file order (01-, 02-, …) or by order frontmatter.
| Field | Required | Description |
|---|---|---|
| title | Yes | Display name of the course |
| slug | Yes | URL-safe identifier, e.g. git-for-engineers |
| description | No | Short description shown in course cards |
| price_cents | No | Price in cents. 0 = free. Default: 0 |
| currency | No | ISO 4217 code, e.g. usd. Default: usd |
| repo_url | No | Source repo URL (for version tracking) |
| version | No | Semver string, e.g. 1.0.0 |
| draft | No | true = hidden from marketplace |
| tags | No | YAML list of topic tags |
--- title: "Introduction to Git" slug: intro-to-git # URL-safe, auto-derived from filename if absent order: 1 access: free # free | paid (default: paid) estimated_minutes: 10 description: "Learn the basics of version control." quiz_id: intro-quiz # links to quizzes/intro-quiz.yml sandbox_url: https://... # optional: gated StackBlitz/CodeSandbox URL --- Your lesson content in Markdown (MDX supported).
# course.yml title: "Git for Engineers" slug: git-for-engineers description: "Master Git workflows used in real engineering teams." price_cents: 4900 currency: usd repo_url: https://github.com/you/git-for-engineers tags: - git - devops - version-control