Course Creator Skills

Manifest Reference

The course.yaml manifest is the single configuration file that drives the entire course generation pipeline. It defines the course identity, modules, lectures, projects, quizzes, and visual theme. The orchestrator validates this file before executing any pipeline stage.

Complete YAML Example

A full, realistic manifest for a 12-lecture course with 4 modules, 3 projects, and dual-tier quizzes.

# === COURSE IDENTITY ===
course:
  name: "Blockchain Technology and Decentralized Finance"
  short_name: "Blockchain"           # Used in URLs and directory names
  institution: "University of Zurich"
  department: "Department of Finance"
  level: "BSc"                       # BSc | MSc | PhD
  semester: "Spring 2026"
  instructor:
    name: "Joerg Osterrieder"
    email: "joerg.osterrieder@uzh.ch"
    title: "Professor of Finance"
  repo:
    org: "digital-ai-finance"        # GitHub org or username
    name: "Blockchain"               # Repo name (created if missing)
    visibility: "public"             # public | private
  website_url: "https://digital-ai-finance.github.io/Blockchain"
  github_repo: "digital-ai-finance/Blockchain"

# === MODULE STRUCTURE ===
modules:
  - id: "foundations"
    name: "Foundations"
    color: "#2CA02C"                 # Module badge color (green)
    lectures: [1, 2, 3]             # Lecture numbers in this module

  - id: "technology"
    name: "Technology"
    color: "#FF7F0E"                 # orange
    lectures: [4, 5, 6]

  - id: "applications"
    name: "Applications"
    color: "#D62728"                 # red
    lectures: [7, 8, 9]

  - id: "frontiers"
    name: "Frontiers"
    color: "#3333B2"                 # blue
    lectures: [10, 11, 12]

# === LECTURES ===
lectures:
  - number: 1
    title: "What Is Blockchain?"
    subtitle: "From Ledgers to Distributed Trust"
    tex_file: "L01_what_is_blockchain.tex"
    topics:
      - "History of ledgers and double-entry bookkeeping"
      - "The trust problem in digital transactions"
      - "Hash functions and Merkle trees"
      - "Blocks, chains, and immutability"
      - "Consensus without a central authority"
    prerequisites: []
    figures:
      domain_focus: "finance"
      required_types:
        - "time_series"
        - "flowchart"
        - "comparison_bar"

  - number: 2
    title: "Cryptographic Foundations"
    subtitle: "The Math That Makes It Work"
    tex_file: "L02_cryptographic_foundations.tex"
    topics:
      - "Symmetric vs asymmetric encryption"
      - "Digital signatures and verification"
      - "Hash functions: SHA-256 in practice"
      - "Public-key infrastructure"
    prerequisites: [1]
    # ... remaining lectures follow the same pattern

# === PROJECT TRACKS ===
projects:
  - id: "defi-dashboard"
    title: "DeFi Dashboard"
    description: "Build a real-time dashboard tracking DeFi protocol metrics"
    difficulty: "intermediate"
    lectures: [4, 5, 6, 7]
    deliverables:
      - "Working web dashboard"
      - "Data pipeline documentation"
      - "5-minute presentation"

  - id: "nft-marketplace"
    title: "NFT Marketplace Analysis"
    description: "Analyze pricing patterns and market dynamics across NFT platforms"
    difficulty: "advanced"
    lectures: [7, 8, 9]
    deliverables:
      - "Analysis report with visualizations"
      - "Reproducible Jupyter notebook"
      - "10-minute presentation"

  - id: "wallet-tracker"
    title: "Wallet Activity Tracker"
    description: "Track and visualize on-chain wallet activity patterns"
    difficulty: "beginner"
    lectures: [1, 2, 3]
    deliverables:
      - "Python script with CLI interface"
      - "README with usage examples"

# === QUIZ CONFIGURATION ===
quizzes:
  per_lecture: 5
  advanced_ratio: 0.3
  bloom_levels:
    - "understand"
    - "apply"
    - "analyze"
    - "evaluate"
  standard:
    count: 20
    bloom_distribution:
      understand: 4
      apply: 8
      analyze: 6
      evaluate: 2
  advanced:
    count: 20
    bloom_distribution:
      apply: 4
      analyze: 8
      evaluate: 6
      create: 2

# === VISUAL THEME ===
theme:
  primary_color: "#3333B2"
  secondary_color: "#0066CC"
  nav_color: "#1a1a4e"
  hero_gradient_start: "#3333B2"
  hero_gradient_end: "#0066CC"
  accent_color: "#FF7F0E"
  font_family: "-apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif"
  logo_path: "assets/logo.png"

Field Reference

Complete reference of all manifest fields, grouped by section. Fields marked Yes are required and will produce a hard error if missing.

Course Identity Fields

Field Type Required Description
course_name string Yes Full course name
short_name string Yes Abbreviated name for file paths and URLs
academic_year string Yes e.g., "2025/2026"
semester string Yes e.g., "Winter" or "Summer"
institution string Yes University name
department string No Department name
instructor.name string Yes Instructor full name
instructor.email string No Contact email
instructor.title string No Academic title
website_url string Yes Target GitHub Pages URL
github_repo string Yes GitHub repository name

Module Fields

Field Type Required Description
modules[].name string Yes Module name
modules[].color hex No Module accent color (auto-assigned if omitted)
modules[].lectures[].title string Yes Lecture title
modules[].lectures[].tex_file string Yes Source .tex filename
modules[].lectures[].topics string[] No Key topics covered
modules[].lectures[].charts object[] No Chart overrides (bypasses auto-derivation)

Project Fields

Field Type Required Description
projects[].title string Yes Project title
projects[].description string Yes Brief description
projects[].lectures int[] Yes Associated lecture numbers
projects[].difficulty string No "beginner" / "intermediate" / "advanced"

Quiz Fields

Field Type Required Description
quizzes.per_lecture int No Questions per lecture (default: 5)
quizzes.advanced_ratio float No Fraction of advanced questions (default: 0.3)
quizzes.bloom_levels string[] No Bloom's taxonomy levels to target

Theme Fields

Field Type Required Description
theme.primary_color hex No Primary accent color
theme.secondary_color hex No Secondary accent
theme.font_family string No Web font family
theme.logo_path string No Path to logo image

Validation Rules

The orchestrator validates the manifest before executing any pipeline stage. All errors and warnings are reported at once.

Hard Errors (block execution)

If any of these conditions are detected, the pipeline stops immediately and reports all errors.

  1. 1 Missing course_name or short_name -- these are the minimum identity fields required to generate any output.
  2. 2 Empty modules array -- at least one module with at least one lecture must be defined.
  3. 3 Module with zero lectures -- every module must contain at least one lecture entry.
  4. 4 Lecture missing tex_file -- the pipeline cannot compile a lecture without knowing its source file.
  5. 5 Duplicate tex_file across lectures -- each lecture must reference a unique .tex file to avoid overwriting compiled output.

Soft Warnings (proceed with notice)

These issues are reported but do not stop the pipeline. The orchestrator uses sensible defaults where possible.

  1. 1 Missing academic_year -- the year will be omitted from generated headers and footers.
  2. 2 Missing instructor.email -- the contact section on the website will not include an email link.
  3. 3 Module without explicit color -- a color will be auto-assigned from the default palette.
  4. 4 Lecture without topics -- chart auto-derivation will be disabled for this lecture; only manually specified charts will be generated.
  5. 5 No projects defined -- the website will omit the projects section entirely.
  6. 6 No quizzes configuration -- quizzes will use default settings (5 questions per lecture, 0.3 advanced ratio).

Design Tokens

All generated HTML uses a consistent color system derived from the Beamer template and the manifest theme section. These tokens ensure visual consistency across slides, lecture pages, galleries, and the website.

Core Colors

The foundational palette shared across all generated artifacts. These come from the Beamer template color definitions.

Token Hex Usage
mlpurple #6C3082 Primary brand color
mllavender #E6E6FA Light accent
mlblue #1F77B4 Charts, links
mlorange #FF7F0E Highlights
mlgreen #2CA02C Success states
mlred #D62728 Errors, warnings
mlgray #7F7F7F Muted text

Section Tag Colors

The 8-section pedagogical framework used in lecture HTML pages. Each section type has a distinct color for its tag background, text, and left border.

Section Color Hex
WHY (Introduction) Green #2CA02C
WHAT (Theory) Purple #3333B2
CASE (Application) Orange #FF7F0E
HOW (Method) Blue #0066CC
RISK (Challenges) Red #D62728
WHERE (Context) Teal #17a2b8
IMPACT (Significance) Amber #F7931A
SOWHAT (Summary) Violet #9b59b6

Badge Background Derivation

For module badges and section tags, the background color is derived algorithmically from the section or module color to ensure readability and visual consistency.

Algorithm: Take the section color hex value, parse it to RGB, then mix with white at 85% opacity to produce the badge background.

1. Parse the hex color to RGB components: r, g, b
2. Compute background: bg_r = 255 * 0.85 + r * 0.15, same for bg_g and bg_b
3. Use the original hex as the badge text color and border-left color
4. Convert the computed RGB back to hex for the CSS background property

This produces a subtle tinted background (15% color, 85% white) that pairs with the full-strength color for text, creating high contrast and consistent section identification.

Chart Auto-Derivation Algorithm

When a lecture does not specify explicit chart overrides, the orchestrator derives chart types automatically from the lecture's topic keywords. This eliminates manual figure planning while allowing the instructor to review and override any auto-derived chart.

How It Works

  1. The system scans each topic string in the lecture's topics array
  2. Topic keywords are matched against a chart type mapping table (case-insensitive)
  3. Matched chart types are collected into the lecture's figure list
  4. An overview diagram and summary table are always appended if not already present
  5. Remaining figure slots are filled by alternating concept illustrations and data visualizations

Chart Type Reference

Chart Type Keywords Description
line_plot "trend", "time series", "growth" Time-based data
bar_chart "comparison", "ranking", "distribution" Category comparisons
scatter_plot "correlation", "relationship" Variable relationships
histogram "distribution", "frequency" Data distribution
pie_chart "composition", "share", "proportion" Part-of-whole
heatmap "matrix", "correlation matrix" 2D data intensity
box_plot "quartile", "outlier", "spread" Statistical distribution
area_chart "cumulative", "stacked" Accumulated values
network_graph "network", "graph", "connection" Node-edge relationships
candlestick "stock", "price", "OHLC" Financial price data

When explicit charts overrides are provided in the manifest, they take priority. The auto-derivation algorithm only fills remaining slots that are not explicitly specified.