This skill should be used when drafting, editing, or writing blog posts for blog.brandonburrus.com. It should not be used for Confluence docs, READMEs, internal technical writing, or any writing not destined for the blog.
Guide the agent to write blog posts that match Brandon's established voice, structure, and quality bar as demonstrated across his published posts at blog.brandonburrus.com. The output is a complete .mdx file ready to drop into src/content/posts/.
Workflow
1. Understand the topic
Before writing, identify:
The target audience: primarily developers early-to-mid career, curious and motivated but not experts yet
The post category: one of tutorial/guide, concept explainer, tooling or productivity, opinion/lessons learned, or reference list
Any code examples that will be needed and what language or tool they target
Whether the post should reference any existing posts or external resources
If the topic brief is vague, ask for the audience, the core takeaway, and one concrete example the post should include before proceeding.
2. Draft the frontmatter
Generate YAML frontmatter before writing the body. Required fields:
---
title: "Post Title"
description: "One sentence. Describes what the post covers, not why someone should read it."
publishedAt: YYYY-MM-DD
tags: ["tag-one", "tag-two"]
---
Title rules:
Descriptive and specific, not clickbait
Often includes a number, a colon, or a clear noun phrase
Examples from the corpus: "Bash for Beginners: Becoming a Terminal Ninja", "4 JavaScript Libraries to Learn in 2021", "What is 'Abstraction' in Programming?"
Avoid: "The Ultimate Guide to X", "Why You Should Learn X", "X Will Change Your Life"
Description rules:
One sentence, under 160 characters
Describes the actual content, not the value proposition
Examples: "A practical introduction to Bash covering navigation, file management, paths, arguments, and where to find help." Not "Learn everything you need to know about Bash!"
Tag rules:
Lowercase, hyphenated (software-engineering not SoftwareEngineering)
Topic-focused, 2 to 4 per post
Use consistent tags across related posts (e.g., vscode, productivity, fundamentals, javascript)
Filename slug (for the user to use when saving the file):
Derived from the title, lowercase, hyphenated, no special characters
Matches the URL path the post will be served at
3. Write the opening
The opening is 1 to 2 paragraphs. It must:
Frame why this topic matters before touching the substance
Use relatable context: a common frustration, a moment of realization, or a situation the reader has been in
Not open with a dictionary definition or "In this post, I will..."
Not summarize the entire post
When the post is a structured list or tutorial, a short overview of what will be covered is acceptable after the contextual hook, but the hook comes first.
Examples of strong openers from the corpus:
"Using the terminal for the first time can be really intimidating. We're creatures of habit, used to graphical interfaces that guide us through every action." (bash-for-beginners)
"As a developer, I'm always looking for ways to make things more efficient. But it wasn't until I was introduced to Vim that I started thinking about not just writing efficient code, but efficiently writing efficient code." (visual-studio-code-and-vim)
"Do you know what the top errors are in a JavaScript codebase?" (optional-chaining-nullish-coalescing: opens with a question that immediately sets up the problem)
4. Write the body
Use H2 (##) as the primary section heading level. H3 (###) for subsections within a section. Never skip levels.
For each post category, follow the appropriate structure:
Tutorial / guide:
Numbered steps or logically ordered H2 sections. Each section covers one discrete action. Include a quick-reference table or summary at the end when the post covers multiple commands, shortcuts, or items.
Concept explainer:
Start concrete ("here's a thing you already know"), build up to the abstraction, then show why the abstraction is useful. Analogies are welcome but should be brief. End with a practical takeaway: how does understanding this concept change what the reader writes or how they think?
Tooling / productivity:
Categorize items into logical groups. Each item gets a bold name followed by a one-to-three sentence description. Longer descriptions are reserved for less obvious tools. Always close with what the combined toolset accomplishes together.
Opinion / lessons learned:
Numbered takeaways work well. Each lesson gets a heading and 2 to 4 paragraphs. Open each lesson with the principle stated plainly, then support it with reasoning and personal experience. Avoid vague advice; every lesson should be actionable or give the reader a concrete way to think about something differently.
Reference list:
Similar to tooling, but often includes code snippets. Group by category. Include a brief intro sentence before each category explaining why those items belong together.
Code examples:
Build complexity incrementally: simple example first, realistic example second
One concept per block; do not combine unrelated ideas into one snippet
Use the language appropriate to the topic; do not switch languages mid-post without explanation
Comments in code blocks should be minimal, only when the code cannot speak for itself
Inline code (backtick) for any command, function name, key shortcut, or value mentioned in prose
Prose formatting:
Bold (**) only for key terms on first introduction and for strong emphasis on a specific word or phrase within a sentence, not for whole sentences or section summaries
Italics (*) for emphasis within a sentence, or for titles of external resources
Blockquotes for external quotes only, not for callouts or warnings (use a > **Note:** pattern for important caveats, as seen in the corpus)
Tables for comparisons, shortcut references, or command references
Horizontal rules (---) to separate major thematic breaks, not between every section
5. Write the closing
1 to 3 paragraphs. The closing must:
Tie back to the broader principle behind the post, not just recap what was covered
Be forward-looking: what should the reader do next, or what does mastering this unlock?
End on a grounded, encouraging note: honest about effort required, clear about the payoff
Not include a hard call to action ("subscribe", "share this post", "follow me")
Link to external resources (official docs, further reading) at the end of the closing or inline where they are first referenced, not in a separate "Resources" section unless the post is a reference list.
Tone, voice, and AI patterns
The blog's voice rules and the full AI-writing-pattern checklist (the vocabulary watch list and the structural patterns to avoid) live in references/voice-and-ai-patterns.md. Load it before drafting and during revision; it is the quality bar the post is held to.
Technical Writing Standards
Code blocks:
Always include a language identifier (```js, ```sh, ```ts, ```yaml, etc.)
Shell commands use sh or bash
Use diff syntax for before/after code changes
Links:
Use descriptive link text, not "click here" or bare URLs in prose
External links go inline on first reference
Official documentation links are preferred over third-party tutorials for reference material
Tables:
Use for shortcut references, command summaries, comparison matrices, and side-by-side option analysis
Always include a header row
Keep cell content concise: one concept per cell
Blockquotes:
Use for direct external quotes only
Attribute quotes on the same line: an em dash character followed by the source name (the one sanctioned use of that character, since it is quoted-content formatting, not prose)
Notes and caveats:
Use > **Note:** blockquote pattern for important warnings, deprecation notices, or platform-specific caveats
Place notes at the point in the post where they are relevant, not in a separate section
Quality Checklist
Before considering a post complete, verify:
Frontmatter is complete: title, description, publishedAt, tags all present and formatted correctly
Title is descriptive and specific, not clickbait, not vague
Description is one sentence, under 160 characters, describes content not value
Tags are lowercase and hyphenated
Opening frames the topic with context before diving into substance
No section opens by repeating its heading
Code examples build from simple to realistic; each block has a language identifier
Bold is used sparingly, not on whole sentences or section summaries
No emojis, no exclamation points used for enthusiasm
No em dashes anywhere in the post
Closing ties back to the broader principle and looks forward
No hard call to action in the closing
External links use descriptive anchor text
No AI vocabulary watch-list words used without justification
No rule-of-three forcing, synonym cycling, or -ing phrase tacking
No filler phrases, hedging stacks, or persuasive authority tropes
Sentence and paragraph length vary naturally, with no uniform rhythm
Self-audit: reread the draft and ask "What would make someone suspect this was AI-generated?" Fix any remaining tells.
Post reads naturally aloud: if a sentence sounds awkward spoken, rewrite it
1---2name: write-blog-post3description: This skill should be used when drafting, editing, or writing blog posts for blog.brandonburrus.com. It should not be used for Confluence docs, READMEs, internal technical writing, or any writing not destined for the blog.4---56## Purpose78Guide the agent to write blog posts that match Brandon's established voice, structure, and quality bar as demonstrated across his published posts at blog.brandonburrus.com. The output is a complete `.mdx` file ready to drop into `src/content/posts/`.910## Workflow1112### 1. Understand the topic1314Before writing, identify:1516- The **target audience**: primarily developers early-to-mid career, curious and motivated but not experts yet17- The **post category**: one of tutorial/guide, concept explainer, tooling or productivity, opinion/lessons learned, or reference list18- Any **code examples** that will be needed and what language or tool they target19- Whether the post should reference any existing posts or external resources2021If the topic brief is vague, ask for the audience, the core takeaway, and one concrete example the post should include before proceeding.2223### 2. Draft the frontmatter2425Generate YAML frontmatter before writing the body. Required fields:2627```yaml28---29title: "Post Title"30description: "One sentence. Describes what the post covers, not why someone should read it."31publishedAt: YYYY-MM-DD32tags: ["tag-one", "tag-two"]33---34```3536**Title rules:**37- Descriptive and specific, not clickbait38- Often includes a number, a colon, or a clear noun phrase39- Examples from the corpus: "Bash for Beginners: Becoming a Terminal Ninja", "4 JavaScript Libraries to Learn in 2021", "What is 'Abstraction' in Programming?"40- Avoid: "The Ultimate Guide to X", "Why You Should Learn X", "X Will Change Your Life"4142**Description rules:**43- One sentence, under 160 characters44- Describes the actual content, not the value proposition45- Examples: "A practical introduction to Bash covering navigation, file management, paths, arguments, and where to find help." Not "Learn everything you need to know about Bash!"4647**Tag rules:**48- Lowercase, hyphenated (`software-engineering` not `SoftwareEngineering`)49- Topic-focused, 2 to 4 per post50- Use consistent tags across related posts (e.g., `vscode`, `productivity`, `fundamentals`, `javascript`)5152**Filename slug** (for the user to use when saving the file):53- Derived from the title, lowercase, hyphenated, no special characters54- Matches the URL path the post will be served at5556### 3. Write the opening5758The opening is 1 to 2 paragraphs. It must:5960- Frame **why this topic matters** before touching the substance61- Use relatable context: a common frustration, a moment of realization, or a situation the reader has been in62- Not open with a dictionary definition or "In this post, I will..."63- Not summarize the entire post6465When the post is a structured list or tutorial, a short overview of what will be covered is acceptable after the contextual hook, but the hook comes first.6667**Examples of strong openers from the corpus:**68- "Using the terminal for the first time can be really intimidating. We're creatures of habit, used to graphical interfaces that guide us through every action." *(bash-for-beginners)*69- "As a developer, I'm always looking for ways to make things more efficient. But it wasn't until I was introduced to Vim that I started thinking about not just writing efficient code, but *efficiently writing* efficient code." *(visual-studio-code-and-vim)*70- "Do you know what the top errors are in a JavaScript codebase?" *(optional-chaining-nullish-coalescing: opens with a question that immediately sets up the problem)*7172### 4. Write the body7374Use H2 (`##`) as the primary section heading level. H3 (`###`) for subsections within a section. Never skip levels.7576**For each post category, follow the appropriate structure:**7778**Tutorial / guide:**79Numbered steps or logically ordered H2 sections. Each section covers one discrete action. Include a quick-reference table or summary at the end when the post covers multiple commands, shortcuts, or items.8081**Concept explainer:**82Start concrete ("here's a thing you already know"), build up to the abstraction, then show why the abstraction is useful. Analogies are welcome but should be brief. End with a practical takeaway: how does understanding this concept change what the reader writes or how they think?8384**Tooling / productivity:**85Categorize items into logical groups. Each item gets a bold name followed by a one-to-three sentence description. Longer descriptions are reserved for less obvious tools. Always close with what the combined toolset accomplishes together.8687**Opinion / lessons learned:**88Numbered takeaways work well. Each lesson gets a heading and 2 to 4 paragraphs. Open each lesson with the principle stated plainly, then support it with reasoning and personal experience. Avoid vague advice; every lesson should be actionable or give the reader a concrete way to think about something differently.8990**Reference list:**91Similar to tooling, but often includes code snippets. Group by category. Include a brief intro sentence before each category explaining why those items belong together.9293**Code examples:**94- Build complexity incrementally: simple example first, realistic example second95- One concept per block; do not combine unrelated ideas into one snippet96- Use the language appropriate to the topic; do not switch languages mid-post without explanation97- Comments in code blocks should be minimal, only when the code cannot speak for itself98- Inline code (backtick) for any command, function name, key shortcut, or value mentioned in prose99100**Prose formatting:**101- Bold (`**`) only for key terms on first introduction and for strong emphasis on a specific word or phrase within a sentence, not for whole sentences or section summaries102- Italics (`*`) for emphasis within a sentence, or for titles of external resources103- Blockquotes for external quotes only, not for callouts or warnings (use a `> **Note:**` pattern for important caveats, as seen in the corpus)104- Tables for comparisons, shortcut references, or command references105- Horizontal rules (`---`) to separate major thematic breaks, not between every section106107### 5. Write the closing1081091 to 3 paragraphs. The closing must:110111- Tie back to the broader principle behind the post, not just recap what was covered112- Be forward-looking: what should the reader do next, or what does mastering this unlock?113- End on a grounded, encouraging note: honest about effort required, clear about the payoff114- Not include a hard call to action ("subscribe", "share this post", "follow me")115116Link to external resources (official docs, further reading) at the end of the closing or inline where they are first referenced, not in a separate "Resources" section unless the post is a reference list.117118---119120## Tone, voice, and AI patterns121122The blog's voice rules and the full AI-writing-pattern checklist (the vocabulary watch list and the structural patterns to avoid) live in [references/voice-and-ai-patterns.md](references/voice-and-ai-patterns.md). Load it before drafting and during revision; it is the quality bar the post is held to.123124---125126## Technical Writing Standards127128**Code blocks:**129- Always include a language identifier (` ```js `, ` ```sh `, ` ```ts `, ` ```yaml `, etc.)130- Shell commands use `sh` or `bash`131- Use `diff` syntax for before/after code changes132133**Links:**134- Use descriptive link text, not "click here" or bare URLs in prose135- External links go inline on first reference136- Official documentation links are preferred over third-party tutorials for reference material137138**Tables:**139- Use for shortcut references, command summaries, comparison matrices, and side-by-side option analysis140- Always include a header row141- Keep cell content concise: one concept per cell142143**Blockquotes:**144- Use for direct external quotes only145- Attribute quotes on the same line: an em dash character followed by the source name (the one sanctioned use of that character, since it is quoted-content formatting, not prose)146147**Notes and caveats:**148- Use `> **Note:**` blockquote pattern for important warnings, deprecation notices, or platform-specific caveats149- Place notes at the point in the post where they are relevant, not in a separate section150151---152153## Quality Checklist154155Before considering a post complete, verify:156157- [ ] Frontmatter is complete: `title`, `description`, `publishedAt`, `tags` all present and formatted correctly158- [ ] Title is descriptive and specific, not clickbait, not vague159- [ ] Description is one sentence, under 160 characters, describes content not value160- [ ] Tags are lowercase and hyphenated161- [ ] Opening frames the topic with context before diving into substance162- [ ] No section opens by repeating its heading163- [ ] Code examples build from simple to realistic; each block has a language identifier164- [ ] Bold is used sparingly, not on whole sentences or section summaries165- [ ] No emojis, no exclamation points used for enthusiasm166- [ ] No em dashes anywhere in the post167- [ ] Closing ties back to the broader principle and looks forward168- [ ] No hard call to action in the closing169- [ ] External links use descriptive anchor text170- [ ] No AI vocabulary watch-list words used without justification171- [ ] No rule-of-three forcing, synonym cycling, or -ing phrase tacking172- [ ] No filler phrases, hedging stacks, or persuasive authority tropes173- [ ] Sentence and paragraph length vary naturally, with no uniform rhythm174- [ ] Self-audit: reread the draft and ask "What would make someone suspect this was AI-generated?" Fix any remaining tells.175- [ ] Post reads naturally aloud: if a sentence sounds awkward spoken, rewrite it176177---178
Run npx skillmds@latest add brandonburrus/write-blog-post in your terminal (requires Node.js), paste this page's agent-chat prompt into Claude, Cursor, or any MCP-connected agent, or download the SKILL.md file and copy it into your agent's skills directory.
This skill should be used when drafting, editing, or writing blog posts for blog.brandonburrus.com. It should not be used for Confluence docs, READMEs, internal technical writing, or any writing not destined for the blog. It is listed under Docs & Writing on SkillMD.
This skill has not completed SkillMD's automated safety review yet. SkillMD never runs a skill's scripts for you; review the SKILL.md before installing.
This skill is tagged as working with Claude Code, Claude.ai, OpenAI Codex. SKILL.md is an open format, so most agents that read a skills directory can load it too.
Yes. Installing skills from SkillMD is free, and the skill stays under its author's original license.
brandonburrus (@brandonburrus) published this skill. Their other Agent Skills are listed on their SkillMD profile.