Skip to main content
← All Projects // AUTOMATION

AI Ghostwriter

Slack → LinkedIn Automation

A self-hosted n8n workflow that drafts LinkedIn posts from Slack prompts, stages them in Postiz for review, and publishes on approval — zero SaaS subscriptions, full data ownership.

n8n AI Automation LinkedIn Slack Postiz Self-Hosted LLM
// PIPELINE

How It Works

Five stages from rough idea to published post. Every step runs on hardware I own — no SaaS middleware, no third-party data storage.

// IMPACT

The Results

28× DRAFT TIME REDUCTION 30+ min → <2 min per post
3–4× WEEKLY POST FREQUENCY Sporadic → consistent cadence
$0 MONTHLY SAAS FEES ~$0.02 per post in API calls
100% DATA OWNERSHIP All content stays on-premise

The Problem

Staying visible on LinkedIn takes time I don't have. Writing consistent, on-brand posts from scratch — after a full workday — just doesn't happen. But visibility matters if you're building a professional brand.

I didn't want to pay for a ghostwriting SaaS or hand my content to a third-party AI service. I already had the infrastructure. I just needed the workflow.

The Pipeline, Step by Step

  1. 01
    Prompt via Slack

    Drop a rough idea, a bullet point, or a topic into a dedicated channel. No formatting required.

  2. 02
    n8n picks it up

    A webhook-triggered workflow receives the message and routes it to an LLM API call for drafting.

  3. 03
    AI drafts the post

    The model receives a system prompt tuned to my voice: direct, data-grounded, no buzzwords. Returns a hook, 3–4 paragraphs, and a CTA.

  4. 04
    Staged in Postiz

    The draft lands in my self-hosted Postiz instance as a scheduled post marked "pending review."

  5. 05
    Human approval gate

    Postiz notifies me. I edit inline if needed, then approve. Nothing publishes without a human in the loop.

What I Learned

Getting the system prompt right took longer than building the workflow. The mechanics — webhook, HTTP call, Postiz API — took an afternoon. Tuning the AI to write in a voice that actually sounds like me, not generic LinkedIn content, took two weeks of iteration.

The automation is the easy part. The prompt engineering is the product.

I also added a quality gate: if the LLM returns a post over 3,000 characters or uses any flagged buzzwords ("synergy," "leverage," "thought leader"), the workflow flags it for heavy revision instead of staging it clean.

// STACK

Tech Stack

n8n Workflow Orchestration
self-hosted
Postiz Social Media Scheduler
self-hosted
Slack Input Interface
webhook
Claude API LLM for Drafting
Anthropic
Traefik + Authelia Reverse Proxy + SSO
self-hosted
Docker Compose Container Orchestration
RPi5 + Flex 4
// QUALITY GATE

Automated Guardrails

The n8n workflow applies validation rules before staging. Posts that fail are routed to a "needs revision" queue, not discarded — preventing runaway AI content.

n8n · IF Node logic
// Reject conditions — route to "needs revision" queue
if (post.length > 3000) {
  route("heavy-revision");
}

const banned = ["synergy", "leverage", "thought leader", "disrupt"];
if (banned.some(w => post.toLowerCase().includes(w))) {
  route("heavy-revision");
}

// Pass — stage in Postiz as "pending review"
route("postiz-stage");
// SCREENSHOTS

Interface

n8n Workflow Canvas

Replace with: screenshot of the n8n workflow editor showing the pipeline nodes

Format: PNG/WebP · Min width: 1200px · Aspect ratio: 16:9

Postiz Review Queue

Replace with: screenshot of the Postiz dashboard showing a staged draft pending review

Format: PNG/WebP · Min width: 1000px · Aspect ratio: 4:3