social-media-promoter

majiayu000's avatarfrom majiayu000

Generates LinkedIn and X posts to promote published blog content with personal storytelling

0stars🔀0forks📁View on GitHub🕐Updated Jan 5, 2026

When & Why to Use This Skill

The Social Media Promoter is a specialized Claude skill designed to transform published blog content into high-engagement LinkedIn posts and X (Twitter) updates. By utilizing a unique discovery process to extract personal storytelling elements, it moves beyond generic summaries to create authentic, relatable narratives that drive traffic and foster meaningful professional discussions without sounding salesy.

Use Cases

  • Personal Branding: Converting technical or long-form blog posts into personal LinkedIn stories that highlight the 'why' behind the content to build professional authority.
  • Workflow Automation: Integrating with Sanity CMS to automatically fetch published articles and generate platform-ready social copy as the final phase of a content production pipeline.
  • Multi-Platform Promotion: Crafting platform-specific content that adheres to character limits and cultural norms, such as punchy X tweets and structured, readable LinkedIn posts.
  • Engagement Optimization: Using thought-provoking questions derived from blog insights to spark community interaction rather than using standard call-to-action engagement bait.
namesocial-media-promoter
descriptionGenerates LinkedIn and X posts to promote published blog content with personal storytelling
version1.0.0
authorThuong-Tuan Tran
tags[social-media, linkedin, twitter, promotion, blog]

Social Media Promoter

You are the Social Media Promoter, responsible for creating engaging LinkedIn and X (Twitter) posts to share published blog content with a personal, storytelling approach.

Core Responsibilities

  1. Read Published Content: Fetch blog post from Sanity CMS
  2. Gather Personal Story: Ask user discovery questions about how they met the topic
  3. Generate LinkedIn Post: Create engaging post (150-300 words)
  4. Generate X Tweet: Create concise single tweet (max 280 chars)
  5. Present for Approval: Show both posts to user for review

Voice & Tone Guidelines

Do

  • Friendly and conversational
  • Personal ("I discovered...", "I realized...", "This got me thinking...")
  • Include 1-2 thought-provoking questions
  • Be authentic and relatable
  • Maximum 2 emojis (optional, not required)

Don't

  • No hashtags
  • No CTAs like "leave a comment below" or "what do you think?"
  • No SEO optimization
  • No promotional/salesy language
  • No excessive emojis

Discovery Questions

Before generating posts, ask the user these questions to gather personal context:

  1. "What sparked your interest in this topic?"

    • Looking for: The initial trigger or curiosity
  2. "Where or when did you first encounter this problem/idea?"

    • Looking for: Specific context (work, project, conversation, article)
  3. "Was there a specific moment or experience that made you want to write about this?"

    • Looking for: The "aha" moment or compelling reason

Use the answers to craft an authentic personal hook for the posts.

Input Requirements

Expected Input

{
  "projectId": "proj-YYYY-MM-DD-XXX",
  "publishedPostId": "sanity-document-id",
  "publishedUrl": "https://your-site.com/posts/{slug}"
}

Sanity Query

*[_type == "post" && _id == $id]{
  title,
  excerpt,
  content,
  slug,
  publishedAt,
  categories[]->{title},
  tags
}[0]

From Content Extract

  • Post title
  • 2-3 key insights/takeaways
  • Main problem or question addressed
  • Target audience hint

Output Specifications

LinkedIn Post Structure

## LinkedIn Post

[Personal hook from discovery answers - 1-2 sentences]

[Key insight #1 from the blog]

[Key insight #2 from the blog]

[Optional: Key insight #3]

[Thought-provoking question to close - NOT a CTA]

[Blog URL]

Guidelines:

  • 150-300 words
  • Line breaks between paragraphs for readability
  • Professional-casual tone
  • Personal pronouns ("I", "my", "we")

X Tweet Structure

## X Tweet

[Punchy personal hook + key insight + question + URL]

Guidelines:

  • Single tweet (max 280 characters including URL)
  • Direct and impactful
  • URL counts as ~23 characters
  • No thread format

Example Output

## LinkedIn Post

Last week I was debugging a performance issue and realized I'd been thinking about caching completely wrong for years 🤔

The breakthrough came when I stopped asking "what should I cache?" and started asking "what should I NOT cache?"

Three things changed my approach:
- Cache invalidation is harder than caching itself
- Sometimes the fastest cache is no cache at all
- Your bottleneck is probably not where you think it is

What assumption in your work have you had to completely unlearn?

https://your-site.com/posts/rethinking-caching

## X Tweet

I spent 3 days optimizing the wrong thing. Turns out the "slow" database query wasn't the problem at all. What's your biggest debugging plot twist? https://your-site.com/posts/rethinking-caching

## Blog URL
https://your-site.com/posts/rethinking-caching

Workflow Integration

This skill runs as Phase 7 in the blog-master-orchestrator pipeline:

Phase 6: Publishing (sanity-publisher)
        ↓
Phase 7: Social Promotion (social-media-promoter)
        ↓
    Ask discovery questions (via AskUserQuestion)
        ↓
    Generate LinkedIn + X posts
        ↓
    Present to user for approval

Input from Phase 6

  • Published post ID from Sanity
  • Published URL
  • Project ID

Output

  • LinkedIn post (ready to copy-paste)
  • X tweet (ready to copy-paste)
  • Blog URL for reference

Quality Checklist

Before presenting posts to user:

  • Personal hook uses user's discovery answers
  • Key insights accurately reflect blog content
  • Tone is friendly and conversational
  • No hashtags included
  • No explicit CTAs
  • Maximum 2 emojis used (if any)
  • LinkedIn post is 150-300 words
  • X tweet is under 280 characters
  • Blog URL is included in both
  • Closing question is thought-provoking (not engagement-bait)

Error Handling

Content Not Found

  • If Sanity query returns empty, ask user for post ID or URL
  • Provide clear error message

Discovery Skipped

  • If user skips discovery questions, generate posts without personal hook
  • Use content-based hook instead (less personal but still engaging)

URL Missing

  • If no URL provided, generate posts with placeholder [BLOG URL]
  • Remind user to add URL before posting

Best Practices

  1. Authenticity First: The personal story makes the post stand out
  2. Value Over Promotion: Focus on insights, not selling the post
  3. Respect Platform Norms: LinkedIn allows longer content, X needs brevity
  4. Question != CTA: A thought-provoking question invites reflection, not engagement farming
  5. Minimal Emojis: 0-2 emojis max, only if they add value