◆ Case Study · Marketing OS

One Brief In, Full-Funnel Campaign Out — Across 6 Channels, 3 Languages, Zero Ad Spend

GAEL is a self-hosted marketing operating system. Feed it a campaign brief and it generates, adapts, schedules, publishes, captures leads, and nurtures them — with n8n orchestrating DeepSeek, Listmonk, Mautic, Chatwoot and Umami on a single VM. No Zapier, no Make, no Mailchimp, no HubSpot.

6
Channels Orchestrated
20+
n8n Workflows
3
Languages
Unlimited
Email Capacity
$0
Ad Spend
Production deployment
Running in production for a multilingual content brand
The 4 Campaign Templates
TemplateDurationCadenceUse Case
Product Launch 14 days Teaser → Reveal → Social proof → Urgency New product, feature release, course drop
Evergreen Continuous 3 pins/day, 1 post/day, 2 tweets/day, weekly newsletter Always-on traffic to landing pages
Flash Sale 24–72 h All channels, posts every 2–4 h, email blast + reminder Promo, last-call, inventory clearance
Lead Magnet Continuous Free value → landing → auto-delivery → nurture Ebook, checklist, webinar opt-in
New campaign types can be added as n8n sub-workflows in hours. The brief schema, content engine and distribution hub stay the same — only the cadence template changes.
Tech Stack

Orchestration

n8n20+ workflows
PostgreSQLcontent queue + CRM
Redisrate limits + cache
Telegram botops + alerts

Content + AI

DeepSeekcopy + chat AI
GPT Imagevisuals
Leon (Remotion)video render API
Google TTSvoiceover

Capture + Nurture

Mauticlanding pages + forms
Listmonkemail (36 lists)
Chatwootomnichannel inbox
Umamianalytics + funnels
System Architecture

GAEL is structured as a 6-layer pipeline. Every layer is self-hosted on a single Oracle Cloud ARM VM, orchestrated by n8n workflows, and state lives in PostgreSQL. No external SaaS dependencies for the core pipeline — only the channel APIs themselves.

Layer 1 · Input
Campaign brief webhook · scheduled triggers · Telegram commands
Layer 2 · Content Engine (n8n)
Campaign Router → DeepSeek text gen · GPT Image visuals · Leon video render · Mautic page gen
Layer 3 · Distribution Hub
Postgres content_queue → hourly publisher → Pinterest · Facebook · Twitter/X · Instagram · TikTok · Listmonk
Layer 4 · Capture (Mautic)
Landing pages per campaign · forms with UTM tracking · lead scoring by engagement
Layer 5 · Nurture
Listmonk drip campaigns (36 segmented lists) · Chatwoot omnichannel inbox with AI agent
Layer 6 · Intelligence
Umami funnels · engagement scoring · A/B test feedback loop → back into Layer 1
Core n8n Workflows
WorkflowTriggerWhat it does
campaign-launcherWebhook / manualReceives brief, decides channels, kicks off content generation, starts email sequence
content-generatorCalled by launcherDeepSeek prompt chain adapts copy per channel (length, tone, hashtags)
multi-publisherCron hourlyPulls from content_queue, publishes to the right API, marks published
lead-processorMautic webhookUTM attribution, Listmonk list assignment, nurture kickoff, Chatwoot contact creation
chatwoot-ai-agentChatwoot webhookDetects language, loads context, DeepSeek reply, escalates hot leads to Telegram
analytics-loopCron nightlyUmami event rollup, DeepSeek scoring, drafts new content ideas, notifies via Telegram
Content Queue Schema
ColumnTypePurpose
campaign_idVARCHARLinks every post back to the originating brief
platformVARCHARpinterest / facebook / twitter / instagram / tiktok / email
contentJSONBPlatform-specific payload (copy, hashtags, media URLs)
scheduled_atTIMESTAMPWhen the publisher should fire
statusVARCHARpending / published / failed — drives retry logic
responseJSONBRaw API response for audit + debugging
Adding a new channel is a matter of implementing one n8n HTTP node against the platform API and inserting rows into content_queue with the new platform value. The publisher does the rest.
Engineering Challenges Solved

📌 Pinterest Board ID Precision Loss

Pinterest Board IDs exceed Number.MAX_SAFE_INTEGER (>1018). Any dynamic JS computation silently produces wrong IDs and posts land on the wrong board.

Solution: Static string mapping in the publisher workflow instead of dynamic computation. Discovered after hours debugging "wrong board" errors — the kind of edge case you only catch in production.

🌐 Native Multilingual Copy (Not Translation)

Machine-translated marketing copy sounds robotic and kills engagement. But generating content 3× multiplies LLM cost and drift.

Solution: Single DeepSeek prompt with language-specific "voice" variables. Scripts are written natively in ES/EN/PT from the same brief, not translated. Cost stays flat, quality stays high.

⏱️ Rate Limits Across 6 Channels

Every platform has different rate limits: Twitter 1500/mo, Listmonk 300/day, Pinterest polite backoff, Facebook burst limits.

Solution: Centralized content_queue with per-platform scheduling windows. Redis tracks burst counters. Publisher respects platform caps and defers overflow to the next window automatically.

🔑 Instagram Meta Business Lockout

Meta restricted API access mid-project, killing direct publishing. A hard blocker for most stacks.

Solution: Pivoted Instagram to Chatwoot as the inbox layer, which preserves DM conversations and the AI chat agent. Publishing stays manual for IG, but capture + nurture kept working — loss contained.

📦 State Consistency Across 20+ Workflows

n8n workflows run independently. A lead can trigger lead-processor before chatwoot-ai-agent finishes writing the contact.

Solution: PostgreSQL is the single source of truth. Every workflow reads/writes through explicit upserts with conflict resolution. No in-workflow state, no race conditions.

🔊 AI Chat Without Hallucination

Letting a raw LLM answer lead DMs is a legal and brand risk. But scripted bots feel dead.

Solution: DeepSeek gets strict system prompt + contact context from Postgres + product catalog as retrieval. Hot leads detected by intent scoring are always routed to a human via Telegram before any commitment.
💡 This entire marketing OS pattern ports to any vertical. Change the brief schema, swap the language mix, point to different channel APIs — the orchestration layer stays the same.
Results & Metrics
6
Channels
orchestrated
20+
n8n workflows
in production
Pins ready
+ dynamic gen
$0
Ad spend
CAC organic
Automation Coverage

Publishing Cadence

Pinterest3 pins/day/lang
Facebook1-3 posts/day
Twitter/X2-5 tweets/day (1500/mo cap)
Email (Listmonk)multi-list drip campaigns
Video (via Leon)3/day multi-platform

SaaS Replaced

Zapier / Make→ n8n
Mailchimp / SendGrid→ Listmonk
HubSpot / ActiveCampaign→ Mautic
Intercom / Drift→ Chatwoot
Google Analytics→ Umami
Monthly SaaS saved~$400+/mo
Deliverables
  • 🤖
    20+ n8n WorkflowsCampaign launcher, content generator, multi-publisher, lead processor, chat AI agent, intelligence monitor
  • 📦
    Content Queue SchemaPostgreSQL source of truth for every scheduled post, across every platform, with full audit trail
  • 📧
    Trilingual Email SystemListmonk (36 lists) + Mautic (9 campaigns, 15 emails, lead scoring) — all natively in ES/EN/PT
  • 💬
    Omnichannel Chat AgentChatwoot inbox with DeepSeek AI agent, language auto-detect, hot-lead escalation to Telegram
  • 📈
    Intelligence + AnalyticsUmami funnels + engagement scoring + A/B test feedback loop back into campaign planning
  • 📚
    Operations RunbookTelegram command interface (/campaign, /stats, /queue, /lead) and full docs for handover
Technology Tags
n8n PostgreSQL Redis DeepSeek GPT Image Listmonk Mautic Chatwoot Umami Pinterest API Facebook Graph API Twitter API TikTok API Telegram Bot Docker Oracle Cloud Multilingual Lead Scoring Self-Hosted

Need a Marketing OS That Runs Itself?

I build self-hosted, full-funnel marketing systems — from campaign brief to publish to capture to nurture. One VM, one codebase, zero SaaS lock-in.

💬 Hire Me on Contra ← Back to portfolio
What I Build

Voice AI Agents

Inbound receptionistsAny language
Outbound sales agentsCold + warm
Appointment bookingReal-time CRM
Emergency routingLive transfer

Content Automation

AI content generationMultilingual
Blog & social publishingMulti-platform
Email drip campaignsFull funnel
Trend intelligenceAutomated

Video Production

AI script writingNative multilingual
AI image generationGPT Image
TTS voiceoverWaveNet voices
Remotion renderCustom templates

Infrastructure

N8N workflowsSelf-hosted
PostgreSQL + RedisProduction-grade
Monitoring & alerts24/7
DocumentationRunbooks + guides
Based in Honduras (UTC-6). Available for async collaboration across all timezones. Fluent in English, Spanish, and French.