Automate your LinkedIn presence using your actual writing voice.
Feed it your blog posts (or any corpus of your real writing), point it at Hacker News, and it generates LinkedIn posts that sound like you instead of like ChatGPT. It also handles Telegram-based approval, Buffer scheduling, and industry feed scanning.
This is the open-source version of the pipeline described in Last Helicopter Out of Saigon: An Introvert's Guide to Automating LinkedIn Slop.
If you find this useful, star the repo so others find it. The pipeline I actually run on my own LinkedIn lives in a private companion repo, but everything you need to run your own copy is here.
- Voice model: Reads your blog/writing corpus and builds a profile of how you think, argue, and write
- Signal: Scans Hacker News (or Google News RSS for industry-specific content) for stories worth posting about
- Filter: Uses a cheap model pass to exclude politically charged or off-topic stories
- Pick: Selects the 3 stories most aligned with your intellectual profile
- Generate: For each story, produces a summary, analysis, and draft LinkedIn post in your voice
- Approve: Sends candidates to Telegram for human review, ranked best-to-worst
- Post: Pushes approved posts to Buffer for scheduled LinkedIn publishing
The key insight: most AI-generated LinkedIn content is bad because it has no voice. "Write a LinkedIn post about X" produces generic output regardless of who is posting. Slopify gives the model a corpus of your real writing and asks it to simulate what you would say about each topic. The difference is the difference between a press release and a conversation.
# Clone
git clone https://github.com/Christian-Sidak/slopify.git
cd slopify
# No pip dependencies required (stdlib only, plus Claude CLI)
# Install Claude Code: https://docs.anthropic.com/en/docs/claude-code
# Create your brand config (see brands.example.json)
cp brands.example.json brands.json
# Edit brands.json with your voice source directory, style rules, etc.
# Point it at your writing
# Put your blog posts / essays / writing samples in a directory
# Set "voice_source_dir" in brands.json to that directory
# Run it
python3 linkedin_slop.py # scan HN, generate 3 posts
python3 linkedin_slop.py --topic "..." # generate about a specific topic/URL
python3 linkedin_slop.py --list # show cached posts
python3 linkedin_slop.py --brand sentinel # use a different brand profile
python3 linkedin_slop.py --analytics # show pipeline stats- Python 3.9+
- Claude Code CLI (uses
claude -pfor generation) - No pip dependencies. Everything is stdlib.
# Get your API key from https://publish.buffer.com/settings/api
export BUFFER_API_KEY="your-key"
python3 linkedin_slop.py --buffer-setupThis discovers your Buffer organization and LinkedIn channel automatically. Approved posts get pushed to your Buffer queue.
Create a Telegram bot via @BotFather, then create slopbot_config.json:
{
"bot_token": "your-bot-token",
"chat_id": "your-chat-id"
}When the pipeline generates posts, it sends them to your Telegram chat ranked best-to-worst. Reply with the confirmation code to approve, "skip" to see the next candidate, or send feedback to trigger a revision.
See run_slopify.example.sh for a cron wrapper that runs the pipeline daily.
Slopify supports multiple brand profiles. Each brand has its own voice source, content source, style rules, and Buffer channel. See brands.example.json for the full schema.
Key fields:
| Field | What it does |
|---|---|
voice_source_dir |
Directory of your writing (MDX, MD, or any text files) |
voice_source_glob |
File pattern to match (e.g., *.mdx, *.md) |
content_source |
hackernews or industry_feeds |
filter_prompt_context |
Who you are, for the content filter |
pick_prompt_context |
What topics to prefer |
post_voice_instructions |
How you think and argue |
post_style_rules |
Prose style constraints |
buffer_channel_key |
Which Buffer channel to post to |
The more opinionated your writing corpus, the better the output. If your corpus is bland, the output will be bland. The voice model is doing most of the heavy lifting.
linkedin_slop.py # Main pipeline (generation, approval, posting)
brands.json # Your brand configs (gitignored)
buffer_config.json # Buffer API credentials (gitignored)
slopbot_config.json # Telegram bot credentials (gitignored)
run_slopify.sh # Cron wrapper (gitignored)
logs/ # Pipeline logs
This project exists because LinkedIn rewards frequency and familiarity over substance, and the people who refuse to play on principle are the ones who end up surprised when nobody returns their messages.
If you have a corpus of real writing with real opinions, this pipeline can keep your LinkedIn active while you focus on actual work. If you do not have a corpus, that is its own kind of lesson.
Read the full writeup: Last Helicopter Out of Saigon
MIT. Use it, fork it, ship it.
Built by Christian Sidak (@Christian-Sidak). PM at Anduril, ex-Palantir, co-founder of Sentinel. I write at christiansidak.com.
If Slopify saves you an hour, follow me on GitHub or drop a star. That is how I find out what to build next.