Blog post
Claude Code Skills for content marketers — briefs, drafts, SEO audits, competitor analysis, publishing
npx -y skills add busyeugene/content-marketing-skills --skill blog-postAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Use when the user wants to draft a full blog post or article from a content brief. Reads a brief file plus editorial-guidelines.md and produces a publication-ready markdown draft with SEO meta, internal links, and optional hero image.
The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
5.7 KB, as published. Nobody here has run it
Blog Post
Turn a briefs/<slug>.md (produced by the content-brief skill, or hand-written to the same schema) into a complete, publication-ready markdown article.
Setup
No required keys — the skill drafts from the brief alone. Optional keys unlock extras:
UNSPLASH_ACCESS_KEYorPEXELS_API_KEY— pick a hero image from stock libraries.FAL_API_KEYorIDEOGRAM_API_KEY— generate an AI hero image instead.NOTION_API_KEY+NOTION_DATABASE_ID— push the draft into Notion for editor review.GOOGLE_DOCS_SERVICE_ACCOUNT_JSON— push the draft into Google Docs instead.
Inputs
- Brief path (required). Glob
briefs/*.mdand let the user pick if not specified. - Editorial guidelines path — defaults to
./editorial-guidelines.md. If missing, fall back to{SKILL_BASE}/../_shared/b2b-saas-voice-reference.mdand warn the user. - Hero image mode: none / stock / generated. Ask via
AskUserQuestionif optional keys are available. - Handoff destination: local file only / Notion / Google Docs. Ask if the relevant key is set.
Process
1. Load everything
- Read the brief file (the
---frontmatter tells you keyword, intent, target word count, refresh_of). - Read
editorial-guidelines.md(or fallback). - Read
{SKILL_BASE}/../_shared/seo-best-practices.mdfor the SEO ruleset. - If
refresh_ofis set in the brief frontmatter, fetch the current URL via the scraping fallback chain and load the existing article so you can preserve what works and only rewrite the weak sections.
2. Plan before drafting
Produce a short internal plan (not written to disk yet):
- Confirm the H1 choice from the brief's title options (pick the one that best matches intent + voice; explain the choice in 1 line).
- Confirm TL;DR.
- Confirm the section order and word budget.
- Identify 2–3 places where the editorial guidelines' "unique angle" rule can inject original observation, data, or opinion.
3. Draft section by section
Draft each H2 against its word budget. For every section:
- Lede sentence states the section's claim or answer directly.
- Evidence — at least one concrete fact, example, or number.
- Transition — a single sentence bridging to the next section only if it earns its place.
- Obey the editorial guidelines on:
- POV (we/you/I/third)
- Contractions
- Sentence length ceiling
- Banned words (run a final pass to eliminate them)
- Preferred-word and product-naming conventions
- Obey the SEO rules in
seo-best-practices.md:- Primary keyword in first 100 words, in H1, in at least one H2
- Cover every entity in the brief's entities table
- Answer every PAA (either inline or in a dedicated section)
- 2–4 outbound authoritative links
- Internal links to the brief's suggested targets using descriptive anchor text
4. Write meta and frontmatter
Frontmatter fields:
---
title: "{H1}"
slug: "{slug}"
meta_title: "{50–60 chars}"
meta_description: "{140–160 chars}"
keyword: "{from brief}"
author: "{from editorial guidelines or TBD}"
date: "{YYYY-MM-DD}"
status: draft
canonical: ""
schema: "{Article|HowTo|FAQPage}"
hero_image: ""
hero_alt: ""
internal_links:
- url: "{…}"
anchor: "{…}"
outbound_links:
- url: "{…}"
anchor: "{…}"
---
5. Hero image (optional)
- Stock mode: query Unsplash/Pexels with 2–3 semantic terms derived from the H1. Pick a landscape image with relevance > aesthetic. Write the URL and a descriptive (not keyword-stuffed) alt into frontmatter.
- Generated mode: build a prompt from the H1 and voice attributes; call fal.ai or Ideogram; save the URL. Alt text describes the generated scene.
- None: leave
hero_imageempty.
6. Self-review pass
Before writing to disk, check:
- Word count within ±20% of target.
- Every entity from the brief's must-cover list appears at least once.
- Every PAA from the brief is answered.
- Primary keyword density between 0.5% and 1.5%.
- No banned words.
- Flesch reading ease is in the guidelines' target range (estimate by rule of thumb if no tool is available).
- First 100 words contain the keyword and state the payoff.
- Closer recommends a specific next action.
If any check fails, fix it before writing.
7. Write the file
Write to posts/<slug>.md. Print a 5-line summary:
- Path
- Word count
- Keyword + density
- Number of internal links / outbound links
- Any skipped self-review checks with the reason
8. Handoff (optional)
- Notion: create a page in
NOTION_DATABASE_IDwith frontmatter fields mapped to database properties and the body as rich text. Print the Notion URL. - Google Docs: create a doc in the service account's Drive, convert markdown to Docs formatting, print the Docs URL.
Fallbacks
- No editorial guidelines: fall back to the shared voice reference and print a warning.
- No brief: refuse and tell the user to run
content-brieffirst, or point to a hand-written brief. - Hero image APIs fail: continue without a hero image; leave fields empty.
- Notion/Docs push fails: write the local file anyway and print the error.
Verification
posts/<slug>.mdexists with complete frontmatter.- Self-review summary is printed; all checks pass or the failures are explicitly listed.
- Running
proofreading-style-checkon the output against the sameeditorial-guidelines.mdreturns zero critical findings (warnings are acceptable).