Skip to content

Christian-Sidak/slopify

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Slopify

Python 3.9+ License: MIT Built with Claude No dependencies

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.

How it works

  1. Voice model: Reads your blog/writing corpus and builds a profile of how you think, argue, and write
  2. Signal: Scans Hacker News (or Google News RSS for industry-specific content) for stories worth posting about
  3. Filter: Uses a cheap model pass to exclude politically charged or off-topic stories
  4. Pick: Selects the 3 stories most aligned with your intellectual profile
  5. Generate: For each story, produces a summary, analysis, and draft LinkedIn post in your voice
  6. Approve: Sends candidates to Telegram for human review, ranked best-to-worst
  7. 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.

Quickstart

# 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

Requirements

  • Python 3.9+
  • Claude Code CLI (uses claude -p for generation)
  • No pip dependencies. Everything is stdlib.

Optional integrations

Buffer (LinkedIn scheduling)

# Get your API key from https://publish.buffer.com/settings/api
export BUFFER_API_KEY="your-key"
python3 linkedin_slop.py --buffer-setup

This discovers your Buffer organization and LinkedIn channel automatically. Approved posts get pushed to your Buffer queue.

Telegram (approval workflow)

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.

Cron

See run_slopify.example.sh for a cron wrapper that runs the pipeline daily.

Brand configuration

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.

Project structure

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

The philosophy

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

License

MIT. Use it, fork it, ship it.

Author

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.

About

Automate your LinkedIn presence using your actual writing voice. Feed it your blog, it generates posts that sound like you, not like ChatGPT.

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages