socials
Generate platform-specific social posts for any ZAO content - newsletter distribution, event recaps, announcements, or anything worth sharing. Covers Farcaster/X (combined via Firefly), GCs, Telegram,
SKILL.md.claude/skills/socials/skill.md
GitHubSocial Content Generator
Generate platform-specific posts for anything worth sharing - newsletter distribution, event recaps, milestones, announcements, or quick updates. Posts feel native, authentic, and aligned with BetterCallZaal's voice - grounded, rhythmic, and culturally aware.
Voice Calibration Loop
Before generating posts, ask Zaal 2-3 quick questions to calibrate the voice for THIS specific content. The goal is to learn what he'd actually say so the skill eventually stops needing to ask.
Questions to ask (pick 2-3 most relevant):
Framing: "what's the one thing you'd want someone to take away from this?" Tone: "is this more 'just shipped something' energy or 'come build with us' energy?" Angle: "who are you mainly talking to with this - the existing crew or new people?" Hook: "if you were texting this to a friend in one sentence, what would you say?" Emotion: "how do you feel about this - proud, relieved, just another day, fired up?" CTA: "do you want people to do something (show up, check the site, send you stuff) or just know about it?"
When to ask vs. when to skip:
| Situation | Ask? |
|---|---|
| First few times using /socials in a session | Ask 2-3 questions |
| User already gave detailed context ("post about the standup, focus on the teams shipping") | Skip - you have enough |
| User just says "share this" or "/socials" with no context | Ask 2 questions minimum |
| Content is routine (newsletter distribution with URL) | Skip - use the newsletter voice |
| You've asked and gotten answers 3+ times in this session | Stop asking - you have the pattern |
Learning from answers:
After each round of questions + generated posts, note patterns in the feedback memory (memory/feedback_social_posting.md). Over time, the voice profile in doc 358 and brand-voice.md should capture enough that questions become unnecessary. The goal is to make this skill self-calibrating - ask a lot at first, then coast on what you've learned.
Save voice learnings to memory when Zaal corrects a post. If he edits "we shipped" to "shipped" or changes the opening, that's a data point. Log it.
Two Modes
Mode 1: Newsletter Distribution
- User provides a published Paragraph newsletter URL
- Posts reference and link to the newsletter
- Use when asked to "distribute the newsletter" or after /newsletter
Mode 2: Standalone Posts (Default)
- User describes what they want to share (event recap, milestone, announcement, etc.)
- No newsletter URL needed
- Include a relevant link if one exists (website, GitHub, etc.)
- Use when asked to "write socials", "post about this", "share this"
If neither a URL nor content topic is clear from conversation context, ask: "What do you want to share?"
Voice Rules
Read research/community/358-bettercallzaal-brand-voice-analysis/ before generating. It has the full voice DNA extracted from 15+ real posts.
Core voice
- Every post begins with "ZM" (or "zm" or "Zm" - varies by mood)
- Fragments and simple sentences. No compound-complex. No semicolons.
- Lowercase casual (~60% of sentences). Capitalize proper nouns: ZAO, ZABAL, WaveWarZ, Farcaster
- Inconsistency within a post IS the voice - "zm" opening then capitalized sentences later is normal
- One phrase of emotion max ("having a blast", "this one hits different") then back to building
- Specific numbers always: "172 days out", "4 teams", "$1K" - never "several" or "many"
Content priority
- Lead with what was built and shipped. "built the team dashboard, pushed 4 teams live, venue confirmed" not "had an amazing kickoff meeting"
- Contribution over celebration. List actual outputs. The audience should see what's being built.
- Each platform should sound distinct - not duplicated
- Short content gets short socials. 50-80 words typical. Don't inflate.
Hard rules
- No emojis. No hashtags. No em dashes (hyphens only).
- NEVER reference work-day times. "had our first standup" not "had our first standup this morning". Zaal has a day job.
- NEVER use: "excited to announce", "thrilled", "leveraging", "I'm humbled", "incredible progress", "we'd love for you to join us"
- USE instead: "Pull up" / "Tune in" / "Be there" / "come through" for invitations
- Closing invitation should be casual and direct, not a CTA
AI slop detection
Before outputting, scan every post for these red flags and fix them:
- Perfect grammar with no personality (add fragments, lowercase starts)
- Multiple emotional statements (keep max 1 per post)
- Over-explaining ZAO/ZABAL (the audience knows)
- Posts over 100 words for social (trim to essentials)
- Any sentence that sounds like a press release (rewrite as journal entry)
Platform Specs
Generate posts for ALL of these platforms in order:
1. Farcaster + X - Combined Post (via Firefly)
- These are always the SAME post - Zaal posts once via Firefly and it goes to both platforms
- Max 280 characters (X limit applies since it's cross-posted)
- Punchy, scroll-stopping rhythm
- Short sentences or fragments that make people pause or reflect
- Append link at the end if relevant
- If people are mentioned, tag them (X handles where known)
- Post to Farcaster /zao channel
2. X (Twitter) - Group Chat
- Conversational and insider tone - like texting the crew
- Assume readers already know ZAO, WaveWarZ, and ongoing events
- Can be longer than main tweet - group chats aren't character-limited
- No link needed unless it fits naturally
- Reference inside jokes, shared context, recent events
3. Farcaster - /zao Group Chat
- Insider tone - like the X group chat but for the Farcaster crew
- Everyone here is deep in the ZAO ecosystem already
- Conversational, no explanation needed
- Can reference fractals, WaveWarZ, ZOE without context
- Append newsletter link
5. Telegram Group Chat
- Direct and friendly, like a note to the crew
- One or two sentences max
- Append newsletter link
6. Discord Group Chat
- Casual community tone
- Can reference events, collabs, shared energy, or ask a question
- Slightly longer than Telegram - Discord is for discussion
- Append newsletter link
7. LinkedIn
- Professional but still authentic - not corporate
- Start with "ZM" like every other platform
- Frame the day's content through a builder/founder/community lens
- LinkedIn audience doesn't know ZAO - give 1 line of context on first mention
- Longer than X, shorter than Farcaster /zao - aim for 3-5 sentences
- End with the newsletter link on its own line
- No "I'm humbled" or "thrilled to share" - just say what happened
8. Facebook
- Start with "ZM"
- Warm, personal, community tone - Facebook is where family and IRL friends see this
- Less crypto/Web3 jargon than other platforms - translate for normies
- Can be slightly longer and more conversational
- Append newsletter link
- Good place to reference IRL events (ZAO Stock, Bar Harbor meetups, Red Sox)
9. Video Platforms (Only if newsletter has a video element)
Skip this section entirely if no video is involved.
TikTok:
- Caption starts with "ZM"
- Title: Catchy, emotionally clear
- Tags: 5-10 comma-separated keywords (no #)
YouTube:
- Description starts with "ZM"
- Title: Descriptive and emotionally clear
- Tags: 5-10 comma-separated keywords (no #)
Output Format
Use the /clipboard skill pattern: write an HTML page to /tmp/clipboard.html with all posts organized by platform, each with its own Copy button. Open in browser automatically.
The HTML should have:
- Each platform as a labeled section with clear visual separation
- Click-to-copy on each post block
- Character count shown for Farcaster/X combined post (280 char limit)
- Dark theme matching ZAO aesthetic (bg #0a1628, accent #f5a623)
- The link pre-filled in every post that needs it
Do NOT output posts as plain text in the chat. The whole point is the browser clipboard page. Just say "opened in browser" and let the user copy from there.
Workflow
Mode 1: Newsletter Distribution
- Get the published newsletter URL from the user
- Read/fetch the newsletter content if not already in conversation
- Extract the emotional essence and key themes
- Generate all platform posts
- Write HTML to
/tmp/clipboard.htmland open in browser
Mode 2: Standalone Posts
- Use conversation context to understand what to share
- Generate all platform posts
- Write HTML to
/tmp/clipboard.htmland open in browser
Platform posting order (Zaal's actual workflow):
- Firefly - copy the Farcaster/X combined post, post once via Firefly (hits both)
- X GC - copy, paste in X group chat
- Farcaster GC - copy, paste in Farcaster /zao group chat
- Telegram - copy, paste in TG group
- Discord - copy, paste in Discord
- LinkedIn - copy, paste on LinkedIn
- Facebook - copy, paste on Facebook
The clipboard page sections should be in THIS order so Zaal can go top to bottom.
Scaling Posts to Content Size
| Content Type | FC/X (Firefly) | X GC | FC GC | Telegram | Discord | ||
|---|---|---|---|---|---|---|---|
| Quick update | 1-2 sent + link | 1-2 sent | 1-2 sent | 1 sent | 1-2 sent | 2-3 sent | 2-3 sent |
| Standard | 2 sent + link | 2-3 sent | 2-3 sent | 1-2 sent | 2-3 sent | 3-5 sent | 3-5 sent |
| Announcement | 2-3 sent + link | 3-5 sent | 3-5 sent | 2 sent | 3-5 sent | 4-6 sent | 4-6 sent |
Don't make a quick update sound like a major announcement across socials.
Anti-patterns
- Don't hype. Lead with what was built, shipped, or decided - not how you feel about it.
- Don't summarize with emotion. List concrete outputs.
- Don't duplicate the same post across platforms. Each should feel native to that platform.
- Don't use em dashes. Hyphens only.
- Don't use emojis or hashtags.
- Don't add CTAs like "check it out" or "link in bio". Let the link sit naturally at the end.
- Don't over-explain. The audience on each platform has different context levels - write to that.
- Don't over-capitalize. Match the lowercase casual voice.
- Don't pad short days into long posts. Match the energy.
- Don't forget ZM. Every social post starts with it, even if the newsletter itself skipped it for an announcement opening.
- Don't say "excited", "thrilled", "amazing progress", "incredible". Just say what shipped.