Claude-skill-registry create-blog
Creates conversational blog posts with proper Hugo frontmatter and SEO optimization. Use when the user wants to write a blog post, draft blog content, or add an article. Supports four content types (original, curated, embed, project) with voice learning for consistent tone.
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/create-blog" ~/.claude/skills/majiayu000-claude-skill-registry-create-blog && rm -rf "$T"
skills/data/create-blog/SKILL.mdBlog Post Creation Skill
Creates blog posts with conversational, personal tone using proper Hugo page bundles and SEO/AEO optimization.
When to Use
Activate when users:
- Want to write or create a blog post
- Ask to draft blog content
- Need to add an article or entry to the blog
- Request help with blog writing
Required Information
Gather through conversation before generating:
| Field | Description | Notes |
|---|---|---|
| Title | Blog post title | Clear, descriptive |
| Content Type | One of: original, curated, embed, project | See types below |
| Summary | 150-200 character description | For SEO/social |
Content Types
- original - Original thoughts and analysis written by the author
- curated - Collected resources with personal commentary (requires attribution, source_url)
- embed - Embedded external content with commentary (requires attribution, source_url)
- project - Project-based posts sharing work and learnings
Optional Information
- Key Points - Main ideas to cover in the post
- Tags - Categorization tags (array)
- Categories - Blog categories (array)
- Attribution - Required for curated/embed: original content creator
- Source URL - Required for curated/embed: link to original source
Generation Process
Step 1: Gather Information
Ask the user conversationally:
- "What's the title of your blog post?"
- "What type of content is this?" (explain options if needed)
- "Can you give me a 1-2 sentence summary?"
- "What are the key points you want to cover?"
For curated/embed types, also ask: 5. "Who created the original content? (attribution)" 6. "What's the source URL?"
Step 2: Invoke Blog Agent
Run the TypeScript agent to generate the content bundle:
bun run src/agents/cli/agent-cli.ts blog \ --title "{{title}}" \ --type {{content_type}} \ --summary "{{summary}}" \ --tags "{{tags}}" \ --key-points "{{key_points}}"
The agent will:
- Load voice learning patterns from style docs at
.agents/style-docs/blog-style.json - Generate Hugo content bundle at
content/blog/posts/YYYY-MM-DD-slug/index.md - Create image prompts (saved in bundle metadata)
- Create a draft review file at
.agents/drafts/blog-{slug}.review.json - Output the bundle path and preview
Example output:
--- Blog Agent --- Generating blog post... [SUCCESS] Blog post generated Bundle path: content/blog/posts/2026-01-26-my-post/index.md Frontmatter: { title: "My Post", draft: true, ... } Image prompts: ["A professional photo of..."] --- Content Preview --- ## Introduction ...
Step 3: User Review
After generation, the user should:
- Open the generated file at the bundle path
- Edit the content as needed (the draft is fully editable)
- Review the structure and tone
Show the user:
- The bundle path for editing
- A preview of the generated content
- Remind them the draft is saved with
draft: true
Step 4: Approval Workflow
Never auto-publish. When the user is satisfied with the draft:
Option A: Use the approve skill
/approve-blog {{slug}}
Option B: Use the CLI directly
bun run src/agents/cli/agent-cli.ts approve --type blog --slug {{slug}}
This will:
- Remove
from the content filedraft: true - Update the review file status to
approved - The content is now ready for publishing
Step 5: Validate (Optional)
Run validation script to check for issues:
./scripts/validate-blog-post.sh content/blog/posts/YYYY-MM-DD-slug
Validation checks:
- Required frontmatter fields present
- No H1 headings in content body
- Summary length 150-200 characters
- Content type-specific requirements (attribution for curated/embed)
- Image paths valid (if images included)
Voice Learning
Record feedback to improve future content. The style system learns from:
- Positive feedback: "I love the personal stories"
- Negative feedback: "This is too formal"
Style docs location:
.agents/style-docs/blog-style.json
Draft Management
List all pending drafts:
bun run src/agents/cli/agent-cli.ts drafts --type blog
Example Interaction
User: I want to write a blog post about my experience with Claude Code
Assistant: Great! Let me gather some details for your blog post.
-
Title: What would you like to call it? Something like "My Experience with Claude Code" or something more specific?
-
Content Type: This sounds like original content - your own thoughts and analysis. Does that sound right?
-
Summary: Can you give me a 1-2 sentence summary? (This will appear in search results and social shares)
-
Key Points: What main points do you want to cover?
User: Title: "Why Claude Code Changed My Workflow" Original content Summary: "Claude Code fundamentally changed how I approach coding. Here's what I learned after 3 months of daily use." Key points: faster iteration, better code quality, learning new patterns
Assistant: I'll generate your blog post now.
bun run src/agents/cli/agent-cli.ts blog \ --title "Why Claude Code Changed My Workflow" \ --type original \ --summary "Claude Code fundamentally changed how I approach coding. Here's what I learned after 3 months of daily use." \ --key-points "faster iteration,better code quality,learning new patterns"
Your draft is ready at:
content/blog/posts/2026-01-26-why-claude-code-changed-my-workflow/index.md
Please review the generated content and make any edits. When you're satisfied, run
/approve-blog why-claude-code-changed-my-workflow to publish.
File Locations
| Resource | Path |
|---|---|
| Blog posts | |
| Draft review files | |
| Style documentation | |
| Blog Agent | |
| Validation script | |
| Content types | |