Course Creator Skills

7-Stage Pipeline

The Course Creator pipeline transforms a course.yaml manifest into a fully deployed GitHub Pages course website through seven sequential stages, each building on the outputs of the previous.

Pipeline Overview

1
Slides .tex files
beamer-slide-creator full-lecture-generator mini-lecture-generator
2
Charts .py scripts → .pdf charts
3
Galleries .pdf → .png → gallery HTML
4
Lectures lecture HTML pages
5
Quizzes quiz HTML pages
6
Projects project track pages
7
Deploy GitHub Pages site

Stage Details

1 Slides course-creator-slides.md — 278 lines
Inputs
course.yaml manifest, lecture topics defined in manifest
Outputs
slides/{lecture}/ directories containing .tex files for each variant
Process
Creates a master content plan, then generates six .tex file variants per lecture using the triad sub-skills (beamer-slide-creator, full-lecture-generator, mini-lecture-generator). Variants produced: full (~30 slides), compact (~15 slides), extended (~45 slides), teaser (5 slides), standalone-mini (10 slides), and practice.
Quality Gates
  • All .tex files compile without errors
  • Slide count within variant target ±20%
Sub-skills
beamer-slide-creator (1736 lines) full-lecture-generator (900 lines) mini-lecture-generator (583 lines)
2 Charts course-creator-charts.md — 180 lines
Inputs
Lecture topics, chart auto-derivation results from manifest analysis
Outputs
charts/{lecture}/ directories with .py scripts and compiled .pdf chart outputs
Process
Generates chart_styles.py containing the V4_COLORS palette shared across all charts. Creates individual matplotlib/numpy chart scripts for each required visualization, then compiles each script to produce PDF output.
Quality Gates
  • All scripts execute without errors
  • PDF files generated successfully for all charts
3 Galleries course-creator-galleries.md — 491 lines
Inputs
PDF slide files from Stage 1 (slides/{lecture}/)
Outputs
galleries/{lecture}/ directories with .png slide images and gallery.html
Process
Converts PDF slides to PNG images using pdftoppm or ImageMagick as the conversion backend. Generates gallery HTML pages with a built-in lightbox viewer for full-size slide inspection.
Quality Gates
  • All PDFs successfully converted to PNG
  • Gallery pages render correctly in browser
  • Lightbox viewer is functional
4 Lectures course-creator-lectures.md — 695 lines
Inputs
Slide content (Stage 1), charts (Stage 2), gallery pages (Stage 3), course.yaml
Outputs
lectures/{lecture}.html files, one per lecture
Process
Creates HTML lecture pages with section-colored navigation bars, KaTeX math rendering for all equations, inline CSS (~130 rules per page), and download links to the compiled PDF variants. Each page integrates embedded chart images and links to the slide gallery.
Quality Gates
  • KaTeX renders all math expressions correctly
  • Section colors match specification in manifest
  • All download links point to valid PDF files
5 Quizzes course-creator-quizzes.md — 329 lines
Inputs
Lecture content from Stage 1, quiz configuration from course.yaml manifest
Outputs
quizzes/{lecture}-quiz.html files, one per lecture
Process
Generates dual-tier quizzes: standard multiple-choice questions for recall and comprehension, plus advanced questions aligned to Bloom's taxonomy levels (analysis, evaluation, synthesis). Creates interactive HTML pages with JavaScript-powered answer checking.
Quality Gates
  • All questions have exactly one marked correct answer
  • checkAnswers() JavaScript function operates correctly
  • Bloom's taxonomy levels are appropriate to question complexity
6 Projects course-creator-projects.md — 613 lines
Inputs
Project definitions from course.yaml manifest, lecture associations from Stage 1
Outputs
projects/{project}.html files, one per project track
Process
Creates project track HTML pages featuring lecture pill navigation color-coded by module, an auto-generated grading rubric, and full description sections. Assigns a difficulty badge based on the project configuration in the manifest.
Quality Gates
  • Lecture pills link correctly to corresponding lecture pages
  • Rubric is complete with all grading criteria
  • Difficulty badge accurately reflects manifest configuration
7 Deploy course-creator-deploy.md — 301 lines
Inputs
All generated content from Stages 1–6
Outputs
Complete deployable website; GitHub repository with Pages enabled and CI/CD workflow
Process
Copies all compiled PDFs to the downloads/ directory, generates the index.html landing page listing all lectures and projects, creates the GitHub repository, configures GitHub Pages, and sets up a GitHub Actions CI/CD workflow for automated rebuilds on push.
Quality Gates
  • All internal links resolve correctly
  • GitHub Pages build completes successfully
  • Index page lists all lectures and projects

Stage Dependencies

The table below shows which stages must complete before a given stage can begin, and which stages are unblocked once it finishes.

Stage Depends On Blocks
1 — Slides None 2, 3, 4, 5, 6
2 — Charts 1 (topics) 4
3 — Galleries 1 (PDFs) 4, 7
4 — Lectures 1, 2, 3 7
5 — Quizzes 1 (content) 7
6 — Projects 1 (content) 7
7 — Deploy 1, 2, 3, 4, 5, 6 None

Error Recovery

The pipeline tracks progress in a course-state.json file. If any stage fails, you can resume from the failed stage without re-running earlier stages.

State File Format

{
  "course": "Blockchain",
  "started": "2026-01-15T10:30:00Z",
  "stages": {
    "slides":    { "status": "complete", "completed_at": "2026-01-15T10:45:00Z" },
    "charts":    { "status": "complete", "completed_at": "2026-01-15T11:02:00Z" },
    "galleries": { "status": "failed",   "error": "pdftoppm not found" },
    "lectures":  { "status": "pending" },
    "quizzes":   { "status": "pending" },
    "projects":  { "status": "pending" },
    "deploy":    { "status": "pending" }
  }
}
Recovery Procedure
Note: Previous stage outputs are always preserved on disk. Re-running a stage overwrites only its own outputs and updates its entry in course-state.json.

Output Directory Structure

All generated files are written under the course short-name directory defined in course.yaml.

{course-short-name}/ ├── slides/ │ ├── lecture-01/ │ │ ├── lecture-01-full.tex │ │ ├── lecture-01-compact.tex │ │ └── ... (extended, teaser, standalone-mini, practice) │ └── lecture-02/ ├── charts/ │ ├── lecture-01/ │ │ ├── chart_styles.py │ │ ├── chart-01.py │ │ └── chart-01.pdf │ └── ... ├── galleries/ │ ├── lecture-01/ │ │ ├── slide-001.png │ │ ├── slide-002.png │ │ └── gallery.html │ └── ... ├── lectures/ │ ├── lecture-01.html │ └── ... ├── quizzes/ │ ├── lecture-01-quiz.html │ └── ... ├── projects/ │ ├── project-01.html │ └── ... ├── downloads/ │ ├── lecture-01-full.pdf │ └── ... ├── index.html └── course-state.json