create-blog-post

0
0
Source

Use this if the user wants to convert a blog post from Google Docs markdown to the format used in the Home Assistant website.

Install

mkdir -p .claude/skills/create-blog-post && curl -L -o skill.zip "https://mcp.directory/api/skills/download/4446" && unzip -o skill.zip -d .claude/skills/create-blog-post && rm skill.zip

Installs to .claude/skills/create-blog-post

About this skill

Create Blog Post

Convert a draft markdown file into a properly formatted Home Assistant blog post.

Usage

Place your draft blog post markdown file in the project root create-blog-post/ directory (e.g., /workspaces/home-assistant.io/create-blog-post/), then run:

/create-blog-post

What This Skill Does

Automates conversion of a draft markdown file with metadata into a production-ready Home Assistant blog post:

  • Extracts metadata (blog title, author, publish date, category, Social/OpenGraph fields)
  • Removes "# Blog notes/preparations" section and lines with ☝️ emoji
  • Converts ### **– Summary break / Read more –** to <!--more-->
  • Processes hero image and any additional images
  • Converts external links to HTML <a> tags with target="_blank"
  • Formats content (removes bold from headings, fixes link references)
  • Creates properly formatted blog post in source/_posts/ with Jekyll front matter

Required Files in create-blog-post/ Directory

  1. Draft markdown file (any .md filename)
  2. art.webp - Hero/OG image (required)
  3. image2.png, image3.png, etc. - Additional images (optional, will be converted to WebP)

Draft File Format

# Metadata

**Blog title:** Your Blog Title

**Author:** Author Name

**Publish date:** DD-MM-YYYY

**Category:** Category Name

**Social/OpenGraph title** (Usually same as the blog title, visibility mostly limited to 50-60 characters)**:**
A short title.

**Social/OpenGraph description** (120-158 characters):
Influences SEO ranking. Include the main keyword, describe what readers will find, and give them a clear reason to click.

# Blog notes/preparations

☝️ Any lines with the pointer emoji can be removed during processing

# Blog content

![][image1]

Your intro paragraph here...

### **– Summary break / Read more –**

Rest of content...

Notes:

  • The ![][image1] reference should appear at the start of the "# Blog content" section. This will be replaced with the art.webp hero image.
  • URL slug is optional and will be auto-generated from the blog title if not provided in metadata
  • Lines beginning with ☝️ emoji are instructions and will be removed during processing
  • The ### **– Summary break / Read more –** marker will be converted to <!--more-->

Output

Creates a production-ready blog post at:

  • source/_posts/YYYY-MM-DD-slug.markdown - The formatted blog post
  • source/images/blog/YYYY-MM-slug/art.webp - OG/hero image (moved from create-blog-post/)
  • source/images/blog/YYYY-MM-slug/image2.webp, image3.webp, etc. - Additional images (converted from PNGs)

Conversion Process

1. Parse Metadata

  • Extract blog title, author, publish date, category (convert to YAML list), Social/OpenGraph title and description
  • Auto-generate URL slug from blog title (lowercase, hyphens for spaces, remove special characters)
  • Remove "# Blog notes/preparations" section and all content under it (up to "# Blog content")
  • Remove all lines that start with ☝️ emoji (instruction lines)
  • Convert ### **– Summary break / Read more –** marker to <!--more-->

2. Process Images

Hero image (art.webp):

  • Move to source/images/blog/YYYY-MM-slug/art.webp
  • Replace ![][image1] reference in "# Blog content" section with: <img src="/images/blog/YYYY-MM-slug/art.webp" alt="Blog Title" style="border: 0;box-shadow: none;">
  • CRITICAL: Use double quotes for all HTML attributes (prevents breaking on apostrophes in alt text)
  • Alt text uses the Social/OpenGraph title or blog title
  • No wrapper tags (no <p> tag)

Additional images (if any):

  • Find image2.png, image3.png, etc. in create-blog-post/ directory
  • Convert to WebP: cwebp -resize 900 0 -q 85 input.png -o output.webp
  • Move to source/images/blog/YYYY-MM-slug/
  • Update references in content

3. Transform Links

External links (different domains/subdomains):

  • Convert to: <a href="URL" target="_blank" rel="noopener">text</a>
  • Includes: my.home-assistant.io, partner.home-assistant.io, etc.

Internal links (www.home-assistant.io only):

  • Keep as Markdown links: [text](/path)

4. Clean Content

  • Headings: Remove bold formatting (## **Title**## Title)
  • Heading levels: If content starts with H1 (#), demote all headings one level (content should start at H2)
  • Backticks: Strip erroneous ``` characters (preserve code blocks/inline code)

5. Build Blog Post

  • Create source/_posts/YYYY-MM-DD-slug.markdown
  • Jekyll front matter (layout, title, description, date, date_formatted, author, categories, og_image)
  • Hero image (no wrapper)
  • Intro paragraph
  • <!--more--> tag after first paragraph
  • Remaining content

Example

  1. Place in project root create-blog-post/:
    • draft-partner-update.md - Your draft file
    • art.webp - OG/hero image
    • image2.png, image3.png - Additional images (if any)
  2. Run /create-blog-post

This would create:

  • source/_posts/2026-01-13-partner-update.markdown
  • source/images/blog/2026-01-partner/art.webp
  • source/images/blog/2026-01-partner/image2.webp, image3.webp (if additional images exist)

Important Notes

Image references:

  • Draft: ![][image1] (at start of "# Blog content" section) → Output: art.webp hero image
  • Draft: ![][image2] → Look for image2.png, convert to image2.webp
  • Draft: ![][image3] → Look for image3.png, convert to image3.webp

Requirements:

  • Hero image reference should appear at the start of the "# Blog content" section
  • cwebp tool required for PNG→WebP conversion (install: sudo apt-get install -y webp)

Content processing:

  • Remove "# Blog notes/preparations" section entirely
  • Remove all lines starting with ☝️ emoji (instruction lines)
  • Convert ### **– Summary break / Read more –** to <!--more-->

Output format:

  • Filename: YYYY-MM-DD-slug.markdown
  • Image directory: source/images/blog/YYYY-MM-slug/
  • Categories in YAML list format (even single category)

Link handling:

  • Only www.home-assistant.io and home-assistant.io stay as Markdown links
  • All other domains/subdomains → HTML <a> tags with target="_blank" rel="noopener"

You might also like

flutter-development

aj-geddes

Build beautiful cross-platform mobile apps with Flutter and Dart. Covers widgets, state management with Provider/BLoC, navigation, API integration, and material design.

267784

drawio-diagrams-enhanced

jgtolentino

Create professional draw.io (diagrams.net) diagrams in XML format (.drawio files) with integrated PMP/PMBOK methodologies, extensive visual asset libraries, and industry-standard professional templates. Use this skill when users ask to create flowcharts, swimlane diagrams, cross-functional flowcharts, org charts, network diagrams, UML diagrams, BPMN, project management diagrams (WBS, Gantt, PERT, RACI), risk matrices, stakeholder maps, or any other visual diagram in draw.io format. This skill includes access to custom shape libraries for icons, clipart, and professional symbols.

202413

godot

bfollington

This skill should be used when working on Godot Engine projects. It provides specialized knowledge of Godot's file formats (.gd, .tscn, .tres), architecture patterns (component-based, signal-driven, resource-based), common pitfalls, validation tools, code templates, and CLI workflows. The `godot` command is available for running the game, validating scripts, importing resources, and exporting builds. Use this skill for tasks involving Godot game development, debugging scene/resource files, implementing game systems, or creating new Godot components.

182270

nano-banana-pro

garg-aayush

Generate and edit images using Google's Nano Banana Pro (Gemini 3 Pro Image) API. Use when the user asks to generate, create, edit, modify, change, alter, or update images. Also use when user references an existing image file and asks to modify it in any way (e.g., "modify this image", "change the background", "replace X with Y"). Supports both text-to-image generation and image-to-image editing with configurable resolution (1K default, 2K, or 4K for high resolution). DO NOT read the image file first - use this skill directly with the --input-image parameter.

206231

ui-ux-pro-max

nextlevelbuilder

"UI/UX design intelligence. 50 styles, 21 palettes, 50 font pairings, 20 charts, 8 stacks (React, Next.js, Vue, Svelte, SwiftUI, React Native, Flutter, Tailwind). Actions: plan, build, create, design, implement, review, fix, improve, optimize, enhance, refactor, check UI/UX code. Projects: website, landing page, dashboard, admin panel, e-commerce, SaaS, portfolio, blog, mobile app, .html, .tsx, .vue, .svelte. Elements: button, modal, navbar, sidebar, card, table, form, chart. Styles: glassmorphism, claymorphism, minimalism, brutalism, neumorphism, bento grid, dark mode, responsive, skeuomorphism, flat design. Topics: color palette, accessibility, animation, layout, typography, font pairing, spacing, hover, shadow, gradient."

163194

rust-coding-skill

UtakataKyosui

Guides Claude in writing idiomatic, efficient, well-structured Rust code using proper data modeling, traits, impl organization, macros, and build-speed best practices.

162173

Stay ahead of the MCP ecosystem

Get weekly updates on new skills and servers.