An n8n workflow that watches my blog RSS feed, summarizes new posts with a local LLM (Gemma on Ollama), and cross-posts to Facebook, LinkedIn, X, and Instagram. I write the post once; the workflow handles the rest.
Overview Aspect Details Platform Self-hosted n8n LLM Gemma via Ollama (local GPU) Social APIs Postiz Scheduling Cron trigger (10 min) Hardware RTX 3090 Ti for inference How It Works Fetch - RSS feed polling for new blog posts Summarize - Ollama (Gemma) generates platform-specific summaries Extract - Parse HTML for images, download and resize Generate - AI creates relevant hashtags Publish - Postiz API posts to all platforms Dedupe - Hash-based tracking prevents duplicates Architecture ┌─────────────────────────────────────────────────────────────────┐ │ Hugo RSS Feed │ └───────────────────────────┬─────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ n8n Workflow │ │ ┌──────────────────────────────────────────────────────────┐ │ │ │ Cron Trigger (10 min) │ │ │ └──────────────────────────┬───────────────────────────────┘ │ │ │ │ │ ┌──────────────────────────▼───────────────────────────────┐ │ │ │ RSS Feed Node (Fetch Latest) │ │ │ └──────────────────────────┬───────────────────────────────┘ │ │ │ │ │ ┌──────────────────────────▼───────────────────────────────┐ │ │ │ Hash Check (Duplicate Prevention) │ │ │ └──────────────────────────┬───────────────────────────────┘ │ │ │ │ │ ┌──────────────────────────▼───────────────────────────────┐ │ │ │ Ollama Node (Gemma LLM) │ │ │ │ • Summarize (platform char limits) │ │ │ │ • Generate hashtags │ │ │ └──────────────────────────┬───────────────────────────────┘ │ │ │ │ │ ┌──────────────────────────▼───────────────────────────────┐ │ │ │ Image Extraction & Processing │ │ │ │ • HTML parsing │ │ │ │ • Download & resize │ │ │ └──────────────────────────┬───────────────────────────────┘ │ │ │ │ │ ┌──────────────────────────▼───────────────────────────────┐ │ │ │ Postiz API │ │ │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ │ │ │Facebook │ │LinkedIn │ │ X │ │Instagram│ │ │ │ │ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │ │ │ └──────────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────────┘ What Was Harder Than Expected Getting the LLM to respect character limits was the recurring headache. X needs 280 characters, LinkedIn gets more room. The prompt engineering for consistent output length took more iteration than the actual workflow logic.
...