Skip to main content
skill CX Codex

devrel-content: a skill for developer articles and tutorials

The devrel-content skill keeps technical writing for developers on track: blog posts, tutorials, docs. It sets the order of work, from checking whether a topic deserves an article to proofing the code before you publish.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add jonathimer/devmarketing-skills --skill devrel-content -a claude-code
Open on GitHub

What devrel-content does

The skill ships in the jonathimer/devmarketing-skills repository and installs with one command per platform. It starts with audience context: read .agents/developer-audience-context.md to learn who you write for, what hurts them, and the words they use. No such file? Run the developer-audience-context skill first.

Then comes topic validation. The skill asks you to check what already ranks, whether people bring this up on Reddit, HN or Stack Overflow, what competitors published, and what support tickets or issues say. Red flags are listed too: you are the only one who cares, ten near-identical posts exist, the topic is too broad or has no demand.

Format follows the goal. A tutorial is step-by-step and code-heavy. A guide splits into sections and reference material. A comparison leans on tables and trade-offs. Announcements, opinion pieces, case studies and troubleshooting write-ups each get their own shape, and the main outline template covers a hook, context, three sections, a full example and a next-steps block.

Code gets the most attention. Every sample should run as-is, carry its imports, show the output, handle errors, and use real values instead of foo and bar. A conventions table covers code fences, package installs and environment variables across JavaScript, Python, Go, Rust and shell.

What it helps with

  • Write a tutorial readers finish without hitting a broken example
  • Check demand and existing coverage before you start drafting
  • Pick the right format: tutorial, comparison, announcement or case study
  • Verify code, versions and links before publishing
  • Shape titles and structure around how developers actually search

Example prompts for the agent

  • Write a tutorial on wiring our library into Next.js, with a runnable example and its output
  • Check the topic of job queues in Node — is there demand, and what have others written?
  • Build an accuracy checklist for our API article and run the draft through it

How to install devrel-content

1Skills CLI (Vercel)

npx skills add jonathimer/devmarketing-skills --skill devrel-content -a claude-code

2Manually: put the files in place

~/.claude/skills/devrel-content/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/devrel-content/

Step by step, with commands for each platform: How to install skills in Claude Code: five ways

Questions about devrel-content

How do I install devrel-content in Claude Code?

Run npx skills add jonathimer/devmarketing-skills --skill devrel-content -a claude-code. The skill lands in ~/.claude/skills/devrel-content/SKILL.md.

What does devrel-content do?

It walks from topic validation and format choice to a finished draft with working code samples. It also covers the accuracy checklist and developer-focused SEO.

What does the skill need to work?

An .agents/developer-audience-context.md file describing your audience. Without it, the skill sends you to run developer-audience-context first.

Source text

SKILL.md · MIT
---
name: devrel-content
description: When the user wants to create technical content for developers including blog posts, tutorials, and documentation. Trigger phrases include "write a blog post," "technical article," "developer content," "tutorial," "devrel content," "dev blog," "technical writing," or "content for developers."
metadata:
  version: 1.0.0
---

# DevRel Content

This skill helps you create technical content that developers actually read: blog posts, tutorials, documentation, and thought leadership pieces that build trust and drive adoption.

---

## Before You Start

**Load your audience context first.** Read `.agents/developer-audience-context.md` to understand:

- Who you're writing for (role, seniority, tech stack)
- Their pain points (what problems resonate)
- Verbatim language (how they describe things)
- Voice & tone (how formal/technical to be)

If the context file doesn't exist, run the `developer-audience-context` skill first.

---

## The DevRel Content Framework

### Phase 1: Research & Validation

Before writing anything, validate the topic is worth writing about.

| Research Type | What to Do |
|--------------|------------|
| **Search intent** | Google your topic. What already ranks? What's missing? |
| **Community signals** | Search Reddit, HN, Stack Overflow. Are developers asking about this? |
| **Competitor gaps** | What have competitors written? What haven't they covered? |
| **Internal data** | Support tickets, Discord questions, GitHub issues about this topic |
| **Keyword research** | Use Ahrefs/SEMrush for search volume on technical terms |

**Red flags** — Don't write if:
- You're the only one who cares about this topic
- 10 identical articles already exist
- The topic is too broad ("Introduction to JavaScript")
- The topic is too narrow (no search volume, no community interest)

### Phase 2: Content Type Selection

Choose the right format for your goal:

| Content Type | Best For | Structure |
|-------------|----------|-----------|
| **Tutorial** | Teaching a specific skill | Step-by-step, code-heavy |
| **Guide** | Covering a topic comprehensively | Sections, reference material |
| **Comparison** | Helping with decisions | Table-based, pros/cons |
| **Announcement** | Launching features/products | News lead, what/why/how |
| **Thought leadership** | Building authority | Opinion, predictions, takes |
| **Case study** | Social proof | Problem → Solution → Results |
| **Troubleshooting** | Solving specific errors | Error → Cause → Fix |

### Phase 3: Outline Structure

Use this outline template:

```markdown
# [Title that promises specific value]

## Hook (2-3 sentences)
- State the problem or opportunity
- Establish credibility ("We migrated 10,000 repos...")
- Promise what the reader will learn

## Context (optional)
- Brief background if needed
- Link to prerequisites

## The Meat
### Section 1: [First major concept]
- Explanation
- Code example
- Common pitfall

### Section 2: [Second major concept]
- Explanation
- Code example
- Real-world application

### Section 3: [Third major concept]
- Explanation
- Code example
- Advanced tip

## Putting It Together
- Complete example
- Working code

## What's Next
- Links to deeper content
- Call to action (try the product, join Discord, etc.)
```

---

## Writing Code Examples

Code is the content. Get it right.

### The Copy-Paste Test

Every code example must:

| Requirement | Why It Matters |
|------------|----------------|
| **Run without modification** | Developers will copy-paste. If it fails, you lose trust. |
| **Include imports** | Don't assume they know which libraries to import. |
| **Show output** | What should they see when it works? |
| **Handle errors** | Real code has error handling. Show it. |
| **Use real values** | No `foo`, `bar`, `example.com` unless necessary. |

### Code Example Structure

```markdown
First, install the dependencies:

\`\`\`bash
npm install your-library axios
\`\`\`

Now create a file called `fetch-data.js`:

\`\`\`javascript
// fetch-data.js
import { Client } from 'your-library';
import axios from 'axios';

const client = new Client({
  apiKey: process.env.YOUR_API_KEY // Use environment variables
});

async function fetchUserData(userId) {
  try {
    const user = await client.users.get(userId);
    console.log(`Fetched user: ${user.name}`);
    return user;
  } catch (error) {
    console.error(`Failed to fetch user: ${error.message}`);
    throw error;
  }
}

// Example usage
fetchUserData('user_123')
  .then(user => console.log(user))
  .catch(err => process.exit(1));
\`\`\`

Run it:

\`\`\`bash
YOUR_API_KEY=sk_test_xxx node fetch-data.js
\`\`\`

Expected output:

\`\`\`
Fetched user: Jane Developer
{ id: 'user_123', name: 'Jane Developer', email: '[email protected]' }
\`\`\`
```

### Language-Specific Conventions

| Language | Code Block | Package Install | Env Vars |
|----------|-----------|-----------------|----------|
| JavaScript/Node | `javascript` or `js` | `npm install` | `process.env.VAR` |
| TypeScript | `typescript` or `ts` | `npm install` | `process.env.VAR` |
| Python | `python` or `py` | `pip install` | `os.environ['VAR']` |
| Go | `go` | `go get` | `os.Getenv("VAR")` |
| Rust | `rust` | `cargo add` | `std::env::var("VAR")` |
| Shell | `bash` or `shell` | N/A | `$VAR` |

---

## Technical Accuracy Checklist

Run through before publishing:

| Check | How to Verify |
|-------|---------------|
| **Code runs** | Copy-paste every snippet and run it |
| **Versions match** | Are you using the current library version? |
| **Links work** | Click every link |
| **Commands work** | Run every CLI command |
| **Screenshots current** | Do UI screenshots match the current product? |
| **No deprecated APIs** | Check if any APIs used are deprecated |
| **Security review** | No hardcoded secrets, SQL injection, etc. |
| **Peer review** | Have an engineer read it for accuracy |

---

## SEO for Developer Content

Developers use Google differently than consumers.

### Developer Search Patterns

| Pattern | Example Searches |
|---------|-----------------|
| **Error messages** | "TypeError: Cannot read property 'map' of undefined" |
| **How to** | "how to deploy next.js to vercel" |
| **Comparison** | "prisma vs typeorm 2024" |
| **Best practices** | "typescript project structure best practices" |
| **Alternatives** | "alternatives to firebase" |
| **With** | "react with typescript tutorial" |

### Technical SEO Checklist

| Element | Best Practice |
|---------|--------------|
| **Title** | Include primary keyword, framework names, year if relevant |
| **Meta description** | 150 chars, include keyword, promise specific outcome |
| **H1** | Match or closely match title |
| **H2s** | Include secondary keywords, make scannable |
| **Code blocks** | Use proper syntax highlighting (helps featured snippets) |
| **Internal links** | Link to related docs, tutorials, API reference |
| **External links** | Link to official docs of tools mentioned |
| **URL slug** | Lowercase, hyphens, include keyword |

### Example Optimized Title

| Bad | Good |
|-----|------|
| "Using Our API" | "How to Authenticate with the YourProduct API (Node.js)" |
| "Database Guide" | "PostgreSQL Connection Pooling: Complete Guide with pgBouncer" |
| "Getting Started" | "Getting Started with YourProduct: Your First API Call in 5 Minutes" |

---

## Content Quality Signals

What separates great devrel content from mediocre:

### Do This

- **Show, don't tell** — Code over prose
- **Address the "why"** — Not just how to do it, but when and why
- **Acknowledge tradeoffs** — Nothing is perfect; developers respect honesty
- **Link to sources** — Official docs, RFCs, related articles
- **Include dates** — "Updated March 2024" or version numbers
- **Progressive disclosure** — Start simple, add complexity
- **Real examples** — Production scenarios, not just hello world

### Don't Do This

- **Wall of text** — Break up with code, headers, bullets
- **Marketing speak** — "Best-in-class," "seamless," "revolutionary"
- **Assuming knowledge** — Define acronyms, link to prerequisites
- **Outdated content** — Nothing worse than a 2019 tutorial with deprecated APIs
- **Buried lede** — Put the answer first, explanation second
- **No code** — Developers came for code, not prose

---

## Content Templates

### Blog Post Template

```markdown
# [Specific, keyword-rich title]

[2-3 sentence hook: problem + promise]

## The Problem

[1 paragraph explaining the pain point]

## The Solution

[Brief explanation of your approach]

### Step 1: [Action]

[Explanation]

\`\`\`language
// Code
\`\`\`

### Step 2: [Action]

[Explanation]

\`\`\`language
// Code
\`\`\`

### Step 3: [Action]

[Explanation]

\`\`\`language
// Code
\`\`\`

## Complete Example

\`\`\`language
// Full working code
\`\`\`

## Troubleshooting

### [Common Error 1]
[Solution]

### [Common Error 2]
[Solution]

## What's Next

- [Link to deeper dive]
- [Link to related tutorial]
- [CTA: Try it yourself]
```

### Comparison Post Template

```markdown
# [Tool A] vs [Tool B]: [Specific Use Case] ([Year])

[1 paragraph: Who this comparison is for and what you'll learn]

## Quick Comparison

| Feature | Tool A | Tool B |
|---------|--------|--------|
| [Feature 1] | | |
| [Feature 2] | | |
| [Feature 3] | | |

## When to Choose [Tool A]

- [Scenario 1]
- [Scenario 2]
- [Scenario 3]

## When to Choose [Tool B]

- [Scenario 1]
- [Scenario 2]
- [Scenario 3]

## Deep Dive: [Specific Aspect]

### Tool A Approach
[Explanation + code]

### Tool B Approach
[Explanation + code]

## Our Recommendation

[Specific guidance based on use case]
```

---

## Measuring Content Success

### Metrics to Track

| Metric | What It Tells You |
|--------|------------------|
| **Page views** | Reach (but vanity without context) |
| **Time on page** | Engagement (are they reading?) |
| **Scroll depth** | Did they read to the end? |
| **Bounce rate** | Did they find what they needed? |
| **Search rankings** | SEO performance |
| **Backlinks** | Authority and reference value |
| **Social shares** | Resonance (especially HN, Twitter, Reddit) |
| **Conversion events** | Sign-ups, installs, docs clicks |

### Content → Conversion Path

Track the journey:
1. Search/social → Blog post
2. Blog post → Docs / quickstart
3. Docs → Sign up / install
4. Sign up → Activation (first success)

---

## Tools

| Tool | Use Case |
|------|----------|
| **[Octolens](https://octolens.com)** | Monitor where your content gets shared (HN, Reddit, Twitter). Track competitor content performance. Find content ideas from developer conversations. |
| **Grammarly / Hemingway** | Readability and grammar checking |
| **Carbon / Ray.so** | Beautiful code screenshots |
| **Excalidraw** | Technical diagrams |
| **Loom** | Quick video walkthroughs |
| **Ahrefs / SEMrush** | Keyword research and SEO tracking |
| **Google Search Console** | Track search performance |

---

## Related Skills

- `developer-audience-context` — Foundation for knowing your readers
- `technical-tutorials` — Deep dive into step-by-step content
- `developer-newsletter` — Distributing content via email
- `developer-seo` — Technical SEO optimization
- `hacker-news-strategy` — Sharing content on HN effectively

© jonathimer · MIT · jonathimer/devmarketing-skills

Similar skills

Everything for Marketing and content →

From the same set11

usage-based-pricing Walks you through a pricing model a developer can estimate before signing up: clear metrics, a calculator, spending caps. CX Codex +1 ★ 87repo stars reddit-engagement A skill that maps developer subreddits and their self-promotion rules, then pushes a comment-first approach so your account survives. CX Codex +1 ★ 87repo stars linkedin-technical A skill for writing technical LinkedIn posts aimed at B2B audiences, and for deciding when LinkedIn beats Twitter. CX Codex +1 ★ 87repo stars github-presence A skill for developers who want their GitHub project understood at a glance. Covers README structure, profile README and repo topics. CX Codex +1 ★ 87repo stars developer-sandbox Walks you through building an interactive playground where developers try the product with no signup. Useful when curious visitors need to become active users. CX Codex +1 ★ 87repo stars developer-listening A skill that helps your agent follow what developers say about your product, your competitors and the problems they hit, across GitHub, Hacker News, Reddit, Stack Overflow, Twitter and Discord. CX Codex +1 ★ 87repo stars developer-churn Works out why developers churn, flags accounts heading that way, and helps win back the ones already gone. Useful when you have usage and support data on hand. CX Codex +1 ★ 87repo stars developer-ads A skill on paid channels that actually reach developers: Carbon Ads, BuySellAds, Reddit, newsletters and podcasts. Useful when you are deciding where the budget for a dev tool should go. CX Codex +1 ★ 87repo stars

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor