📱 Build in Public - Claude Code Plugin
Generate engaging social media posts from your Claude Code sessions for the #BuildingInPublic community.

What It Does
This plugin automatically tracks your coding sessions and generates ready-to-post content for:
- Twitter/X - Short posts (280 chars) and threads
- BlueSky - Short posts (300 chars)
- LinkedIn - Professional medium-length updates
- Instagram - Long-form captions with hashtags
- Mastodon - Medium posts with hashtags
Installation
From GitHub (Recommended)
Step 1: Add the marketplace
/plugin marketplace add https://github.com/vindicatenyc/build-in-public-plugin
Step 2: Install the plugin
/plugin install build-in-public
Step 3: Restart Claude Code
After installation, restart Claude Code to load the plugin. You'll see a message: "✓ Installed build-in-public. Restart Claude Code to load new plugins."
Verify Installation:
/plugin list
You should see build-in-public (v1.0.0) in the Installed tab.
Local Installation (For Plugin Development)
If you're developing or testing changes to the plugin:
# Clone the repo
git clone https://github.com/vindicatenyc/build-in-public-plugin.git
cd build-in-public-plugin
# Start Claude Code with the plugin loaded
claude --plugin-dir .
Note: The --plugin-dir flag is for development only and loads the plugin for that session. For permanent installation, use the GitHub method above.
Usage
Generate Posts
After a coding session, run:
/build-in-public:generate
This will:
- Parse your current session transcript
- Extract highlights (commits, files created, bugs fixed, etc.)
- Generate posts for all platforms
- Save to
output/build-in-public_[timestamp].md and .json in your project directory
Note: Output files are created in the current project's output/ directory, not in the plugin directory.
Preview Session
Want to see what happened before generating posts?
/build-in-public:preview
Automatic Reminders
The plugin includes a SessionEnd hook that reminds you to generate posts when you've had a productive session.
Project Configuration
Important: Add this to each project's .gitignore to avoid committing generated posts:
# Build in Public generated posts
output/
build-in-public_*.md
build-in-public_*.json
The plugin creates an output/ directory in your project directory (not the plugin directory) to keep generated files organized and separate from your code.
Output Example
Short Post (Twitter/X - No Hashtags)
✅ Just shipped: Add user authentication with JWT tokens
Note: Hashtags removed from X/Twitter posts per platform best practices
Thread (Twitter/X - Compelling Hook)
Tweet 1/6:
Just shipped: Add user authentication with JWT tokens
Thread on how it came together 👇
Tweet 2/6:
💻 Tech stack: Python, FastAPI, PostgreSQL
Tweet 3/6:
📝 New files:
• auth.py
• jwt_handler.py
• user_model.py
Tweet 4/6:
📦 Commits:
✅ Add user authentication with JWT tokens
✅ Implement refresh token rotation
Tweet 5/6:
🧪 Tests: All passing ✅
Nothing beats that green checkmark feeling.
Tweet 6/6:
What are you building today?
Note: First tweet designed as a hook to drive engagement and thread views
Automation Integration
The JSON output is designed for automation tools. Example structure:
{
"summary": {
"session_id": "abc123",
"project_name": "my-api",
"duration_minutes": 45,
"files_created": ["auth.py", "jwt_handler.py"],
"git_commits": ["Add user authentication"],
"languages_used": ["Python", "SQL"]
},
"posts": {
"short": ["Tweet-ready post 1", "Tweet-ready post 2"],
"thread": ["Tweet 1/5", "Tweet 2/5", "..."],
"medium": ["LinkedIn post"],
"long": ["Instagram caption"],
"hashtags": ["#BuildingInPublic", "#Python"]
}
}
Example: Auto-publish with your own script
import json
with open('build-in-public_20250101_120000.json') as f:
data = json.load(f)
# Post to Twitter
tweet = data['posts']['short'][0]
twitter_client.post(tweet)
# Post to BlueSky
bluesky_client.post(tweet)
# Post to LinkedIn
linkedin_post = data['posts']['medium'][0]
linkedin_client.post(linkedin_post)
Configuration
Customize Hashtags
Edit scripts/generate_posts.py to add your own default hashtags:
hashtags = ['#BuildingInPublic', '#CodingInPublic', '#YourHashtag']
Disable Session End Reminder
Remove or comment out the SessionEnd hook in hooks/hooks.json:
{
"SessionEnd": []
}
Plugin Structure