Claude-skill-registry blog-cc
Use when managing blog-cc static sites - content creation, deployment, themes, courses. Conversational content management with AI generation, validation, and GitHub Pages deployment.
git clone https://github.com/majiayu000/claude-skill-registry
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/blog-cc" ~/.claude/skills/majiayu000-claude-skill-registry-blog-cc && rm -rf "$T"
skills/data/blog-cc/SKILL.mdBlog-CC Content Management
⚠️ VERIFICATION REQUIRED
BEFORE using this skill, verify this is a blog-cc project:
- Check for
directory withcontent/
,collections/
, orpages/
subdirectoriescourses/ - Check for
withnext.config.js
config ORbasePathCONTENT-GUIDE.md - Check for theme system:
directorylib/themes/ - When uncertain: ASK the user "Is this a blog-cc project?"
NOT blog-cc if:
- Hugo, Jekyll, Gatsby, or other SSG (different file structure)
- WordPress or database-backed CMS
- Plain HTML site without Next.js
- Custom Next.js site without blog-cc content structure
Overview
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.
When to Use
ONLY after verifying blog-cc project, use this skill when you see:
- "Add video [URL]" or "Add content"
- "Create course about [topic]"
- "Deploy site" or "Publish to GitHub Pages"
- "Switch theme to [name]"
- "Validate content"
- "Preview changes"
When NOT to Use
NEVER use this skill for:
- Hugo, Jekyll, Gatsby sites (different architecture)
- WordPress or database CMS (not static site)
- Generic Next.js without blog-cc structure
- When project type is unclear - ASK THE USER FIRST
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
Quick Reference
| User Intent | Action | CLI Function |
|---|---|---|
| "Add video [URL]" | Extract metadata → generate tags → create file | |
| "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 | |
| "Validate content" | Schema + links + structure check | |
Essential Workflows
Content Creation (AI-Powered)
When user provides URL:
- Verify project with
isBlogCCProject() - Call
with URL onlyaddVideo() - AI extracts YouTube metadata and generates tags/description
- Show preview to user
- User confirms or edits
- Create file:
content/collections/[type]/[slug].md - Auto-commit:
feat: add video 'Title' - Offer preview: "Run
to see changes"./start.sh
Three modes:
- URL only: AI extracts all metadata
- Full args: Manual specification
- Interactive: Prompts for each field
Content Validation
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:
- Errors (blocking): Missing required fields, invalid dates, duplicates
- Warnings (non-blocking): Broken links, missing assets
- Files checked count
Never deploy with validation errors.
Collection Types & Schemas
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
Project Structure
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
Common Patterns
// 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)
Common Mistakes
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
Available CLI Utilities
Utils: yaml-handler, project-detector, git-helper, config-loader Content: add-video, ai-generator Validation: content-validator
See
lib/cli/ for TypeScript implementations.
Best Practices
- Always verify project before operations
- Use AI extraction when URL provided
- Show preview before creating files
- Validate before deploy (no exceptions)
- Auto-commit changes with descriptive messages
- Offer next steps after operations
- Check for existing files before creating
- Use consistent slugs (lowercase-with-dashes)
Themes
9 themes: iris (default), moss, crimson, ocean, amber, slate, violet, forest, sky
Switch: Update
.env THEME → preview → commit
Deployment (Coming Soon)
4-layer safety system:
- Content validation (schema, links, structure)
- Pre-deploy checks (build success, git status)
- Preview (serve locally before push)
- Rollback (git tags for quick revert)
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
Additional Resources
- Framework Repo: https://github.com/imehr/blog-cc-framework
- Template Repo: https://github.com/imehr/blog-cc
- CLI docs: TypeScript comments in
lib/cli/
When Deployment Fails
CRITICAL: Diagnose before acting. Never guess under pressure.
- check for validation errors FIRSTvalidateContent()
- verify build succeeds locallynpm run build- Check GitHub Actions logs in repo → Actions tab
- Verify
has.env.productionBASE_PATH=/repo-name - Check GitHub Pages settings: Settings → Pages → Source: gh-pages branch
For content issues: validate → fix → rebuild → redeploy For build issues: check logs → fix errors → test locally → redeploy