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 manifestOutputs
slides/{lecture}/ directories containing .tex files for each variantProcess
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
.texfiles 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 outputsProcess
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.htmlProcess
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.yamlOutputs
lectures/{lecture}.html files, one per lectureProcess
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 manifestOutputs
quizzes/{lecture}-quiz.html files, one per lectureProcess
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 1Outputs
projects/{project}.html files, one per project trackProcess
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
- 1.Identify the failed stage from
course-state.json(status:"failed") - 2.Resolve the underlying error (e.g., install
pdftoppmif missing) - 3.Re-run the pipeline skill — it will automatically resume from the failed stage, preserving all previous outputs
- 4.To force a full re-run of a specific stage, delete that stage's entry from
course-state.jsonbefore re-running
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