Use this if the user wants to convert a blog post from Google Docs markdown to the format used in the Home Assistant website.
Convert a draft markdown file into a properly formatted Home Assistant blog post.
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
Automates conversion of a draft markdown file with metadata into a production-ready Home Assistant blog post:
### **– Summary break / Read more –** to <!--more--><a> tags with target="_blank"source/_posts/ with Jekyll front mattercreate-blog-post/ Directoryart.webp - Hero/OG image (required)image2.png, image3.png, etc. - Additional images (optional, will be converted to WebP)# 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:
![][image1] reference should appear at the start of the "# Blog content" section. This will be replaced with the art.webp hero image.### **– Summary break / Read more –** marker will be converted to <!--more-->Creates a production-ready blog post at:
source/_posts/YYYY-MM-DD-slug.markdown - The formatted blog postsource/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)### **– Summary break / Read more –** marker to <!--more-->Hero image (art.webp):
source/images/blog/YYYY-MM-slug/art.webp![][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;"><p> tag)Additional images (if any):
image2.png, image3.png, etc. in create-blog-post/ directorycwebp -resize 900 0 -q 85 input.png -o output.webpsource/images/blog/YYYY-MM-slug/External links (different domains/subdomains):
<a href="URL" target="_blank" rel="noopener">text</a>my.home-assistant.io, partner.home-assistant.io, etc.Internal links (www.home-assistant.io only):
[text](/path)## **Title** → ## Title)#), demote all headings one level (content should start at H2)source/_posts/YYYY-MM-DD-slug.markdown<!--more--> tag after first paragraphcreate-blog-post/:
draft-partner-update.md - Your draft fileart.webp - OG/hero imageimage2.png, image3.png - Additional images (if any)/create-blog-postThis would create:
source/_posts/2026-01-13-partner-update.markdownsource/images/blog/2026-01-partner/art.webpsource/images/blog/2026-01-partner/image2.webp, image3.webp (if additional images exist)Image references:
![][image1] (at start of "# Blog content" section) → Output: art.webp hero image![][image2] → Look for image2.png, convert to image2.webp![][image3] → Look for image3.png, convert to image3.webpRequirements:
cwebp tool required for PNG→WebP conversion (install: sudo apt-get install -y webp)Content processing:
### **– Summary break / Read more –** to <!--more-->Output format:
YYYY-MM-DD-slug.markdownsource/images/blog/YYYY-MM-slug/Link handling:
www.home-assistant.io and home-assistant.io stay as Markdown links<a> tags with target="_blank" rel="noopener"