Use when managing blog-cc static sites - content creation, deployment, themes, courses. Conversational content management with AI generation, validation, and GitHub Pages deployment.
BEFORE using this skill, verify this is a blog-cc project:
content/ directory with collections/, pages/, or courses/ subdirectoriesnext.config.js with basePath config OR CONTENT-GUIDE.mdlib/themes/ directoryNOT blog-cc if:
Blog-cc is a Next.js-based static site generator for AI learning content. This skill provides conversational content management with AI-powered generation, course building, and GitHub Pages deployment.
Core principle: Use TypeScript CLI utilities for operations. Validate before deploying. Git-tag deployments. Preview before publishing.
ONLY after verifying blog-cc project, use this skill when you see:
NEVER use this skill for:
If uncertain, verify first:
# Check for blog-cc structure
ls content/collections content/pages CONTENT-GUIDE.md
# If missing ā NOT blog-cc ā DON'T use this skill
| User Intent | Action | CLI Function |
|---|---|---|
| "Add video [URL]" | Extract metadata ā generate tags ā create file | addVideo() |
| "Create course [topic]" | AI outline ā scaffold structure | Coming soon |
| "Deploy site" | Validate ā build ā tag ā push | Coming soon |
| "Switch theme [name]" | Update .env ā preview ā commit | Coming soon |
| "Preview changes" | Build ā serve port 4567 | ./start.sh |
| "Validate content" | Schema + links + structure check | validateContent() |
When user provides URL:
isBlogCCProject()addVideo() with URL onlycontent/collections/[type]/[slug].mdfeat: add video 'Title'./start.sh to see changes"Three modes:
Before deployment, always validate:
import { validateContent } from './lib/cli/validation/content-validator'
const result = await validateContent(projectRoot)
// Checks:
// - Required fields per collection type (videos: title, author, url)
// - Duplicate slugs
// - Date formats (YYYY-MM-DD)
// - Course structure (course.md, modules/)
Reports:
Never deploy with validation errors.
9 supported collection types:
| Collection | Required Fields | Optional |
|---|---|---|
| videos | title, author, url | duration, description, tags |
| podcasts | title, host, url | episode, duration, description |
| people | name, role, url | bio, tags |
| products | name, description, url | price, tags |
| courses | title, provider, url | duration, level, tags |
| tutorials | title, author, url | duration, difficulty, tags |
| books | title, author | publisher, isbn, url |
| repos | title, owner, url | stars, language, tags |
| tweets | author, content, url | date, tags |
File location: content/collections/[collection-type]/[slug].md
blog-cc-project/
āāā content/
ā āāā collections/
ā ā āāā videos/
ā ā āāā tutorials/
ā ā āāā courses/
ā ā āāā ... (9 types)
ā āāā pages/ # Blog posts
ā āāā courses/ # Multi-module courses
ā ā āāā [slug]/
ā ā āāā course.md
ā ā āāā modules/
ā āāā home.md
āāā lib/
ā āāā themes/ # 9 themes
āāā .env # THEME=moss
āāā .env.production # BASE_PATH=/repo-name
āāā next.config.js
āāā CONTENT-GUIDE.md
// Add content from URL (AI extracts metadata)
import { addVideo } from './lib/cli/content/add-video'
await addVideo(projectRoot, { url: 'https://youtube.com/...' })
// Validate before deploy
import { validateContent } from './lib/cli/validation/content-validator'
const result = await validateContent(projectRoot)
if (!result.valid) { console.log(result.errors); process.exit(1) }
// Load project config
import { loadBlogCCConfig } from './lib/cli/utils/config-loader'
const config = await loadBlogCCConfig(projectRoot)
1. Not verifying blog-cc project - always check structure first
2. Skipping validation - always validate before deploy
3. Hardcoding paths - use config.contentDir from config loader
4. Creating invalid slugs - slugify: lowercase, replace spaces with dashes
5. Missing frontmatter fields - check schema for required fields per collection
6. Not auto-committing - use autoCommit() from git-helper
7. Forgetting to offer preview - always suggest ./start.sh after changes
Utils: yaml-handler, project-detector, git-helper, config-loader Content: add-video, ai-generator Validation: content-validator
See lib/cli/ for TypeScript implementations.
9 themes: iris (default), moss, crimson, ocean, amber, slate, violet, forest, sky
Switch: Update .env THEME ā preview ā commit
4-layer safety system:
Deployment flow:
# 1. Validate
validateContent()
# 2. Build
npm run build
# 3. Tag
git tag deploy/site-name/2025-11-03-14-30-00
# 4. Push
git push origin main --tags
# 5. GitHub Pages builds automatically
lib/cli/CRITICAL: Diagnose before acting. Never guess under pressure.
validateContent() - check for validation errors FIRSTnpm run build - verify build succeeds locally.env.production has BASE_PATH=/repo-nameFor content issues: validate ā fix ā rebuild ā redeploy For build issues: check logs ā fix errors ā test locally ā redeploy