social-media-posts
This skill generates platform-specific social media posts for LinkedIn, Facebook, Instagram, and Reddit, tailored to each platform's character limits, audience expectations, and formatting conventions. Use it to create original posts from scratch, repurpose existing content like blog posts or newsletters, or develop coordinated multi-platform campaigns with timing suggestions. Output is copy-paste-ready for immediate publishing.
git clone --depth 1 https://github.com/jezweb/claude-skills /tmp/social-media-posts && cp -r /tmp/social-media-posts/plugins/social-media/skills/social-media-posts ~/.claude/skills/social-media-postsSKILL.md
# Social Media Post Generator
Create platform-specific social media posts that respect each platform's conventions, character limits, and audience expectations. Produces copy-paste-ready content.
## Modes
### From Scratch
User provides topic + key points. Generate posts for selected platforms.
### From Content
User provides existing content (blog post, newsletter, announcement, press release). Repurpose into platform-appropriate posts.
### Campaign
Generate a coordinated set of posts across all platforms for a single launch, announcement, or event. Includes posting sequence and timing suggestions.
## Workflow
### 1. Gather Input
| Field | Required | Example |
|-------|----------|---------|
| Topic or source content | Yes | "We just launched a new feature" or path to blog post |
| Target platforms | Yes | LinkedIn, Facebook, Instagram, Reddit |
| Tone | No | Professional, casual, enthusiastic, educational |
| CTA | No | "Try it free", "Read more", "Comment your thoughts" |
| Link to include | No | https://example.com/blog/new-feature |
| Image available? | No | Yes/no — affects post structure |
If the user provides a file path or URL to existing content, read it first and extract the key messages.
### 2. Generate Per-Platform Posts
---
#### LinkedIn
**Audience**: Professionals, B2B, industry peers
**Tone**: Authoritative but approachable, thought-leadership
**Optimal length**: 1,200–1,500 characters (longer posts perform well)
**Structure**:
```
[Hook line — must grab attention before "see more" truncation]
[blank line]
[2-3 short paragraphs with line breaks between]
[blank line]
[CTA or question to drive comments]
[blank line]
[3-5 relevant hashtags]
```
**Rules**:
- Hook must work in first 2 lines (before "…see more" at ~210 chars)
- Use line breaks liberally — wall-of-text kills engagement
- Ask a question at the end to drive comments
- Hashtags: 3-5 max, mix broad (#Marketing) and niche (#CloudflareWorkers)
- Links in comments perform better than in post body (algorithm penalty)
- No emoji overload — 1-2 max, or none for serious topics
**Image specs**: 1200×627px (1.91:1) for link preview, or 1080×1080 (1:1) for standalone
**Example**:
```
We just shipped something we've been building for 6 months.
It started as a "wouldn't it be nice if…" conversation and turned
into our most requested feature. Here's what we learned:
→ Users don't want more features. They want fewer clicks.
→ The prototype we almost killed became the final product.
→ Shipping weekly forced us to cut scope ruthlessly.
The full story is in our latest blog post (link in comments).
What's the hardest product decision you've made this year?
#ProductDevelopment #StartupLife #BuildInPublic
```
---
#### Facebook
**Audience**: Mixed — friends, family, community, local businesses
**Tone**: Conversational, warm, community-focused
**Optimal length**: 80–150 characters for engagement, up to 500 for storytelling
**Structure**:
```
[Opening hook — conversational, relatable]
[1-2 short paragraphs]
[Link (if applicable) — Facebook generates preview cards]
[Engagement prompt — question or poll]
```
**Rules**:
- Link posts: Facebook auto-generates a preview card — don't repeat the headline in your text
- Short posts (under 130 chars) get larger text rendering in feed
- Questions and polls drive highest engagement
- Tag relevant pages when mentioning partners/clients
- Hashtags: 1-3 or none — Facebook hashtags are less effective than other platforms
- Emojis are welcome but don't overdo (2-3 max)
**Image specs**: 1200×630px (1.91:1) for link preview, 1080×1080 (1:1) for photo posts
**Example**:
```
6 months ago we started building something our users kept asking for.
Today it's live. 🚀
We wrote up the full story — the pivots, the almost-killed prototype,
and why "fewer clicks" won over "more features."
[link]
What feature have you shipped that surprised you?
```
---
#### Instagram
**Audience**: Visual-first, younger demographic, lifestyle/brand-focused
**Tone**: Authentic, visual storytelling, personality-forward
**Optimal length**: Key message in first 125 chars (truncation point), full caption up to 2,200
**Structure**:
```
[First line — must work as standalone (before "…more")]
[blank line]
[Story or detail — 2-4 short paragraphs]
[blank line]
[CTA — save, share, comment, link in bio]
.
.
.
[Hashtags — in first comment OR separated by dots]
```
**Rules**:
- First 125 characters must carry the message (everything after is hidden behind "…more")
- No clickable links in captions — direct to "link in bio"
- Hashtags: 20-30 in first comment (not in caption) for discoverability
- Mix hashtag sizes: 5 large (1M+ posts), 10 medium (100K-1M), 10 niche (<100K)
- Emojis are part of the language — use them naturally
- Carousel posts: include a swipe CTA ("Swipe for the full breakdown →")
- Stories: prompt action ("Reply with 🔥 if you relate")
**Image specs**: 1080×1080 (1:1) feed, 1080×1350 (4:5) portrait, 1080×1920 (9:16) stories/reels
**Example**:
```
We shipped our most requested feature today. Here's the story 👇
Six months ago, someone on our team said "wouldn't it be nice
if users could do this in one click instead of five?"
We almost killed the prototype twice. But our users kept asking
for it. So we shipped it.
The biggest lesson? Your users don't want more features.
They want fewer clicks.
Full story → link in bio
💬 What's one feature you wish was simpler in your favourite app?
```
**First comment**:
```
#ProductLaunch #StartupLife #BuildInPublic #TechStartup
#ProductDevelopment #UXDesign #SaaS #FeatureLaunch
[... 20-30 total hashtags]
```
---
#### Reddit
**Audience**: Community-specific, values authenticity, allergic to marketing
**Tone**: Genuine, value-first, conversational, never salesy
**Optimal length**: Title 100-150 chars, body varies by subreddit
**Structure**:
```
Title: [Descriptive, value-focused — NOT clickbait]
Body:
[Context — why this matters to this community]
[TheHit the Cloudflare REST API directly for operations that wrangler and MCP can't handle well. Bulk DNS, custom hostnames, email routing, cache purge, WAF rules, redirect rules, zone settings, Worker routes, D1 cross-database queries, R2 bulk operations, KV bulk read/write, Vectorize queries, Queues, and fleet-wide resource audits. Produces curl commands or scripts. Triggers: 'cloudflare api', 'bulk dns', 'custom hostname', 'email routing', 'cache purge', 'waf rule', 'd1 query', 'r2 bucket', 'kv bulk', 'vectorize query', 'audit resources', 'fleet operation'.
Scaffold and deploy Cloudflare Workers with Hono routing, Vite plugin, and Static Assets. Describe project, scaffold structure, configure bindings, deploy. Use whenever the user wants to create a Worker project, set up Hono on Cloudflare, configure D1 / R2 / KV / Queues bindings, or troubleshoot Worker export syntax, API route conflicts, HMR issues, or deployment failures.
Generate Drizzle ORM schemas for Cloudflare D1 databases with correct D1-specific patterns. Produces schema files, migration commands, type exports, and DATABASE_SCHEMA.md documentation. Handles D1 quirks: foreign keys always enforced, no native BOOLEAN/DATETIME types, 100 bound parameter limit, JSON stored as TEXT. Use when creating a new database, adding tables, or scaffolding a D1 data layer.
Cloudflare D1 migration workflow: generate with Drizzle, inspect SQL for gotchas, apply to local and remote, fix stuck migrations, handle partial failures. Use when running migrations, fixing migration errors, or setting up D1 schemas.
Generate database seed scripts with realistic sample data. Reads Drizzle schemas or SQL migrations, respects foreign key ordering, produces idempotent TypeScript or SQL seed files. Handles D1 batch limits, unique constraints, and domain-appropriate data. Use when populating dev/demo/test databases. Triggers: 'seed database', 'seed data', 'sample data', 'populate database', 'db seed', 'test data', 'demo data', 'generate fixtures'.
Scaffold Hono API routes for Cloudflare Workers. Produces route files, middleware, typed bindings, Zod validation, error handling, and API_ENDPOINTS.md documentation. Use after a project is set up with cloudflare-worker-builder or vite-flare-starter, when you need to add API routes, create endpoints, or generate API documentation.
Build a full-stack TanStack Start app on Cloudflare Workers from scratch — SSR, file-based routing, server functions, D1+Drizzle, better-auth, Tailwind v4+shadcn/ui. Use whenever the user mentions TanStack Start, asks to scaffold a full-stack Cloudflare app with SSR, wants an SSR dashboard, or asks for a React 19 + Cloudflare Workers app with file-based routing and server functions — even if they don't name TanStack Start specifically. No template repo — Claude generates every file fresh per project.
Scaffold a full-stack Cloudflare app from the vite-flare-starter template — React 19 + Hono + D1+Drizzle + better-auth + Tailwind v4+shadcn/ui + TanStack Query + R2 + Workers AI. Run setup.sh to clone, configure, and deploy. Use whenever the user wants a batteries-included Cloudflare full-stack app, vite-flare-starter scaffold, or a React + Cloudflare app with auth + database + Workers AI ready to go.