Creating Courses
Lessons
Lessons are video-based content items with a transcript, key points, and optional resources. Each lesson lives in its own directory with a lesson.yml file.
lesson.yml Example
A complete lesson file with all supported fields:
type: lesson
id: "what-is-kubernetes"
title: "What is Kubernetes?"
description: "Learn the fundamentals of Kubernetes and container orchestration."
estimatedTime: 15 # Video watch time in minutes (10-15 max)
estimatedReadTime: 10 # Transcript read time in minutes (10 MAX)
# Video content
youtubeID: "fqMOX6JJhGo"
# Supporting content
transcript: |
# What is Kubernetes?
Kubernetes is an open-source container orchestration platform that
automates deploying, scaling, and managing containerized applications.
## Key Benefits
- Portability: Run anywhere — dev, test, production
- Scalability: Easy horizontal scaling
- Self-healing: Automatic restarts and replacements
summary: "Kubernetes orchestrates containerized applications at scale."
keyPoints:
- "Kubernetes automates deployment and scaling of containers"
- "Pods are the smallest deployable units in Kubernetes"
- "Services provide stable network access to pods"
resources:
- title: "Official Kubernetes Documentation"
url: "https://kubernetes.io/docs/"
type: "documentation"
- title: "Kubernetes Interactive Tutorial"
url: "https://kubernetes.io/docs/tutorials/"
type: "tutorial"| Field | Required | Description |
|---|---|---|
type | Yes | Must be "lesson" (flat structure, not nested). |
id | Yes | Unique identifier for this lesson (slug-style). |
title | Yes | Display title shown to learners. |
estimatedTime | Yes | Video watch time in minutes. Max 15. |
estimatedReadTime | Yes | Transcript read time in minutes. Max 10. |
youtubeID | Yes | YouTube video ID (not full URL). |
transcript | Yes | Full lesson content in Markdown. |
summary | No | Brief one-sentence summary. |
keyPoints | No | Bullet list of key takeaways. |
resources | No | Array of supplementary links. |
Duration Limit
10-minute maximum read time
Lesson transcripts must be a maximum of 10 minutes read time (estimatedReadTime: 10 max). Content is converted to video, and videos longer than 10 minutes lose student engagement.
If a topic needs more depth, break it into multiple shorter lessons at natural conceptual break points. Each lesson should cover a focused subtopic that stands on its own.
Avoid
One 25-minute lesson on "Complete Kubernetes Setup"
Correct
Three 8-minute lessons: "Clusters", "Pods", "Services"
Flat Structure Requirement
All fields must be at the top level of the YAML file. The CLI validates against a flat structure — do not nest fields under a lesson: key.
Incorrect — nested structure
type: lesson
title: "Pods"
lesson:
id: "pods"
estimatedTime: 10
transcript: |
...Correct — flat structure
type: lesson
id: "pods"
title: "Pods"
estimatedTime: 10
transcript: |
...Downloadable Resources
To attach a downloadable file to a lesson, place a file named lesson.zip in the same directory as the lesson.yml. No configuration needed — the CLI detects it automatically during validation and uploads it during push.
sections/01-intro/01-getting-started/
├── lesson.yml
└── lesson.zip ← just add this file- Must be a valid ZIP archive
- Maximum size: 50 MB
- Only one zip per lesson — bundle everything into a single archive
- Students see a download card in the lesson sidebar
