$npx -y skills add getnao/sylph --skill blog-writer---
| 1 | # Blog Article Writer |
| 2 | |
| 3 | ```yaml |
| 4 | name: blog-writer |
| 5 | description: > |
| 6 | Writes, designs, and publishes blog articles for the company website. |
| 7 | Handles the full lifecycle from writing through cover image creation, |
| 8 | local preview, PR creation, and post-publish archiving. |
| 9 | triggers: |
| 10 | - blog post |
| 11 | - blog article |
| 12 | - write a blog about |
| 13 | - publish to the blog |
| 14 | ``` |
| 15 | |
| 16 | --- |
| 17 | |
| 18 | ## MCP connectors |
| 19 | |
| 20 | | Connector | Purpose | |
| 21 | |-----------|---------| |
| 22 | | GitHub | Create PR for blog post, push to repo | |
| 23 | | Canva | Create cover images and blog graphics | |
| 24 | |
| 25 | ## Website Frontmatter Format |
| 26 | |
| 27 | Every blog article must include this frontmatter. Adjust field names to match your static site generator. |
| 28 | |
| 29 | ```yaml |
| 30 | --- |
| 31 | title: "Article Title Here" |
| 32 | description: "One sentence meta description for SEO (under 160 characters)" |
| 33 | date: YYYY-MM-DD |
| 34 | author: "[Author Name]" |
| 35 | author_role: "[Author Title]" |
| 36 | category: "[Category from the list below]" |
| 37 | tags: ["tag1", "tag2", "tag3"] |
| 38 | image: "/images/blog/YYYY-MM-DD-slug/cover.png" |
| 39 | image_alt: "Descriptive alt text for the cover image" |
| 40 | draft: false |
| 41 | featured: false |
| 42 | reading_time: "[X] min read" |
| 43 | --- |
| 44 | ``` |
| 45 | |
| 46 | ### Categories |
| 47 | |
| 48 | Use one of these categories (or define your own): |
| 49 | |
| 50 | - Engineering |
| 51 | - Product Updates |
| 52 | - Benchmarks |
| 53 | - How-To Guides |
| 54 | - Company News |
| 55 | - Community |
| 56 | - Industry Analysis |
| 57 | - Customer Stories |
| 58 | |
| 59 | --- |
| 60 | |
| 61 | ## Voice and Style Rules |
| 62 | |
| 63 | ### Core Rules |
| 64 | - No em dashes (--) or en dashes. Use hyphens (-) or colons (:). |
| 65 | - Direct openings. Never start with "In today's world..." or "As we all know..." |
| 66 | - Evidence over assertion. Don't say "powerful" - show what it does. |
| 67 | - First person for personal experience, second person for instructions. |
| 68 | - Short paragraphs. 3-4 sentences max per paragraph. |
| 69 | |
| 70 | ### Opening Patterns |
| 71 | Strong blog openings: |
| 72 | - **Problem statement**: "Most data teams waste 3 hours a day on tasks that should take 10 minutes." |
| 73 | - **Specific finding**: "We tested 5 approaches to [X]. Only one consistently worked." |
| 74 | - **Story**: "Last Tuesday, a customer asked us something we couldn't answer. So we built it." |
| 75 | |
| 76 | Weak openings (never use): |
| 77 | - "We're excited to share..." |
| 78 | - "In the ever-evolving landscape of..." |
| 79 | - "Today we're announcing..." |
| 80 | |
| 81 | ### Readability |
| 82 | - Use H2 for main sections, H3 for subsections |
| 83 | - Include a table of contents for articles over 1500 words |
| 84 | - Use code blocks for any technical content |
| 85 | - Use tables for comparisons |
| 86 | - Include images/diagrams where they add clarity |
| 87 | - Bold key terms on first use |
| 88 | - Link to related posts and external references |
| 89 | |
| 90 | --- |
| 91 | |
| 92 | ## Article Structure Patterns |
| 93 | |
| 94 | ### Benchmark Article |
| 95 | ``` |
| 96 | [Hook: the question you're answering] |
| 97 | [Methodology: what you tested, how] |
| 98 | [Results: data in tables or charts] |
| 99 | [Analysis: what the data means] |
| 100 | [Limitations: what this doesn't cover] |
| 101 | [Conclusion: the actionable takeaway] |
| 102 | ``` |
| 103 | |
| 104 | ### How-To Guide |
| 105 | ``` |
| 106 | [Problem: what the reader will accomplish] |
| 107 | [Prerequisites: what they need before starting] |
| 108 | [Steps: numbered, with code/screenshots] |
| 109 | [Verification: how to confirm it worked] |
| 110 | [Troubleshooting: common issues] |
| 111 | [Next steps: where to go from here] |
| 112 | ``` |
| 113 | |
| 114 | ### Product Update |
| 115 | ``` |
| 116 | [The problem this solves] |
| 117 | [What we built] |
| 118 | [How it works (with screenshots/examples)] |
| 119 | [Who this is for] |
| 120 | [What's next] |
| 121 | [CTA: try it] |
| 122 | ``` |
| 123 | |
| 124 | ### Multi-Feature Launch |
| 125 | ``` |
| 126 | [The theme connecting all features] |
| 127 | [Feature 1: problem + solution + screenshot] |
| 128 | [Feature 2: problem + solution + screenshot] |
| 129 | [Feature 3: problem + solution + screenshot] |
| 130 | [The bigger picture: where this is heading] |
| 131 | [CTA: try it / read more] |
| 132 | ``` |
| 133 | |
| 134 | ### Community Recap |
| 135 | ``` |
| 136 | [The event/milestone in one sentence] |
| 137 | [What happened - highlights] |
| 138 | [Key takeaways or quotes] |
| 139 | [What's next for the community] |
| 140 | [CTA: join / follow / attend next time] |
| 141 | ``` |
| 142 | |
| 143 | --- |
| 144 | |
| 145 | ## Cover Image Workflow |
| 146 | |
| 147 | Every blog post needs a cover image. Three paths: |
| 148 | |
| 149 | ### Path 1: User-Provided Image |
| 150 | The user provides an image file or URL. Use it directly. |
| 151 | - Ensure it meets size requirements (typically 1200x630px for social sharing) |
| 152 | - Add descriptive alt text in the frontmatter |
| 153 | |
| 154 | ### Path 2: Reuse Existing Template |
| 155 | Check `brand/templates/blog-covers/` for existing cover templates. |
| 156 | - Swap the title text and any dynamic elements |
| 157 | - Maintain brand colors and typography |
| 158 | |
| 159 | ### Path 3: Create via Design Tool |
| 160 | If a design tool MCP is available (e.g., Canva): |
| 161 | - Use the brand's blog cover template |
| 162 | - Set the title text, subtitle, and any category badge |
| 163 | - Export at the correct dimensions |
| 164 | - Save to the blog images directory |
| 165 | |
| 166 | --- |
| 167 | |
| 168 | ## Publish Workflow |
| 169 | |
| 170 | ### Step 1: Create Branch |
| 171 | ```bash |
| 172 | git checkout -b content/blog/YYYY-MM-DD-slug |
| 173 | ``` |
| 174 | |
| 175 | ### Step 2: Write Article |
| 176 | - Save the article file to the blog content directory (e.g., `content/blog/YYYY-MM-DD-slug.md`) |
| 177 | - Save the cover image to the images directory |
| 178 | - Ensure all frontmatter fields are filled |
| 179 | |
| 180 | ### Step 3: Commit and Create PR |
| 181 | ```bash |
| 182 | git add content/blog/YYYY-MM-DD-slug.md images/blog/YYYY-MM-DD-slug/ |
| 183 | git commit -m "content: publish blog article - [title]" |
| 184 | ``` |
| 185 | |
| 186 | Create a PR with: |
| 187 | - Title: "content: [article title]" |
| 188 | - Body: summary of the article, target publish date, any review notes |
| 189 | |
| 190 | ### |