Skip to content
Back to skills

Scaffold Course

ASecurity

Scaffold a new 8-week transformational course — creating the database rows, ingestion script, and optional markdown content directory. Use when starting a new course from scratch with a slug and title.

  • 2 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added October 26, 2026
researchdatabase

Security analysis

A100/100

Scanned October 26, 2026

npx -y skills add JoshuaShepherd/my-skills --skill scaffold-course --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Scaffold Course?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Scaffold Course
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/joshuashepherd-scaffold-course/badge)](https://www.skillsdirectory.com/skills/joshuashepherd-scaffold-course)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: scaffold-course
description: Scaffold a new 8-week transformational course — creating the database rows, ingestion script, and optional markdown content directory. Use when starting a new course from scratch with a slug and title.
---

Scaffold a new course: $ARGUMENTS

## Inputs

Parse the arguments for:
- **slug** (required) — e.g., `mdna-primer`
- **title** (required) — e.g., "mDNA Primer: Recovering the Genetics of Ecclesia"
- **portal** (optional) — one of: reframation, metanoia, mdna, mx, {{course-slug}}

If any required input is missing, ask the user.

## Before Starting

1. Read `{{SCHEMA_PATH}}` — find the `courses`, `courseWeeks`, and `courseLessons` table definitions
2. Read `{{SCHEMAS_DIR}}/course-learn.ts` — understand SECTION_TYPES
3. Read `src/lib/config/lesson-types.ts` — canonical type list
4. Read `{{DOCS_DIR}}/TRANSFORMATIONAL_COURSE_PLAYBOOK.md` — the 8-week structure and M.N.X element layout
5. Read 1-2 existing ingestion scripts in `{{SCRIPTS_DIR}}/` for patterns (e.g., `ingest-{{course-slug}}-course.ts`)

## Course Structure (8 Weeks)

Every course follows this exact structure. **8 weeks total, numbered 1-8. No Week 0.**

| Week | Role | Core Sections |
|------|------|--------------|
| **Week 1** | Introduction & Orientation | welcome, video, reading, assessment, reflection, practical_exercise, looking_ahead |
| **Weeks 2-7** | Core Modules | lordship_opening, video, reading, scripture, reflection, practical_exercise, field_experiment, discussion, cohort_session, integration, lordship_closing, looking_ahead, resource_blurb, action |
| **Week 8** | Synthesis & Commissioning | reading, reflection, integration, assessment, commissioning, journey_continues, post_course |

## Canonical Section Order per Core Week (2-7)

Each core week gets these sections in this order (M.N.X naming):

| Order | M.N.X | section_type | Sidebar Label |
|-------|-------|-------------|---------------|
| 1 | M.N.1 | lordship_opening | Opening |
| 2 | M.N.2 | reading | Reading |
| 3 | M.N.3 | video | Video |
| 4 | M.N.4 | scripture | Scripture |
| 5 | M.N.5 | reflection | Reflection |
| 6 | M.N.6 | practical_exercise | Exercise |
| 7 | M.N.7 | field_experiment | Field Experiment |
| 8 | M.N.8 | discussion | Discussion |
| 9 | M.N.9 | cohort_session | Cohort Session |
| 10 | M.N.10 | integration | Integration |
| 11 | M.N.11 | lordship_closing | Closing |
| 12 | M.N.12 | looking_ahead | Looking Ahead |
| 13 | M.N.13 | resource_blurb | Resource |
| 14 | M.N.14 | action | Formation Companion |

## Process

### Step 1: Create the ingestion script

Create `{{SCRIPTS_DIR}}/scaffold-course-[slug].ts` that:

1. Connects to the database using the project's Drizzle setup
2. Creates the `courses` row with:
   - title, slug, description (placeholder), status: "draft"
   - duration_weeks: 8
   - course_type: "formation"
   - portal_themes: `["<portal>"]` if portal provided
   - organization_id from `getOrgId()`
3. Creates 8 `courseWeeks` rows (week_number 1-8) with:
   - Titles: "Introduction & Orientation" (1), "Module N: [TBD]" (2-7), "Synthesis & Commissioning" (8)
   - order_index matching week_number
4. Creates `courseLessons` rows for each week following the canonical section order above
   - Each lesson: title (from sidebar label + week context), slug (auto-generated), section_type, section_order, week_id, course_id, status: "draft", content: "" (empty — to be authored)
   - For Week 1: use the introduction sections
   - For Weeks 2-7: use the full canonical order (14 sections each)
   - For Week 8: use the closing sections

### Step 2: Optionally scaffold markdown files

Ask the user if they also want a markdown content directory. If yes, create:

```
content-library/courses/[slug]/
  course-manifest.json
  week-01-introduction.md
  week-02-module-02.md
  ...
  week-08-synthesis.md
```

Each markdown file should have section headers matching M.N.X naming:
```markdown
## M2.1 — Lordship Opening
[Content TBD]

## M2.2 — Main Reading
[Content TBD — target: 2,500-3,500 words]
```

The manifest should list all lessons with ids, types, and week assignments.

### Step 3: Report

Output a summary:
- Course created: title (slug)
- Weeks: 8
- Total sections: N
- Sections per week breakdown
- Next steps: "Use `/course-author` to generate content for each M.N.X element"

## Rules

- **8 weeks exactly.** Week 1 = introduction, Week 8 = closing. No Week 0.
- Use `getOrgId()` for organization_id scoping
- Set all content to draft status
- Follow the project's Drizzle insert patterns from existing scripts
- Never hardcode UUIDs — let the database generate them
- Validate the slug doesn't already exist before inserting

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.