Template. Replace placeholder values like {{YOUR_NAME}}, {{CONTENT_DIR}}, etc. with your own before using.

Content Creation

Substack Newsletter

Transform source content into intimate, essay-style Substack newsletters with compelling subject lines, personal narrative, and reply-driving CTAs.

MCP Required. This skill needs Playwright to run.

Save to ~/.claude/skills/substack/SKILL.md
SKILL.md
---
name: substack
description: "Convert source content into a Substack newsletter and publish via Playwright. Use when: creating newsletter content. Triggers on: substack, newsletter, write a newsletter, substack post."
---

# Substack Newsletter

Convert source content (blog, script, research, or fresh topic) into an intimate, essay-style Substack newsletter.

## Prerequisites

**Publishing uses Playwright MCP (`mcp__playwright__*`) — this is the ONLY method.**
Do NOT use Chrome extension tools (`mcp__claude-in-chrome__*`).

1. Verify Playwright MCP is connected (`mcp__playwright__browser_navigate` available)
2. User must be logged into Substack in the Playwright-controlled browser
3. If Playwright MCP unavailable after checking, fall back to saving as markdown

---

## Workflow

### Step 1: Source Content

Ask the user:
- **Option A: From existing content** → ask which folder in `{{CONTENT_DIR}}/`, then read all markdown files
- **Option B: From scratch** → ask for topic, key ideas, any stories or data points

### Step 2: Load Context

- Read `{{PROFILE_PATH}}` — identity, voice, experience
- Reference platform rules: intimate "letter to a smart friend" tone, first-person throughout

### Step 3: Analyze Source

Extract:
- **Core thesis** — the one idea this newsletter explores
- **Best story or anecdote** — personal or observed
- **Key data point** — if available
- **Why it matters** — the "so what" for the reader

### Step 4: Draft Newsletter

**Subject line:** <50 characters. Compelling, not clickbait. Makes you want to open.
- GOOD: "The 7-month follow-up that saved my business"
- BAD: "Newsletter #14: Thoughts on persistence"

**Preview text:** <100 characters. Complements subject line, adds curiosity.

**Body (800-1500 words):**
- Essay-style, not listicle
- One core idea explored deeply
- More personal and reflective than LinkedIn
- Can explore uncertainty — thinking out loud is welcome
- Longer narrative arcs, fewer bullet points
- Specific examples, real numbers, real stories
- End with reply-driving CTA

**CTA examples:**
- "Hit reply and tell me — have you ever had a deal that took months of follow-up to close?"
- "Reply with the one tool you'd never give up. I read every response."
- "What's your version of this story? I'd love to hear it."

**NON-NEGOTIABLE rules:**
- Humanizer pass - before presenting, scan for and fix all 24 AI writing patterns (see `humanizer` skill). Key offenders: significance inflation, AI vocabulary, copula avoidance, -ing analyses, filler phrases, hedging, generic conclusions.
- No false-contrast filler ("isn't X / it's Y" - say the real point directly)
- No revenue flex (never mention personal revenue/MRR/income)
- No em dashes (—) anywhere in content. Use regular dashes (-), commas, periods, or restructure the sentence instead. Em dashes are an obvious AI writing tell.
- Match {{YOUR_NAME}}'s voice: direct, data-driven, no fluff, no corporate speak

### Step 5: User Review

Display the full newsletter:
```
SUBJECT: [subject line] ([char count]/50)
PREVIEW: [preview text] ([char count]/100)

---
[Full newsletter body]
---

Word count: [X]
```

Ask: **"Approve / Edit / Regenerate?"**

### Step 6: Publish via Playwright

**Publish (default: save as draft on Substack):**

1. `browser_navigate` → `https://substack.com/home`
2. `browser_snapshot` → confirm logged in
3. `browser_click` → "New post" or compose button
4. `browser_snapshot` → confirm editor loaded
5. `browser_click` → title field → `browser_type` → subject line
6. `browser_click` → subtitle/preview field → `browser_type` → preview text
7. `browser_click` → body editor → `browser_type` → newsletter body
8. `browser_snapshot` → verify content looks correct
9. `browser_click` → "Save draft" (safe default — let user publish from Substack)
10. `browser_snapshot` → verify saved

Ask user: **"Draft saved. Want me to publish it now, or will you review on Substack first?"**

If publish: `browser_click` → "Publish" → confirm dialog → `browser_snapshot` → verify

**Fallback:** Save to file and display copy-ready output.

### Step 7: Save Output

Save as `substack-newsletter.md` in the source content folder or ask user where to save.

```markdown
# Substack Newsletter — [Topic]

**Subject:** [subject line]
**Preview:** [preview text]
**Status:** [Draft saved / Published / Ready for manual posting]
**Date:** [YYYY-MM-DD]

---

[Full newsletter body]
```

Display confirmation with status.