This content originally appeared on DEV Community and was authored by
The automation itch every dev gets
I didn’t plan to automate my life. It started with a single annoying task copying Twitter DMs into Notion. Felt dumb. Repetitive. Manual. It was the kind of thing a script should do while I eat noodles and pretend I’m productive.
Fast-forward a weekend and I had an entire AI-powered workflow stack:
- n8n doing the orchestration,
- Docker keeping it sandboxed,
- And an AI agent layer quietly making decisions while I slept.
What started as a minor itch turned into a full-blown lazy-dev automation rig. Here’s exactly how I did it, the tools I used, the screw-ups I ran into, and why every dev should automate at least one annoying task in their life.
Covered in this article:
- What the heck is n8n and why devs should care
- How Docker makes automation way less painful
- AI agents in the mix: meet MCP
- My actual setup: Twitter → Notion → Slack (and beyond)
- Dev mistakes, gotchas, and facepalms
- Final thoughts: automate one thing, thank yourself later
- Resources and links I wish someone gave me
What the heck is n8n and why devs should care
n8n (pronounced “n-eight-n”) is what happens when you take Zapier or Make.com and give it an actual terminal and a beard.
It’s open source. It runs locally or in the cloud. And it lets you build workflows real ones like:
- “When I get an email, summarize it with GPT-4, push it to Notion, then ping me on Discord.”
- “Scrape a page hourly, diff the content, tweet if there’s a change.”
- “Take that spreadsheet, and auto-generate 10 blog drafts with AI.”
If you’ve ever strung together curl, cron, and duct tape, n8n is like a visual upgrade. You still get JSON and logic branches, but without rewriting the same webhook 10 times.
And for devs?
Unlike no-code tools, n8n doesn’t punish you for being technical. It welcomes custom functions, HTTP requests, and JS snippets. You get a slick GUI and raw control when you need it.
It also has over 400+ integrations, from GitHub to OpenAI to Telegram and Postgres. You can even throw in raw code when a node isn’t enough. Basically: if it has an API, you can plug it in.
How Docker makes automation way less painful
Running n8n locally is fine… until it isn’t.
You start with a quick npm install
, get a few flows running, and then one day you reboot your machine and everything breaks. Environment variables are missing, your n8n version updated, and somehow your credentials are now ghosts.
That’s when Docker steps in.
Docker lets you lock your n8n setup into a neat little box. No dependency hell. No “it worked on my machine” drama. Just one docker-compose up -d
, and boom you’ve got:
- Persistent data storage
- Stable versioning
- Easy environment configs
- Portable deployments (run it on a cloud VPS, Raspberry Pi, wherever)
Here’s a super minimal docker-compose.yml
that gets n8n running in like 3 minutes:
version: '3'
services:
n8n:
image: n8nio/n8n
ports:
- "5678:5678"
volumes:
- ./n8n_data:/home/node/.n8n
environment:
- N8N_BASIC_AUTH_USER=admin
- N8N_BASIC_AUTH_PASSWORD=supersecure
You can get fancier later use Postgres, custom domains, TLS, etc. but this setup alone saved me from config chaos more than once.
Docker basically makes n8n boring, in the best way. It just runs. Every time.
AI agents in the mix: meet MCP
Once I had n8n running like clockwork in Docker, I hit a wall:
n8n is great at moving data, but it’s dumb about context.
I wanted workflows that could make decisions like “summarize this message if it’s long,” or “don’t notify me unless it’s actually interesting.”
Enter: MCP, aka Micro Control Panel, aka my AI sidekick.
MCP is basically a lightweight AI decision layer that plugs into n8n. It’s not a product just something I built using:
- OpenAI’s API (you can use Claude or local models too)
- A custom webhook that n8n calls mid-workflow
- Logic prompts to decide what happens next
Think of it as:
- Step 1: n8n collects data (a tweet, email, webhook, whatever)
- Step 2: n8n sends that data to MCP (via HTTP Request node)
- Step 3: MCP hits GPT with a prompt like “Is this worth notifying me about?”
- Step 4: GPT replies “Nah, it’s junk” or “Yep, this is spicy”
- Step 5: n8n routes the workflow based on the AI’s answer
It’s dead simple to wire up, and now my flows feel way smarter. One of my setups:
Twitter DM → GPT summary via MCP → Add to Notion database → Slack ping
…and it all happens without me lifting a finger.
Want to make AI useful? Don’t overthink it. Just make it answer the boring questions you’re tired of answering.
Press enter or click to view image in full size
My actual setup: Twitter → Notion → Slack (and beyond)
Let’s break down the workflow I actually use every day no theory, just vibes and JSON.
The problem
I get a lot of Twitter DMs. Some are legit ideas or feedback. Some are just noise. I wanted to:
- Auto-check if a DM is useful
- Summarize the message
- Log it in Notion
- Get a Slack ping only if it’s important
The stack
Here’s what I used:
- n8n (orchestration and glue)
- Docker (makes it repeatable)
- OpenAI API (summarization and decision logic)
- Notion API (for storage)
- Slack webhook (for notifications)
- MCP (custom webhook) for GPT logic
The flow
- Trigger: New DM received via n8n’s Twitter node (or a custom API scraper if the Twitter API is being weird that week)
- HTTP Request: Send the DM content to my MCP webhook
- AI Response: GPT returns:
- A short summary of the message
- A tag:
important
orignore
4. Branch logic:
- If
important
: → Create a new page in Notion → Send a Slack message with the summary - If
ignore
: → Skip the rest, log quietly
Bonus
Sometimes I extend this with extras:
- Add labels in Gmail
- Generate a task in Todoist
- Archive stuff to Airtable for analytics later
This whole pipeline took maybe 2 hours to build, test, and Dockerize. Now it just hums in the background while I work, game, or scroll through more distractions.
Press enter or click to view image in full size
Dev mistakes, gotchas, and facepalms
JSON parsing hell
The AI responses were fine until they weren’t.
Sometimes GPT would return something like:
"Yep, this looks useful! Summary: Here's what they said..."
Not valid JSON.
I had to force structured output by wrapping my prompt like this:
“Reply in only this exact JSON format:
{ "summary": "...", "tag": "important" }
”
Even then, I still ran the response through try/catch
and a fallback node, because GPT sometimes just vibes too hard.
Infinite loops are real
One time, a Notion update triggered a webhook, which triggered n8n, which triggered Notion, which… yeah.
Moral: add condition nodes. Sanity check your triggers and don’t let them eat themselves alive.
Rate limits sneak up
Slack didn’t like getting hit with 30 messages in 3 seconds.
Nor did OpenAI, when I forgot to debounce requests.
I ended up adding delays, batching, and proper retry logic using n8n’s built-in error workflow support. Bonus: I felt like an actual backend engineer for once.
Over-automating is tempting
At one point I had a flow that auto-replied to tweets with GPT-generated responses. It worked until one sounded sarcastic and someone DM’d me “is this you or a bot?”
I pulled the plug.
Final thoughts: automate one thing, thank yourself later
You don’t need a full AI pipeline to start automating. Just pick one annoying task.
That thing you do every morning with 7 clicks? Automate it.
That boring Slack message you always type? Automate it.
Start small.
Mine was “copy Twitter DMs to Notion.” That one script snowballed into an AI-enhanced dev stack I now depend on.
And the best part?
Once it works, it’s satisfying. Like seeing your code compile with zero warnings.
Like beating Elden Ring’s final boss without flinching.
Like eating cold pizza and realizing you don’t have to check your email anymore because a bot did it for you.
Essential resources
- n8n (open-source workflow automation) https://n8n.io
- Docker (to containerize your setup) https://www.docker.com
- OpenAI API (for GPT summaries/decisions) https://platform.openai.com
- Notion API (to store your automated notes) https://developers.notion.com
- n8n Docker quickstart guide https://docs.n8n.io/hosting/docker

This content originally appeared on DEV Community and was authored by