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"
FieldRequiredDescription
typeYesMust be "lesson" (flat structure, not nested).
idYesUnique identifier for this lesson (slug-style).
titleYesDisplay title shown to learners.
estimatedTimeYesVideo watch time in minutes. Max 15.
estimatedReadTimeYesTranscript read time in minutes. Max 10.
youtubeIDYesYouTube video ID (not full URL).
transcriptYesFull lesson content in Markdown.
summaryNoBrief one-sentence summary.
keyPointsNoBullet list of key takeaways.
resourcesNoArray 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