# Blog Post

> Full-stack blog post production — turns a topic, idea, or brief into a complete publishing package across written, social, and multimedia surfaces. Generates broomva.tech .mdx posts (or Substack/other long-form), X posts and threads, LinkedIn posts, Instagram posts and reel scripts, plus multimedia asset plans (images, video, audio, GIFs). Outputs a structured content package to /broomva/posts/.…

- **Type:** Skill
- **Install:** `agentstack add skill-broomva-skills-blog-post`
- **Verified:** Yes — security-reviewed for prompt injection and unsafe behavior
- **Seller:** [broomva](https://agentstack.voostack.com/s/broomva)
- **Installs:** 0
- **Category:** [AI & ML](https://agentstack.voostack.com/c/ai-and-ml)
- **Latest version:** 0.1.0
- **License:** MIT
- **Upstream author:** [broomva](https://github.com/broomva)
- **Source:** https://github.com/broomva/skills/tree/main/skills/publishing/blog-post
- **Website:** https://skills.sh/broomva/skills

## Install

```sh
agentstack add skill-broomva-skills-blog-post
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

# Blog Post — Full-Stack Content Production

Turn a topic into a complete, strategy-aware publishing package: long-form post + social adaptations + multimedia assets.

## Compounding Skills

This skill **orchestrates** — it does not re-implement what already exists:

| Skill | Role in Pipeline |
|-------|-----------------|
| `/content-creation` | Storytelling frameworks, visual content strategy, social distribution patterns, AI asset generation (Imagen 4.0, Veo 3.1, TTS), Remotion video |
| `/deep-research` | Multi-source research when topic requires verified claims or data |
| `/agent-browser` | Screenshots, reference extraction, web research |
| `/pencil` | Design social cards, carousel slides, diagrams |
| `/arcan-glass` | BroomVA brand styling for visual assets |
| `/remotion-best-practices` | Video composition, spring animations, sequencing |
| `/google-veo` | Veo 3.1 cinematic prompting — camera vocabulary, shot composition, style direction |
| `/subtitle-generation` | Burn-in subtitles for reels (80% watch muted) |
| `/prompt-library` | Reusable prompts for content generation |
| `/competitor-intel` | Market context when writing about products or strategy |

**Rule**: Before generating content for any phase, check if a compounding skill handles it better. Delegate, don't duplicate.

## Modes

### Full Pipeline (default)
```
BRIEF → RESEARCH → ANGLE → OUTLINE → LONG-FORM → ADAPT → MEDIA → STRATEGY → PUBLISH
```
**9 phases, each produces a file or action in the output package.**

### X-First Mode
```
BRIEF → ANGLE → X CONTENT → MEDIA → PUBLISH
```
**Lightweight mode for standalone X content** — not derived from a blog post. Use when: building in public, reacting to news, sharing a demo, shipping a contrarian take, or posting a terminal screenshot with context. Produces `x-post.md` and/or `x-thread.md` with growth-optimized patterns. See [references/x-growth-strategy.md](references/x-growth-strategy.md).

**Triggers**: "x post about", "tweet about", "x thread about", "post on x", "ship to x", "build in public"

**X-First pipeline:**
1. **Brief** — Topic + intent (1 line is enough)
2. **Angle** — Apply the angle test (specificity, tension, evidence) even for short content
3. **Generate** — Use growth-optimized templates: visual proof, native media, engagement hooks, strategic tags
4. **Media** — Terminal screenshot, architecture diagram, demo GIF, or native video (60-90s)
5. **Publish** — Via `xurl post` or `xurl reply` (thread). Always attach media natively (never external links)

**X-First content types** (see [references/x-growth-strategy.md](references/x-growth-strategy.md)):
- Terminal screenshot + insight (3-5x/week)
- "How I built X" thread (1x/week)
- Demo video, 60-90s native (1x/week)
- Contrarian take (1-2x/week)
- Before/after comparison (1-2x/week)
- "Day N of building X" update (daily optional)
- Strategic reply to big accounts (3-5x/day)

## Phase 0: Content Brief Intake

Gather or construct a content brief. See [templates/brief.md](templates/brief.md) for the template.

**Required fields:**
- `topic` — What this post is about
- `intent` — Why this post exists (educate, persuade, announce, reflect, document)
- `audience` — Who reads this (developers, founders, general, specific community)

**Optional fields:**
- `platforms` — Target channels (default: all). Options: `broomva-tech`, `substack`, `x-post`, `x-thread`, `linkedin`, `instagram-post`, `instagram-reel`
- `tone` — Voice (default: confident-technical). Options: `conversational`, `academic`, `provocative`, `reflective`, `storytelling`
- `references` — URLs, papers, prior posts to build on
- `media` — Desired outputs: `png`, `mp4`, `gif`, `mp3` (default: all)
- `cta` — What should the reader do after? (follow, subscribe, try, share, discuss)
- `destination` — Primary long-form target (default: `broomva-tech`). Options: `substack`, `medium`, `dev-to`, `hashnode`
- `slug` — URL-friendly identifier (auto-generated from topic if omitted)

**If the user provides only a topic**, infer reasonable defaults and confirm before proceeding.

## Phase 1: Research & Enrichment

**When to research**: If the brief includes references, data claims, or the topic requires external validation.

**How to research:**
1. Use `/deep-research` for topics needing 5+ verified sources
2. Use `/agent-browser` to extract content from reference URLs
3. Use web search for current data, trends, or competitor context
4. Use `/competitor-intel` if topic involves market positioning

**Output**: `research.md` — key findings, sources, data points, quotes. Keep it factual and citable.

**When to skip**: Personal reflections, opinion pieces, internal documentation — research is optional, not mandatory.

## Phase 2: Angle & Narrative Selection

The angle is what makes content *intentional* rather than generic. It answers: "Of all the things I could say about this topic, what specific lens am I using and why?"

**Angle selection criteria:**
1. **Audience gap** — What does this audience need that isn't being said?
2. **Unique evidence** — What data or experience do I have that others don't?
3. **Contrarian potential** — Is there a widely-held belief I can challenge with evidence?
4. **Timeliness** — Is there a current event or trend that makes this relevant now?
5. **Story potential** — Is there a transformation narrative (before → after)?

**Framework selection** (from `/content-creation` storytelling references):

| Content Type | Best Framework | When to Use |
|-------------|---------------|-------------|
| Case study / results | **PSI** (Problem-Solution-Impact) | Showing quantified outcomes |
| Industry take / opinion | **ABT** (And-But-Therefore) | Challenging conventional wisdom |
| Technical deep dive | **1-3-1** (One idea, three evidence, one takeaway) | Teaching a concept |
| Product / launch story | **Pixar Spine** | Transformation narrative |
| Data-driven insight | **Data Arc** (Context-Tension-Resolution) | Leading with surprising numbers |
| Decision documentation | **So-What** (What-Why-Action) | Internal or reflective posts |

**Output**: Update `outline.md` with the chosen angle, framework, and rationale.

## Phase 3: Outline Generation

Build a structured outline from the angle. This is the *architectural blueprint* — all downstream content derives from it.

**Outline structure:**
```
# Title Options (3 candidates, pick best)

## Hook (1-2 sentences — the "why should I care" opener)

## Sections
1. [Section name] — [1-line purpose]
   - Key point A
   - Key point B
   - Evidence/data to include
   - Media placement: [image/video/gif opportunity]

2. [Section name] — [1-line purpose]
   ...

## Closing
- Memorable takeaway (one line)
- CTA alignment with brief

## Media Inventory
- Hero image concept
- Supporting images (one per ~300 words)
- Video opportunity (if applicable)
- GIF opportunity (if applicable)
- Audio narration (y/n)
```

**Output**: `outline.md`

## Phase 4: Long-Form Content Generation

Write the primary long-form post. Target platform determines format.

### broomva.tech (default)

Use the [templates/broomva-tech-post.mdx](templates/broomva-tech-post.mdx) template.

**Frontmatter schema:**
```yaml
---
title: "Post Title"
summary: "One-sentence summary for cards and SEO"
date: YYYY-MM-DD
published: true
tags:
  - tag1
  - tag2
audio: /audio/writing/{slug}.mp3  # if audio generated
---
```

**Content conventions:**
- Use standard Markdown (GFM) — the engine renders via remark + remark-gfm
- Embed video: ``
- Images: ``
- Figures: `Caption`
- Tables: Standard GFM tables (styled by Tailwind prose)
- No custom MDX components needed — raw HTML works

### Substack / Alternative Platforms

Use [templates/substack-post.md](templates/substack-post.md). Standard Markdown, no frontmatter beyond title/subtitle. Adjust image paths to be relative or hosted URLs.

**Output**: `broomva-tech-post.mdx` and/or `substack-post.md` (based on `destination` in brief)

## Phase 5: Cross-Platform Adaptation

**Critical rule**: Each platform gets *native* content, not a copy-paste resize. The core *message* is shared; the *expression* is platform-native.

### Adaptation Matrix

| Platform | Length | Format | Hook Style | Media | CTA Style |
|----------|--------|--------|-----------|-------|----------|
| X blog post | Freeform (no limit) | Long-form article | Narrative hook + hero image | Images, video, GIFs inline | Link + engagement |
| X post | 280 chars | Single tweet | Punchy stat or claim | 1 image | Implied (engagement) |
| X thread | 5-8 tweets | Numbered thread | Scale proof or contrarian | Image every 2-3 tweets | Link in final tweet |
| LinkedIn | 1300 chars | Paragraphs + bullets | First 210 chars = hook | 1 image or document carousel | Direct ask |
| Instagram post | 2200 chars caption | Caption + carousel (1080x1350) | Visual-first, caption supports | 1-10 carousel images | Save/share/link in bio |
| Instagram reel | 15-60s script | Video script + captions | 3-second hook | 9:16 vertical video | Follow/link in bio |

### Platform-Specific Content Generation

See [references/platform-adaptation.md](references/platform-adaptation.md) for detailed per-platform strategies.

**X Blog Post** — Full long-form article published directly on X (formerly "Twitter Articles"). Freeform length — can match or exceed the broomva.tech post. Supports inline images, videos, GIFs, and rich formatting. Unlike the broomva.tech post, the X blog post is written for *X's audience and algorithm* — more conversational, more opinionated, more multimedia-dense. Every section should be accompanied by a visual (image, diagram, GIF, or video clip). The hero image is critical — it's the thumbnail that determines clicks. Use Imagen 4.0 for hero + supporting images, Veo 3.1 clips for inline video, and ffmpeg GIFs for demos. See [references/x-blog-post.md](references/x-blog-post.md).

**X Post** — Extract the single most surprising or provocative insight. Always attach an image (terminal screenshot, diagram, before/after, or generated visual) — text-only posts get 60% less reach. No external links in post body (X suppresses them) — put links in a self-reply. Include an engagement hook: question, contrarian frame, or "reply with your experience." Tag 1-2 relevant accounts when genuinely building on their work. See [references/x-growth-strategy.md](references/x-growth-strategy.md).

**X Thread** — Re-tell the story in tweet-sized beats. Each tweet stands alone while building momentum. Spend 50% of effort on tweet 1 — it determines everything. Image every 2-3 tweets (increases completion by 45%). Self-reply the full chain fast (don't trickle). End with CTA: question for replies, Discord invite, or link in final self-reply. Tag the most relevant account in tweet 1 if crediting their work. See [references/x-growth-strategy.md](references/x-growth-strategy.md).

**LinkedIn** — Professional framing. Lead with insight or contrarian take in first 210 chars (before "See More" fold). Use bullet lists for key takeaways. 3-5 hashtags max.

**Instagram Post** — Design a carousel: cover slide with hook, 1 insight per slide (flashcard style, not paragraphs), stat slide, CTA slide. Caption tells the story; slides show the highlights.

**Instagram Reel** — Write a script with: 3-second visual hook, problem statement (5s), key insight (10-15s), evidence or demo (10-15s), CTA (5s). Vertical 9:16 format. See [references/reel-production.md](references/reel-production.md) for Veo 3.1 prompting and subtitle burn-in.

**Output**: `x-blog-post.md`, `x-post.md`, `x-thread.md`, `linkedin-post.md`, `instagram-post.md`, `instagram-reel.md`

## Phase 6: Multimedia Production

Plan and produce media assets. See [references/multimedia-production.md](references/multimedia-production.md).

### Asset Types

| Asset | Tool | When |
|-------|------|------|
| Hero image / social card | Nano Banana (`gemini-3.1-flash-image`) | Always — every post needs a hero |
| Supporting images | Nano Banana or `/agent-browser` screenshots | 1 per ~300 words |
| Animated GIF | ffmpeg from video or ImageMagick from frames | UI demos, flow previews |
| Audio narration | kokoro-tts / Edge TTS / ElevenLabs | If `mp3` in media targets |
| Video composition | Remotion + AI clips (Veo 3.1) | If `mp4` in media targets |
| Instagram carousel PNGs | `/pencil` MCP | If Instagram in platforms |

### Media Prompt Generation

For each planned asset, generate a specific AI prompt in `media/image-prompts.md`:
- Describe the visual concept tied to the content it accompanies
- Include style direction (dark theme, technical, minimal, etc.)
- Specify dimensions and aspect ratio per platform

### Audio Script

If audio is targeted, extract the post body text and write a narration-ready script in `media/audio-script.md`. Strip markdown formatting, add natural pauses, and note pronunciation guides for technical terms.

### Video Script

If video is targeted, write a Remotion-compatible composition outline in `media/video-script.md`:
- Scene breakdown (title, stats, screenshots, workflow, closing)
- Duration per scene
- Transition style
- Asset references (which images/clips to use)

**Output**: `media/` directory with prompt files and any generated assets

## Phase 7: Strategy & Distribution Planning

Generate strategy documents for the content package.

**Output files in `strategy/`:**
- `audience.md` — Target audience profile, what they care about, where they are
- `platform-strategy.md` — Per-platform approach, posting time, format rationale
- `distribution-plan.md` — Publishing sequence (which platform first, timing gaps, cross-linking)
- `cta.md` — Call-to-action strategy aligned across all channels

### Distribution Sequencing

Recommended order (adjust per strategy):
1. **Blog post** first (canonical URL)
2. **X thread** within 1 hour (drives initial engagement)
3. **LinkedIn** same day (professional audience, different peak hours)
4. **Instagram carousel** next day (visual audience, different consumption pattern)
5. **Instagram reel** 2-3 days later (extends content lifecycle)
6. **X post** (standalone) as engagement trigger mid-week

## Phase 8: Publishing & Distribution

Execute the distribution plan by publishing content to each platform. Uses CLI tools and REST APIs — no third-party services.

### Platform Connectors

| Platform | Tool | Auth | Capabilities |
|----------|------|------|-------------|
| **X/Twitter** | `xurl` CLI | OAuth2 (configured via `xurl auth oauth2`) | Post, thread, reply, media upload, like, repost |
| **LinkedIn** | `curl` + REST API | OAuth2 bearer token | Text posts, image posts, document carousels |
| **Instagram** | `curl` + Meta Graph API | Business account + access token | Photo posts, carousel posts, reel uploads |
| **broomva.tech** | `cp` + `git` + `gh` | Git credentials | Copy .mdx + assets, create PR |

### X Publishing (via xurl)

**Prerequisite check**: `xurl whoami` — if 401, prompt user to run `xurl auth oauth2`.

**Single post**:
```bash
# Text only
xurl post "$(cat x-post.md | head -1)"

# With image
xurl post "$(cat x-post.md | head -1)" --media media/thumbnails/x-card.png
```

**Thread** (parse x-thread.md, post sequentially):
```bash
# Extract tweet 1 (the hook), post it, capture the tweet ID
FIRST_ID=$(xurl post "Tweet 1 text" --media media/png/hero.png 2>&1 | jq -r '.data.id')

# Reply chain for remaining tweets
xurl reply $FIRST_ID "Tweet 2 text"
# ... continue for each tweet
```

**Thread parsing logic**: Read `x-thread.md`, split on `### N/N` headers, extract text between headers, identify `📸 Image:` lines for media attachment. See [references/publishing-automation.md](references/publishing-automation.md).

### LinkedIn Publishing (via curl)

**Prerequisite**: OAuth2 access token stored in `~/.config/blog-post/linkedin-token`.

```bash
LINKEDIN_TOKEN=$(cat ~/.config/blog-post/linkedin-token)
LINKEDIN_URN=$(cat ~/.config/blog-post/linkedin-urn)

# Uses Posts API v2 (ugcPosts was deprecated

…

## Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [broomva](https://github.com/broomva)
- **Source:** [broomva/skills](https://github.com/broomva/skills)
- **License:** MIT
- **Homepage:** https://skills.sh/broomva/skills

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** yes
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** no
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: passed — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/skill-broomva-skills-blog-post
- Seller: https://agentstack.voostack.com/s/broomva
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
