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.
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.
The Results
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
- 01 Prompt via Slack
Drop a rough idea, a bullet point, or a topic into a dedicated channel. No formatting required.
- 02 n8n picks it up
A webhook-triggered workflow receives the message and routes it to an LLM API call for drafting.
- 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.
- 04 Staged in Postiz
The draft lands in my self-hosted Postiz instance as a scheduled post marked "pending review."
- 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.
Tech Stack
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.
// 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"); 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