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.

install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
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"
manifest: skills/data/create-blog/SKILL.md
source content

Blog 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:

FieldDescriptionNotes
TitleBlog post titleClear, descriptive
Content TypeOne of: original, curated, embed, projectSee types below
Summary150-200 character descriptionFor 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:

  1. "What's the title of your blog post?"
  2. "What type of content is this?" (explain options if needed)
  3. "Can you give me a 1-2 sentence summary?"
  4. "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:

  1. Load voice learning patterns from style docs at
    .agents/style-docs/blog-style.json
  2. Generate Hugo content bundle at
    content/blog/posts/YYYY-MM-DD-slug/index.md
  3. Create image prompts (saved in bundle metadata)
  4. Create a draft review file at
    .agents/drafts/blog-{slug}.review.json
  5. 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:

  1. Open the generated file at the bundle path
  2. Edit the content as needed (the draft is fully editable)
  3. 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:

  1. Remove
    draft: true
    from the content file
  2. Update the review file status to
    approved
  3. 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.

  1. Title: What would you like to call it? Something like "My Experience with Claude Code" or something more specific?

  2. Content Type: This sounds like original content - your own thoughts and analysis. Does that sound right?

  3. Summary: Can you give me a 1-2 sentence summary? (This will appear in search results and social shares)

  4. 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

ResourcePath
Blog posts
content/blog/posts/
Draft review files
.agents/drafts/
Style documentation
.agents/style-docs/blog-style.json
Blog Agent
src/agents/blog/blog-agent.ts
Validation script
scripts/validate-blog-post.sh
Content types
data/content_types.yaml