Creating Courses
CLI Workflow
Validate and deploy courses using the pov CLI. Always validate before pushing.
CLI Commands
pov validate-courseValidate all content in the current course directory.
pov push-courseDeploy the course to staging (the default environment).
pov validate-course-batch <dir>Validate all courses in a parent directory.
pov push-course-batch <dir>Deploy all courses in a parent directory to the active environment.
Development Workflow
Follow these steps when creating or updating a course:
- 1Create your course directory with course.yml and content files.
- 2Log in: pov login
- 3Validate locally: pov validate-course
- 4Push to staging: pov push-course
- 5After staging verification, push to production: POV_ENV=production pov push-course.
# Validate
pov validate-course
# Deploy to staging (default)
pov push-course
# Deploy to production explicitly
POV_ENV=production pov push-courseBatch Operations
Use batch commands when managing multiple courses in a shared parent directory. Each subdirectory is treated as a separate course and processed in sequence:
# Validate all courses under ./courses/
pov validate-course-batch ./courses
# Deploy all to staging (default)
pov push-course-batch ./courses
# Deploy all to production explicitly
POV_ENV=production pov push-course-batch ./coursesTroubleshooting
Common validation and deployment errors and how to fix them:
| Error | Cause | Fix |
|---|---|---|
missing required field: slug | course.yml is missing the slug field. | Add slug: "your-slug" to course.yml. |
invalid difficulty value | difficulty must be one of: beginner, intermediate, advanced. | Use exact lowercase value. |
content path not found | A path in sections[].contentItems references a directory that doesn't exist. | Verify directory path matches exactly. |
not authenticated | You're not logged in or your session expired. | Run pov login. |
