<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Akın Coşkun</title>
    <description>The latest articles on DEV Community by Akın Coşkun (@akincskn).</description>
    <link>https://dev.to/akincskn</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3819862%2Fa28d11d8-e320-484d-9c50-b1d94016f2c0.jpeg</url>
      <title>DEV Community: Akın Coşkun</title>
      <link>https://dev.to/akincskn</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/akincskn"/>
    <language>en</language>
    <item>
      <title>How I Built an AI SDR Agent That Finds Leads and Writes Personalized Cold Emails</title>
      <dc:creator>Akın Coşkun</dc:creator>
      <pubDate>Sat, 21 Mar 2026 14:42:59 +0000</pubDate>
      <link>https://dev.to/akincskn/how-i-built-an-ai-sdr-agent-that-finds-leads-and-writes-personalized-cold-emails-fb7</link>
      <guid>https://dev.to/akincskn/how-i-built-an-ai-sdr-agent-that-finds-leads-and-writes-personalized-cold-emails-fb7</guid>
      <description>&lt;p&gt;TL;DR&lt;br&gt;
I built LeadPilot — an AI-powered Sales Development Representative that automates lead discovery, company research, pain point analysis, and personalized cold email generation. A 4-agent AI pipeline does in 5 minutes what takes a human SDR 4+ hours. Here's how it works and what I learned building it.&lt;/p&gt;

&lt;p&gt;What is an AI SDR Agent?&lt;br&gt;
An SDR (Sales Development Representative) is the person who finds potential customers, researches them, and sends the first outreach message. It's the starting point of every sales pipeline.&lt;br&gt;
An AI SDR agent automates this entire process. Instead of manually searching LinkedIn, reading company websites, and writing individual emails, AI does it all — faster, more consistently, and at scale.&lt;br&gt;
LeadPilot handles 4 steps that would normally take hours:&lt;/p&gt;

&lt;p&gt;Find leads matching your target criteria&lt;br&gt;
Research each company by analyzing their website&lt;br&gt;
Identify pain points relevant to your offering&lt;br&gt;
Write personalized emails — not templates, genuinely personalized to each company&lt;/p&gt;

&lt;p&gt;Why I Built This&lt;br&gt;
I'm a freelancer. I need clients. The traditional approach — browsing job boards, sending generic proposals — is slow and competitive. Cold outreach works better, but it's time-consuming to do well.&lt;br&gt;
I wanted a tool where I could say "Find SaaS companies with 10-50 employees that might need automation" and get back a list of companies with ready-to-send emails. So I built one.&lt;/p&gt;

&lt;p&gt;The 4-Agent Architecture&lt;br&gt;
LeadPilot uses a sequential AI pipeline. Each agent has a specific job, and the output of one feeds into the next.&lt;br&gt;
Agent #1: Lead Finder&lt;br&gt;
The user provides: target sector, company size, location, and their product/service. The Lead Finder uses Serper.dev (Google Search API) to find matching companies. It runs multiple search queries in parallel to cast a wide net, then AI extracts structured company data from the search results.&lt;br&gt;
Input: "SaaS companies, 10-50 employees, US, N8N automation setup"&lt;br&gt;
Output: List of 10 companies with names, websites, and descriptions.&lt;br&gt;
Agent #2: Company Researcher&lt;br&gt;
For each lead, this agent fetches the company's website using Cheerio (server-side HTML parsing) and extracts: what they do, their products, about page content, team information, and any public contact details.&lt;br&gt;
This is where personalization starts. The researcher doesn't just grab the company name — it understands their business, their tech stack, their recent activity.&lt;br&gt;
Agent #3: Pain Point Analyzer&lt;br&gt;
This is the strategic brain. It takes the company profile and the user's product/service, then identifies specific pain points this company likely has. It also generates a match score (0-100) and the best "angle" for outreach.&lt;br&gt;
For example: "This company uses Shopify but handles order notifications manually. Your N8N automation could save them 15+ hours/week on order processing workflows. Match score: 82."&lt;br&gt;
Agent #4: Email Composer&lt;br&gt;
The final agent writes a 3-email sequence for each lead:&lt;/p&gt;

&lt;p&gt;Email 1 (Day 0): First touch. Opens with something specific about their company. States the problem. Offers the solution. Clear call-to-action.&lt;br&gt;
Email 2 (Day 3): Follow-up. Different angle, social proof or case study reference.&lt;br&gt;
Email 3 (Day 7): Last attempt. Short, direct, final compelling reason.&lt;/p&gt;

&lt;p&gt;Every email is under 150 words. No corporate jargon. No "I hope this email finds you well." Each one references specific details about the company — because the previous agents already did the research.&lt;/p&gt;

&lt;p&gt;The Tech Stack (Zero Cost)&lt;br&gt;
LayerTechnologyCostFrontend + BackendNext.js 14 + Tailwind + shadcn/ui$0AI (Primary)Groq Llama 3.3 70B$0AI (Fallback)Google Gemini 2.0 Flash$0SearchSerper.dev (2,500 free searches/month)$0HTML ParsingCheerio$0AuthNextAuth.js v5$0DatabaseNeon PostgreSQL + Prisma$0DeployVercel$0&lt;br&gt;
Total: $0/month.&lt;/p&gt;

&lt;p&gt;Technical Challenges I Solved&lt;br&gt;
Challenge 1: Long-Running Pipeline&lt;br&gt;
A 10-lead campaign takes 3-5 minutes. You can't keep an HTTP connection open that long. My solution: fire-and-forget pattern. The API starts the pipeline in the background, immediately returns a campaign ID. The frontend polls /api/campaign/[id]/status every 2 seconds to get progress updates.&lt;br&gt;
The user sees: "Finding leads... (3/10 found)" → "Researching companies... (5/10)" → "Composing emails... (9/10)" → "Complete!"&lt;br&gt;
Challenge 2: AI Returning Invalid JSON&lt;br&gt;
AI models sometimes return markdown-wrapped JSON, add explanations, or produce malformed structures. My solution: strict prompt instructions ("Respond ONLY with valid JSON"), JSON parse with try/catch, one retry with the same model, then fallback to the secondary model. If both fail, the lead is marked with an error but the pipeline continues.&lt;br&gt;
Challenge 3: Website Scraping Reliability&lt;br&gt;
Not every website plays nice. Some block scrapers (403), some redirect infinitely, some are entirely JavaScript-rendered (invisible to Cheerio). My solution: 10-second timeout on all fetches, User-Agent header to avoid blocks, graceful degradation (if scraping fails, the AI works with whatever the search result provided).&lt;br&gt;
Challenge 4: Prompt Injection&lt;br&gt;
Users enter free text (sector, product description, value proposition) that gets injected into AI prompts. A malicious user could try to manipulate the AI's behavior. My solution: input sanitization that strips control characters and potential injection patterns before they reach the prompt.&lt;br&gt;
Challenge 5: SSRF Protection&lt;br&gt;
The scraper fetches URLs from search results. Without protection, an attacker could trick it into fetching internal network resources. My solution: URL validation that blocks localhost, private IP ranges, and non-HTTP protocols before any fetch request.&lt;/p&gt;

&lt;p&gt;What Makes Good Cold Emails&lt;br&gt;
Building the Email Composer agent taught me a lot about cold outreach:&lt;br&gt;
Personalization is everything. "I noticed your company uses Shopify" beats "Dear business owner" by 10x. The research agents exist specifically to feed the email agent with personalization material.&lt;br&gt;
Shorter is better. Every email is capped at 150 words. Busy people don't read essays from strangers.&lt;br&gt;
One CTA per email. "Would you be open to a 15-minute call?" — not "check our website, read our blog, follow us on LinkedIn, and also here's a PDF."&lt;br&gt;
The 3-email sequence matters. Most responses come from email 2 or 3, not email 1. Persistence (without being annoying) is key. Day 0, Day 3, Day 7 is the sweet spot.&lt;/p&gt;

&lt;p&gt;Real Output Example&lt;br&gt;
Campaign: "Find marketing agencies in the US that need AI automation"&lt;br&gt;
Lead: Bright Spark Digital (fictional example)&lt;br&gt;
Email 1 — Day 0:&lt;br&gt;
Subject: "Quick question about your client reporting"&lt;br&gt;
"Hi Sarah, I noticed Bright Spark Digital manages campaigns across Google Ads and Meta for multiple clients. Reporting across platforms usually eats up 5-10 hours per week for agencies your size. I build custom AI automation workflows that pull data from all ad platforms into unified dashboards — automatically. Would you be open to a quick 15-minute chat about how this could work for your team?"&lt;br&gt;
Email 2 — Day 3:&lt;br&gt;
Subject: "Re: your client reporting"&lt;br&gt;
"Hi Sarah, following up on my previous note. I recently helped a similar-sized agency reduce their weekly reporting time from 8 hours to 20 minutes using N8N automation. Happy to share exactly what we built. Worth a quick conversation?"&lt;br&gt;
Email 3 — Day 7:&lt;br&gt;
Subject: "Last note"&lt;br&gt;
"Hi Sarah, I know you're busy. One quick question: if you could automate one repetitive task in your agency, what would it be? I might already have a solution built. Either way, no hard feelings — just wanted to make sure this didn't slip through the cracks."&lt;/p&gt;

&lt;p&gt;Try It&lt;/p&gt;

&lt;p&gt;Live app: leadpilot-ashy.vercel.app&lt;br&gt;
Source code: github.com/akincskn/leadpilot&lt;/p&gt;

&lt;p&gt;Create a campaign, define your target market, and get personalized leads with email sequences in minutes.&lt;/p&gt;

&lt;p&gt;What's Next&lt;br&gt;
LeadPilot is part of a larger ecosystem of AI tools I'm building. If you're interested in AI automation, SDR tooling, or building SaaS with zero-cost infrastructure, follow me for more.&lt;br&gt;
Other tools in the ecosystem:&lt;/p&gt;

&lt;p&gt;RivalRadar — AI competitor analysis&lt;br&gt;
GEO Analyzer — AI search optimization scoring&lt;br&gt;
Portfolio MCP Server — Query my portfolio via AI assistants&lt;/p&gt;

&lt;p&gt;I'm Akın Coşkun, a full-stack developer and AI automation specialist from Turkey. I build production SaaS applications with zero-cost infrastructure. Find me on GitHub or check my portfolio.&lt;/p&gt;

</description>
      <category>sass</category>
      <category>webdev</category>
      <category>ai</category>
      <category>programming</category>
    </item>
    <item>
      <title>I Analyzed My Portfolio with AI and Scored 53/100 — Here's How I Fixed It to 85+</title>
      <dc:creator>Akın Coşkun</dc:creator>
      <pubDate>Sat, 21 Mar 2026 14:40:45 +0000</pubDate>
      <link>https://dev.to/akincskn/i-analyzed-my-portfolio-with-ai-and-scored-53100-heres-how-i-fixed-it-to-85-1ccj</link>
      <guid>https://dev.to/akincskn/i-analyzed-my-portfolio-with-ai-and-scored-53100-heres-how-i-fixed-it-to-85-1ccj</guid>
      <description>&lt;p&gt;TL;DR&lt;br&gt;
I built a GEO (Generative Engine Optimization) analyzer tool, tested it on my own portfolio site, and scored a disappointing 53/100. Then I systematically fixed every issue it found. Here's the exact process, what I changed, and why it matters for anyone who wants their content to appear in ChatGPT, Perplexity, and Google AI Overviews.&lt;/p&gt;

&lt;p&gt;What is GEO and Why Should You Care?&lt;br&gt;
Generative Engine Optimization is the practice of structuring your content so AI search engines can find, understand, and cite it. Traditional SEO gets you ranked on Google. GEO gets you mentioned in AI-generated answers.&lt;br&gt;
This matters because the way people search is changing fast. Instead of clicking through 10 blue links, users are asking ChatGPT "What's the best competitor analysis tool?" or asking Perplexity "How do I automate cold outreach?" If your content isn't optimized for these AI engines, you're invisible to a growing segment of your audience.&lt;/p&gt;

&lt;p&gt;The Tool I Built&lt;br&gt;
GEO Analyzer evaluates any web page across 5 categories, each scored out of 20 points for a total of 100:&lt;/p&gt;

&lt;p&gt;Content Structure — H1 tags, heading hierarchy, question-based H2s, internal links&lt;br&gt;
E-E-A-T Signals — Author info, dates, citations, statistics, trust indicators&lt;br&gt;
Technical AI Readiness — Meta tags, schema markup, Open Graph, canonical URLs, AI crawler access&lt;br&gt;
Content Quality — Value, clarity, flow, Q&amp;amp;A format, originality (AI-evaluated)&lt;br&gt;
AI Search Optimization — Snippable content, FAQ structure, definitions, lists, topic focus (AI-evaluated)&lt;/p&gt;

&lt;p&gt;The first three categories are analyzed programmatically using Cheerio for HTML parsing. The last two use Groq's Llama 3.3 model for AI-powered evaluation, with Gemini as a fallback.&lt;/p&gt;

&lt;p&gt;My Score: 53/100 (Grade: F)&lt;br&gt;
Here's what the analyzer found on my portfolio site:&lt;br&gt;
CategoryScoreIssuesContent Structure6/20No H1 tag, no question-based H2s, only 1 internal linkE-E-A-T Signals13/20No publication date, no statisticsTechnical AI Readiness13/20No schema markup, no canonical URLContent Quality13/20Low Q&amp;amp;A format, weak flowAI Search Optimization8/20No snippable content, no FAQ, no definitions&lt;br&gt;
The biggest problems were clear: no schema markup (AI crawlers couldn't understand my site's structure), no question-based headings (AI engines love Q&amp;amp;A format), and no "snippable" content (short, quotable sentences AI can cite directly).&lt;/p&gt;

&lt;p&gt;The Fixes (53 → 85+)&lt;br&gt;
Fix 1: Schema Markup (0 → 5 points)&lt;br&gt;
I added JSON-LD structured data to my site. This tells AI crawlers exactly who I am and what I do:&lt;br&gt;
A Person schema with my name, job title, skills, and social links. Plus a FAQPage schema for common questions. AI engines parse this structured data directly — it's like handing them a summary card instead of making them read your entire page.&lt;br&gt;
Fix 2: Single H1 + Question-Based H2s (0 → 10 points)&lt;br&gt;
Changed my heading structure. One clear H1 at the top. H2s reformatted as questions: "What Technologies Do I Work With?", "What Problems Do I Solve?", "How Can I Help Your Business?"&lt;br&gt;
AI engines are trained on billions of question-answer pairs. When your heading is a question and the content below answers it, you're speaking their language.&lt;br&gt;
Fix 3: Snippable Content (0 → 5 points)&lt;br&gt;
Added short, definitive sentences that AI can quote directly. For example: "Akın Coşkun is a full-stack developer specializing in AI-powered automation, N8N workflows, and zero-cost SaaS development."&lt;br&gt;
This sentence is designed to be the answer when someone asks an AI "Who is Akın Coşkun?" or "Who builds N8N automations?"&lt;br&gt;
Fix 4: FAQ Section with Schema (0 → 4 points)&lt;br&gt;
Added a dedicated FAQ section with 5 common questions, each with a concise answer. Backed by FAQPage schema markup so AI engines can extract Q&amp;amp;A pairs directly.&lt;br&gt;
Fix 5: Statistics and Data (0 → 4 points)&lt;br&gt;
Added concrete numbers: "10+ production projects", "$0/month infrastructure cost", "1 published npm package", "4 professional certifications." AI engines love citing specific statistics.&lt;br&gt;
Fix 6: Internal Linking (1 → 4 links)&lt;br&gt;
Connected everything: project cards link to blog posts, blog section links to projects, FAQ links to relevant pages. AI crawlers follow internal links to build a complete picture of your site.&lt;br&gt;
Fix 7: Canonical URL + robots.txt&lt;br&gt;
Added canonical URL to prevent duplicate content issues. Updated robots.txt to explicitly allow AI crawlers (GPTBot, ClaudeBot, PerplexityBot).&lt;/p&gt;

&lt;p&gt;What I Learned About GEO&lt;br&gt;
After going through this process, here are the key takeaways:&lt;br&gt;
Schema markup is non-negotiable. It's the single most impactful thing you can add for AI visibility. Person, FAQPage, SoftwareApplication — these schemas give AI engines structured data they can parse instantly.&lt;br&gt;
Question-based headings work. AI engines are fundamentally Q&amp;amp;A machines. Format your content as questions and answers, and you're aligning with how they process information.&lt;br&gt;
Snippable sentences are your AI elevator pitch. Write 1-2 sentences per section that could stand alone as an AI-generated answer. Clear, definitive, factual.&lt;br&gt;
Traditional SEO still matters. AI engines often use Google search results as their source. If you rank well on Google, you're more likely to be cited by ChatGPT and Perplexity.&lt;br&gt;
E-E-A-T is universal. Whether it's Google's algorithm or an LLM deciding which source to cite, expertise, experience, authoritativeness, and trust are what get you chosen.&lt;/p&gt;

&lt;p&gt;Try GEO Analyzer Yourself&lt;br&gt;
Enter any URL and get your GEO score with specific recommendations:&lt;/p&gt;

&lt;p&gt;Live app: geo-analyzer-sepia.vercel.app&lt;br&gt;
Source code: github.com/akincskn/geo-analyzer&lt;/p&gt;

&lt;p&gt;What's Next&lt;br&gt;
GEO is still a new field. Most websites score below 50/100 because nobody's optimizing for AI search yet. The developers and marketers who start now will have a massive advantage as AI search becomes the default.&lt;br&gt;
I'm continuing to build tools in this space. If you're interested in GEO/AEO, AI automation, or zero-cost SaaS development, follow me for more.&lt;/p&gt;

&lt;p&gt;I'm Akın Coşkun, a full-stack developer and AI automation specialist. I build tools like RivalRadar (AI competitor analysis), GEO Analyzer (AI search optimization), and LeadPilot (AI SDR agent). Find me on GitHub or check my portfolio.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>ai</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>N8N for AI Automation: How I Built Multi-Agent Workflows That Actually Work</title>
      <dc:creator>Akın Coşkun</dc:creator>
      <pubDate>Thu, 19 Mar 2026 19:25:41 +0000</pubDate>
      <link>https://dev.to/akincskn/n8n-for-ai-automation-how-i-built-multi-agent-workflows-that-actually-work-3l5e</link>
      <guid>https://dev.to/akincskn/n8n-for-ai-automation-how-i-built-multi-agent-workflows-that-actually-work-3l5e</guid>
      <description>&lt;p&gt;TL;DR&lt;br&gt;
N8N isn't just a "Zapier alternative." I use it as the backbone for AI agent orchestration — multi-step workflows where AI models analyze data, make decisions, and produce structured outputs. Here's my practical guide based on building two production applications with N8N.&lt;/p&gt;

&lt;p&gt;Why N8N Over Code?&lt;br&gt;
Let me be direct: I can write Node.js. I can build Express APIs. I could orchestrate AI agents entirely in code using LangChain or CrewAI.&lt;br&gt;
But I choose N8N for certain workflows because:&lt;br&gt;
Visual debugging is unmatched. Click any node, see exactly what data went in and came out. When an AI agent produces garbage, you can inspect the prompt, the input data, and the response in seconds. In code, you'd be adding console.logs and redeploying.&lt;br&gt;
Fallback logic is trivial. My primary AI model (Groq) sometimes hits rate limits. In N8N, I add an IF node after the AI call — if error, route to Gemini. Done. In code, this is a try/catch with retry logic, environment variables, and error classification.&lt;br&gt;
Non-linear workflows are natural. Split a list of competitors into parallel analysis paths, merge the results, then feed everything into a report generator. N8N's Split In Batches → parallel nodes → Merge pattern handles this visually.&lt;br&gt;
Changes don't require redeployment. I can update an AI agent's prompt directly in N8N's editor. No git commit, no CI/CD, no Vercel rebuild. For iterating on AI prompts, this speed matters.&lt;/p&gt;

&lt;p&gt;My N8N Architecture Pattern&lt;br&gt;
After two production projects (FormJet and RivalRadar), I've settled on this pattern:&lt;br&gt;
Next.js Frontend&lt;br&gt;
      ↓ (POST request)&lt;br&gt;
Next.js API Route&lt;br&gt;
      ↓ (auth check, validation, credit check)&lt;br&gt;
N8N Webhook&lt;br&gt;
      ↓ (workflow execution)&lt;br&gt;
AI Agent Pipeline&lt;br&gt;
      ↓ (structured JSON output)&lt;br&gt;
N8N HTTP Response&lt;br&gt;
      ↓&lt;br&gt;
Next.js API Route&lt;br&gt;
      ↓ (save to database, return to frontend)&lt;br&gt;
Frontend renders result&lt;br&gt;
The frontend never talks to N8N directly. The API route acts as a gateway — handling auth, input validation, and database operations. N8N only handles the AI orchestration part.&lt;br&gt;
This separation matters because:&lt;/p&gt;

&lt;p&gt;Auth stays in your application (not in N8N)&lt;br&gt;
Database operations use Prisma (type-safe, not N8N's generic DB nodes)&lt;br&gt;
N8N focuses on what it's best at: workflow orchestration&lt;/p&gt;

&lt;p&gt;Building an AI Agent Pipeline in N8N&lt;br&gt;
Here's the actual workflow structure from RivalRadar:&lt;br&gt;
Step 1: Webhook Trigger&lt;br&gt;
Receives company name + industry from the frontend.&lt;br&gt;
Step 2: AI Agent — Competitor Finder&lt;/p&gt;

&lt;p&gt;System prompt: "You are a competitive intelligence analyst. Given a company and industry, identify the top 5 direct competitors."&lt;br&gt;
Tools: HTTP Request node configured for web search&lt;br&gt;
Output: JSON array of competitor names&lt;/p&gt;

&lt;p&gt;Step 3: Split In Batches&lt;br&gt;
Takes the competitor array and processes each one individually. This is N8N's loop mechanism.&lt;br&gt;
Step 4: AI Agent — Company Analyzer (runs per competitor)&lt;/p&gt;

&lt;p&gt;System prompt: "Analyze this company. Return: overview, key products, pricing model, target audience."&lt;br&gt;
Tools: HTTP Request for web research&lt;br&gt;
Output: Structured company profile&lt;/p&gt;

&lt;p&gt;Step 5: Merge&lt;br&gt;
Collects all individual analyses back into a single array.&lt;br&gt;
Step 6: AI Agent — Report Generator&lt;/p&gt;

&lt;p&gt;Input: All competitor analyses + original company&lt;br&gt;
System prompt: "Generate a competitive analysis report with: SWOT analysis, pricing comparison table, market positioning, and 3-5 actionable recommendations."&lt;br&gt;
Output: Complete report JSON&lt;/p&gt;

&lt;p&gt;Step 7: HTTP Response&lt;br&gt;
Returns the report to the calling API route.&lt;/p&gt;

&lt;p&gt;Practical Tips from Production&lt;br&gt;
Tip 1: Always Force JSON Output&lt;br&gt;
In your AI agent's system prompt, add:&lt;br&gt;
IMPORTANT: Respond ONLY with valid JSON. No markdown, no explanations, no code blocks. Just pure JSON.&lt;br&gt;
Then add a JSON Parse node right after. If it fails to parse, your error handler catches it and retries.&lt;br&gt;
Tip 2: Implement Fallback Models&lt;br&gt;
[AI Agent (Groq)] → [IF: error?]&lt;br&gt;
                         ↓ Yes&lt;br&gt;
                    [AI Agent (Gemini)]&lt;br&gt;
                         ↓ No&lt;br&gt;
                    [Continue workflow]&lt;br&gt;
Rate limits are real on free tiers. Always have a backup model.&lt;br&gt;
Tip 3: Use Sub-Workflows for Reusable Agents&lt;br&gt;
If you have the same "analyze a company" agent used in multiple places, make it a sub-workflow. Call it from your main workflow with parameters. This is N8N's version of function extraction.&lt;br&gt;
Tip 4: Log Everything to Stderr&lt;br&gt;
N8N's stdout is reserved for the protocol. Use console.error() for debugging logs. This caught me off guard initially.&lt;br&gt;
Tip 5: The Webhook Path Bug&lt;br&gt;
If you're self-hosting N8N and your webhook paths aren't working, check the SQLite database. When webhookId is missing from the node data, getNodeWebhookPath() generates a compound path instead of your clean path. The fix: insert webhookId directly into the DB. The isFullPath: true flag only works when webhookId exists.&lt;/p&gt;

&lt;p&gt;N8N vs Code-Based Alternatives&lt;br&gt;
CriteriaN8NLangChain/CrewAIVisual debuggingExcellentNone (logs only)Prompt iteration speedInstant (edit in UI)Requires redeployComplex branchingVisual and intuitiveCode-basedVersion controlExport JSONGit nativeType safetyNoneFull TypeScriptTestingManual in UIUnit testableProduction monitoringBuilt-in execution logsCustom implementation&lt;br&gt;
My take: Use N8N for AI orchestration workflows where you need rapid iteration. Use code-based frameworks when you need type safety, unit testing, and tight integration with your application logic.&lt;/p&gt;

&lt;p&gt;Self-Hosting N8N for Free&lt;br&gt;
Here's my setup:&lt;/p&gt;

&lt;p&gt;Render.com — Free tier web service running N8N's Docker image&lt;br&gt;
UptimeRobot — Pings the instance every 5 minutes to prevent sleep&lt;br&gt;
SQLite — N8N's default database (sufficient for low-volume workflows)&lt;/p&gt;

&lt;p&gt;Total cost: $0/month.&lt;br&gt;
The trade-off: Render's free tier sleeps after 15 minutes of inactivity. UptimeRobot keeps it alive, but the first request after a sleep cycle takes ~30 seconds. For my use case (on-demand analysis), this is acceptable.&lt;/p&gt;

&lt;p&gt;What I'm Building Next&lt;br&gt;
I'm expanding into:&lt;/p&gt;

&lt;p&gt;CrewAI/LangChain for code-based multi-agent systems&lt;br&gt;
MCP servers for connecting AI to custom data (already published one on npm)&lt;br&gt;
GEO/AEO optimization tools for AI search visibility&lt;br&gt;
SDR automation agents for sales outreach&lt;/p&gt;

&lt;p&gt;N8N will remain my go-to for rapid prototyping and visual workflow design. But as I tackle more complex agent architectures, I'll complement it with code-based frameworks.&lt;/p&gt;

&lt;p&gt;Resources&lt;/p&gt;

&lt;p&gt;N8N Documentation&lt;br&gt;
N8N AI Agent Templates&lt;br&gt;
My project using N8N — RivalRadar&lt;br&gt;
My project using N8N — FormJet&lt;/p&gt;

&lt;p&gt;I'm Akın Coşkun, a full-stack developer specializing in AI automation and N8N workflows. Find me on GitHub or check my portfolio.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
      <category>devops</category>
    </item>
    <item>
      <title>I Published My Own MCP Server on npm — Here's Why Every Developer Should</title>
      <dc:creator>Akın Coşkun</dc:creator>
      <pubDate>Thu, 19 Mar 2026 19:25:00 +0000</pubDate>
      <link>https://dev.to/akincskn/i-published-my-own-mcp-server-on-npm-heres-why-every-developer-should-1ek5</link>
      <guid>https://dev.to/akincskn/i-published-my-own-mcp-server-on-npm-heres-why-every-developer-should-1ek5</guid>
      <description>&lt;p&gt;TL;DR&lt;br&gt;
MCP (Model Context Protocol) is becoming the standard for connecting AI models to external data. I built a personal portfolio MCP server and published it on npm. Now anyone can add my server to Claude Desktop and ask AI about my projects, skills, and experience. Here's how I built it and why this matters for your career.&lt;/p&gt;

&lt;p&gt;What is MCP?&lt;br&gt;
If you've used Claude Desktop, Cursor, or Claude Code recently, you've probably seen MCP in action. MCP is an open protocol developed by Anthropic that lets AI models talk to external tools and data sources.&lt;br&gt;
Think of it this way:&lt;/p&gt;

&lt;p&gt;REST API: Human (browser) → your server → data → human reads it&lt;br&gt;
MCP: AI model (Claude) → your server → data → AI uses it to answer questions&lt;/p&gt;

&lt;p&gt;If you know how to build an Express API, you already know 90% of what you need to build an MCP server. The concepts are identical — you define endpoints (called "tools" in MCP), handle inputs, and return responses. The only difference is the protocol.&lt;/p&gt;

&lt;p&gt;Why I Built a Portfolio MCP Server&lt;br&gt;
The idea is simple: instead of copy-pasting my project details into every AI conversation, I built a server that AI can query directly.&lt;br&gt;
When someone adds my MCP server to Claude Desktop and asks "What are Akın's projects?", Claude calls my server, gets the data, and presents it naturally.&lt;br&gt;
This is powerful for three reasons:&lt;/p&gt;

&lt;p&gt;Personal branding. Almost nobody has a personal MCP server. It immediately signals that you understand cutting-edge AI infrastructure.&lt;br&gt;
Practical demonstration. Instead of saying "I know MCP" on your resume, you can say "Here's my MCP server — install it and try it."&lt;br&gt;
It's the future. MCP is becoming the de facto standard. OpenAI is sunsetting their Assistants API in favor of MCP. Over 1,000 community-built MCP servers already exist. This ecosystem is only growing.&lt;/p&gt;

&lt;p&gt;How I Built It&lt;br&gt;
The Stack&lt;/p&gt;

&lt;p&gt;TypeScript (strict mode)&lt;br&gt;
@modelcontextprotocol/sdk (official MCP SDK)&lt;br&gt;
Zod (input validation)&lt;br&gt;
stdio transport (runs locally, no server needed)&lt;/p&gt;

&lt;p&gt;Project Structure&lt;br&gt;
akin-portfolio-mcp/&lt;br&gt;
├── src/&lt;br&gt;
│   ├── index.ts          # MCP server entry point&lt;br&gt;
│   ├── data/&lt;br&gt;
│   │   ├── about.ts      # Personal info&lt;br&gt;
│   │   ├── skills.ts     # Tech stack&lt;br&gt;
│   │   └── projects.ts   # All 8 projects&lt;br&gt;
│   ├── tools/&lt;br&gt;
│   │   ├── about.ts      # get_about, get_contact tools&lt;br&gt;
│   │   ├── skills.ts     # get_skills tool&lt;br&gt;
│   │   └── projects.ts   # get_projects, search_projects tools&lt;br&gt;
│   └── types/&lt;br&gt;
│       └── index.ts      # TypeScript interfaces&lt;br&gt;
├── package.json&lt;br&gt;
├── tsconfig.json&lt;br&gt;
└── README.md&lt;br&gt;
Defining a Tool&lt;br&gt;
Here's the core pattern. If you've ever written an Express route handler, this will look familiar:&lt;br&gt;
typescriptserver.tool(&lt;br&gt;
  "get_projects",&lt;br&gt;
  "Lists all of Akın's projects with descriptions and tech stacks",&lt;br&gt;
  async () =&amp;gt; {&lt;br&gt;
    return {&lt;br&gt;
      content: [{&lt;br&gt;
        type: "text",&lt;br&gt;
        text: JSON.stringify(projects, null, 2)&lt;br&gt;
      }]&lt;br&gt;
    };&lt;br&gt;
  }&lt;br&gt;
);&lt;br&gt;
That's it. Define a name, a description (this is what the AI reads to decide when to call your tool), and a handler function.&lt;br&gt;
For tools with parameters, you add a Zod schema:&lt;br&gt;
typescriptserver.tool(&lt;br&gt;
  "search_projects",&lt;br&gt;
  "Search projects by technology or keyword",&lt;br&gt;
  { keyword: z.string().describe("Technology or keyword to search for") },&lt;br&gt;
  async ({ keyword }) =&amp;gt; {&lt;br&gt;
    const results = projects.filter(p =&amp;gt;&lt;br&gt;
      p.stack.some(s =&amp;gt; s.toLowerCase().includes(keyword.toLowerCase())) ||&lt;br&gt;
      p.description.toLowerCase().includes(keyword.toLowerCase())&lt;br&gt;
    );&lt;br&gt;
    return {&lt;br&gt;
      content: [{&lt;br&gt;
        type: "text",&lt;br&gt;
        text: results.length &amp;gt; 0&lt;br&gt;
          ? JSON.stringify(results, null, 2)&lt;br&gt;
          : &lt;code&gt;No projects found matching "${keyword}"&lt;/code&gt;&lt;br&gt;
      }]&lt;br&gt;
    };&lt;br&gt;
  }&lt;br&gt;
);&lt;br&gt;
Publishing to npm&lt;br&gt;
The key insight: MCP servers distributed via npm can be run with npx — no installation required. Users just add this to their Claude Desktop config:&lt;br&gt;
json{&lt;br&gt;
  "mcpServers": {&lt;br&gt;
    "akin-portfolio": {&lt;br&gt;
      "command": "npx",&lt;br&gt;
      "args": ["-y", "akin-portfolio-mcp"]&lt;br&gt;
    }&lt;br&gt;
  }&lt;br&gt;
}&lt;br&gt;
To make this work, your package.json needs a bin field pointing to your compiled entry point, and you need .npmignore to exclude source files from the published package.&lt;/p&gt;

&lt;p&gt;The 7 Tools My Server Provides&lt;/p&gt;

&lt;p&gt;get_about — Personal information and bio&lt;br&gt;
get_skills — Full tech stack by category&lt;br&gt;
get_projects — All 8 projects with details&lt;br&gt;
get_project_detail — Deep dive into a specific project&lt;br&gt;
search_projects — Find projects by technology keyword&lt;br&gt;
get_contact — Contact information&lt;br&gt;
get_experience_summary — Career overview&lt;/p&gt;

&lt;p&gt;What I Learned&lt;br&gt;
MCP is easier than you think. If you can write a TypeScript function, you can build an MCP server. The SDK handles all the protocol complexity.&lt;br&gt;
Descriptions matter more than code. The tool descriptions are what the AI reads to decide when to call your tools. Poor descriptions = AI never uses your tools. Good descriptions = seamless integration.&lt;br&gt;
stdio is the simplest transport. No server deployment needed. The MCP server runs as a local process on the user's machine. npm distribution makes it effortless.&lt;br&gt;
Error handling is critical. When a user asks about a project that doesn't exist, your server should return a helpful error, not crash. I use isError: true in responses so Claude can communicate failures gracefully.&lt;/p&gt;

&lt;p&gt;Try It Yourself&lt;br&gt;
Install my server:&lt;br&gt;
bashnpx akin-portfolio-mcp&lt;br&gt;
Or add it to Claude Desktop / Claude Code:&lt;br&gt;
bashclaude mcp add akin-portfolio npx -y akin-portfolio-mcp&lt;br&gt;
Then ask: "What are Akın's projects?" or "Does Akın know N8N?"&lt;br&gt;
Source code: github.com/akincskn/akin-portfolio-mcp&lt;br&gt;
npm: npmjs.com/package/akin-portfolio-mcp&lt;/p&gt;

&lt;p&gt;You Should Build One Too&lt;br&gt;
Seriously. Here's why:&lt;/p&gt;

&lt;p&gt;It takes a weekend (mine took a day)&lt;br&gt;
It demonstrates real MCP knowledge&lt;br&gt;
It's a conversation starter in interviews and on LinkedIn&lt;br&gt;
Almost nobody has one yet — you'll stand out&lt;/p&gt;

&lt;p&gt;Start with your portfolio data. Add your projects, skills, and experience. Publish it on npm. Link it in your GitHub README. That's it — you now have an MCP server that AI assistants can use to learn about you.&lt;br&gt;
The developers who understand MCP early will have a significant advantage as this ecosystem grows. Don't wait.&lt;/p&gt;

&lt;p&gt;I'm Akın Coşkun, a full-stack developer building AI-powered tools and MCP servers. Find me on GitHub or try my MCP server: npx akin-portfolio-mcp&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>ai</category>
      <category>programming</category>
      <category>saas</category>
    </item>
    <item>
      <title>I Built 8 Production SaaS Apps with $0 Infrastructure — Here's My Playbook</title>
      <dc:creator>Akın Coşkun</dc:creator>
      <pubDate>Thu, 19 Mar 2026 19:22:18 +0000</pubDate>
      <link>https://dev.to/akincskn/i-built-8-production-saas-apps-with-0-infrastructure-heres-my-playbook-54a5</link>
      <guid>https://dev.to/akincskn/i-built-8-production-saas-apps-with-0-infrastructure-heres-my-playbook-54a5</guid>
      <description>&lt;p&gt;TL;DR&lt;br&gt;
Over the past year, I built and deployed 8 production web applications — all running on free-tier infrastructure. No credit card charges, no cloud bills, no compromises on quality. Here's every tool I use and exactly how I do it.&lt;/p&gt;

&lt;p&gt;Why Zero-Cost Matters&lt;br&gt;
I'm a self-taught developer from Turkey. I don't have VC funding or a company credit card. But I wanted to build real products — not toy projects, not tutorials, not "coming soon" landing pages. Real, deployed, working applications that solve real problems.&lt;br&gt;
The constraint of $0/month forced me to be creative. And honestly? The free tiers available in 2025-2026 are insanely generous. You can run a legitimate SaaS business without spending a cent on infrastructure.&lt;/p&gt;

&lt;p&gt;The 8 Projects&lt;br&gt;
Here's what I built, in chronological order:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;OpsFlow — Incident Management Platform
The most ambitious one. Microservice architecture with 3 separate repositories: API (Express.js + TypeORM), Frontend (React + MUI), and Notification Service (Kafka consumer + Resend).
What it taught me: Multi-tenant architecture, RBAC, JWT auth, Kafka event-driven patterns, Redis caching, invite flows. This was my "learn everything" project.&lt;/li&gt;
&lt;li&gt;KolayAidat — Apartment Dues Tracker
Built for the Turkish market. Apartment managers track dues, residents upload receipts, everyone gets email notifications.
What it taught me: Next.js App Router, Prisma, Server Components, NextAuth.js. This was my transition from Express to Next.js full-stack.&lt;/li&gt;
&lt;li&gt;Çerezmatik — Cookie Consent Generator
KVKK (Turkish GDPR) compliance tool. Generate a cookie banner, get the embed code, paste it into your site.
What it taught me: JavaScript snippet generation, embed code patterns, template engines. The "tool-based" model — users come, use it, leave.&lt;/li&gt;
&lt;li&gt;FormJet — Smart Form Builder
Create forms, embed them anywhere, get notifications via email, Telegram, or Slack. N8N handles all the automation.
What it taught me: Supabase ecosystem, N8N workflow automation, embeddable widgets.&lt;/li&gt;
&lt;li&gt;Notera — Note-Taking App
OneNote-style app with rich text editing, notebooks, tags, auto-save, and dark theme.
What it taught me: Tiptap rich text editor, real-time auto-save patterns, Supabase realtime.&lt;/li&gt;
&lt;li&gt;MockAPI — Instant Backend Generator
Enter a schema, get a full REST API. Dynamic PostgreSQL table generation with multi-tenant isolation.
What it taught me: Dynamic schema generation, raw SQL with Prisma, generic CRUD engines.&lt;/li&gt;
&lt;li&gt;RivalRadar — AI Competitor Analysis
Enter a company name, get a full SWOT analysis in 60 seconds. Multi-agent AI pipeline powered by N8N.
What it taught me: N8N AI agents, LLM orchestration, Groq, webhook workflows, fallback patterns.&lt;/li&gt;
&lt;li&gt;Portfolio MCP Server (npm package)
My latest: a Model Context Protocol server that lets AI assistants query my portfolio. Published on npm as akin-portfolio-mcp.
What it taught me: MCP protocol, npm publishing, TypeScript SDK development.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The Free-Tier Stack&lt;br&gt;
Here's my go-to toolchain and how each piece fits:&lt;br&gt;
Frontend &amp;amp; Deploy: Vercel&lt;br&gt;
Free tier gives you unlimited deploys, preview environments, and edge network. Next.js deploys in seconds. I've never needed more than the free tier.&lt;br&gt;
Database: Neon or Supabase&lt;br&gt;
Neon gives you 0.5GB PostgreSQL with 190 hours of compute. Supabase gives you PostgreSQL + Auth + Storage + Realtime (but limited to 2 free projects). I use Neon for newer projects because of the project limit.&lt;br&gt;
ORM: Prisma&lt;br&gt;
Type-safe database access, migrations, and generated types. Zero cost, obviously. The developer experience is unmatched.&lt;br&gt;
Auth: NextAuth.js v5&lt;br&gt;
Google OAuth in 20 minutes. Session management, JWT or database sessions, CSRF protection — all built in. Free forever.&lt;br&gt;
Automation: N8N (self-hosted on Render)&lt;br&gt;
This is my secret weapon. N8N handles email notifications, AI agent orchestration, webhook processing, scheduled tasks. Self-hosted on Render's free tier + UptimeRobot to prevent cold starts.&lt;br&gt;
AI: Groq (Llama 3.3) or Gemini&lt;br&gt;
Both offer generous free tiers. Groq is faster, Gemini has higher limits. I use both with fallback logic.&lt;br&gt;
Hosting (Static): Firebase Hosting&lt;br&gt;
My portfolio site runs here. Free SSL, CDN, custom domain. Simple and reliable.&lt;br&gt;
Uptime: UptimeRobot&lt;br&gt;
50 free monitors. Pings my Render services every 5 minutes to prevent sleep. Essential for free-tier hosting.&lt;/p&gt;

&lt;p&gt;The Rules I Follow&lt;br&gt;
After 8 projects, these are my non-negotiable principles:&lt;/p&gt;

&lt;p&gt;TypeScript strict mode, always. No any. Ever. It catches bugs before they reach production.&lt;br&gt;
Zod validation on every endpoint. User input is never trusted. Zod gives you runtime validation with TypeScript inference.&lt;br&gt;
Auth + authorization on every route. Not just "is the user logged in" but "can this user access this specific resource."&lt;br&gt;
Loading and error states on every page. loading.tsx and error.tsx in every route segment. Users should never see a blank screen.&lt;br&gt;
Max 200 lines per file. If a file is longer, it's doing too much. Split it.&lt;br&gt;
Conventional commits. feat:, fix:, refactor: — makes git history readable and useful.&lt;br&gt;
No TODO comments in production code. If it's not done, it's not shipped.&lt;/p&gt;

&lt;p&gt;What Zero-Cost Taught Me&lt;br&gt;
Building with constraints made me a better developer. I learned to:&lt;/p&gt;

&lt;p&gt;Evaluate trade-offs — Supabase vs Neon, NextAuth vs Supabase Auth, Groq vs OpenAI. Every decision has implications.&lt;br&gt;
Optimize for free tiers — Understanding rate limits, cold starts, and storage limits is a real skill.&lt;br&gt;
Ship fast — Without infrastructure costs, there's no financial risk in launching. Just build and deploy.&lt;br&gt;
Focus on value — When you can't buy your way out of problems, you build smarter solutions.&lt;/p&gt;

&lt;p&gt;Want to Try?&lt;br&gt;
All projects are live and open source:&lt;br&gt;
ProjectLive URLGitHubOpsFlowopsflowweb.vercel.appakincskn/opsflow-apiKolayAidatkolayaidat.vercel.appakincskn/kolayaidatÇerezmatikcerezmatik.vercel.appakincskn/cerezmatikFormJetformjet-bice.vercel.appakincskn/formjetNoteranotdefteri-virid.vercel.appakincskn/notdefteriRivalRadarrivalradar-three.vercel.appakincskn/rivalradarMCP Servernpmjs.com/package/akin-portfolio-mcpakincskn/akin-portfolio-mcp&lt;/p&gt;

&lt;p&gt;I'm Akın Coşkun, a full-stack developer from Turkey. I build production SaaS applications with zero-cost infrastructure. Currently exploring N8N automation, AI agents, MCP development, and GEO optimization. Find me on GitHub or check my portfolio.&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>automation</category>
      <category>webdev</category>
      <category>ai</category>
    </item>
    <item>
      <title>How I Built an AI-Powered Competitor Analysis Tool with N8N and Next.js — For $0/month</title>
      <dc:creator>Akın Coşkun</dc:creator>
      <pubDate>Thu, 19 Mar 2026 19:21:27 +0000</pubDate>
      <link>https://dev.to/akincskn/how-i-built-an-ai-powered-competitor-analysis-tool-with-n8n-and-nextjs-for-0month-5j3</link>
      <guid>https://dev.to/akincskn/how-i-built-an-ai-powered-competitor-analysis-tool-with-n8n-and-nextjs-for-0month-5j3</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;I built RivalRadar, an AI tool that generates full competitor analysis reports in under 60 seconds. You enter a company name and industry — it discovers competitors, runs SWOT analysis, compares pricing, and gives actionable recommendations. The entire infrastructure costs $0/month.&lt;/p&gt;

&lt;p&gt;Here's how I did it, what I learned, and why N8N is seriously underrated.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;Competitor analysis tools like Crayon, Klue, and Kompyte cost $12,000–$47,000/year. Small businesses, freelancers, and startup founders can't afford that. But everyone needs to understand their competitive landscape.&lt;/p&gt;

&lt;p&gt;I wanted to build something that gives you 80% of the value for 0% of the cost.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Architecture
&lt;/h2&gt;

&lt;p&gt;Here's how RivalRadar works under the hood:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User enters company + industry
        ↓
Next.js API Route (auth + validation)
        ↓
N8N Webhook Trigger
        ↓
AI Agent #1: Competitor Finder
   → Discovers top 5 competitors via web search
        ↓
AI Agent #2: Company Analyzer (per competitor)
   → Profile, products, pricing, target audience
        ↓
AI Agent #3: Sentiment Analyzer (per competitor)
   → Strengths, weaknesses, public perception
        ↓
AI Agent #4: Report Generator
   → SWOT analysis, pricing table, recommendations
        ↓
JSON response → Frontend renders report
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The key insight: &lt;strong&gt;N8N orchestrates everything.&lt;/strong&gt; Each AI agent is a separate node in the workflow, processing data in sequence. If one fails, the error handler catches it. If the primary AI model hits a rate limit, it falls back to a secondary model automatically.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Stack (Zero Cost)
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Technology&lt;/th&gt;
&lt;th&gt;Cost&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Frontend&lt;/td&gt;
&lt;td&gt;Next.js 14 + Tailwind + shadcn/ui&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Auth&lt;/td&gt;
&lt;td&gt;NextAuth.js v5 (Google OAuth)&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Database&lt;/td&gt;
&lt;td&gt;Neon PostgreSQL (free tier)&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ORM&lt;/td&gt;
&lt;td&gt;Prisma&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Automation&lt;/td&gt;
&lt;td&gt;N8N (self-hosted on Render)&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI Model&lt;/td&gt;
&lt;td&gt;Groq Llama 3.3 70B&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Uptime&lt;/td&gt;
&lt;td&gt;UptimeRobot (keeps N8N alive)&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Deploy&lt;/td&gt;
&lt;td&gt;Vercel&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Total: $0/month.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Why N8N?
&lt;/h2&gt;

&lt;p&gt;I've used N8N in previous projects (FormJet, a smart form builder), but RivalRadar pushed me to learn it deeply. Here's why N8N was the right choice:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Visual workflow design.&lt;/strong&gt; You can see the entire data flow. When something breaks, you click the node and see exactly what input it received and what output it produced. Debugging is incredibly fast.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI Agent nodes.&lt;/strong&gt; N8N has built-in LangChain integration. You define a system prompt, connect an LLM, give it tools (like HTTP Request for web search), and it becomes an autonomous agent.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fallback logic.&lt;/strong&gt; My workflow uses Groq (Llama 3.3) as the primary model. If it hits a rate limit, an IF node catches the error and routes to Google Gemini as a fallback. This took 5 minutes to set up in N8N — in code, it would have been a whole error handling architecture.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Self-hosted and free.&lt;/strong&gt; I run N8N on Render's free tier. The only catch is cold starts (Render sleeps free services after inactivity). I solved this with UptimeRobot pinging the instance every 5 minutes.&lt;/p&gt;




&lt;h2&gt;
  
  
  The N8N Webhook Fix Nobody Talks About
&lt;/h2&gt;

&lt;p&gt;I hit a nasty bug: N8N's webhook paths weren't working as expected. After digging into the source code, I found the root cause in &lt;code&gt;getNodeWebhookPath()&lt;/code&gt;. When a webhook node doesn't have a &lt;code&gt;webhookId&lt;/code&gt;, it generates a compound path (&lt;code&gt;workflowId/nodeName/path&lt;/code&gt;) instead of the clean path you defined.&lt;/p&gt;

&lt;p&gt;The fix: insert the &lt;code&gt;webhookId&lt;/code&gt; directly into N8N's SQLite database. The &lt;code&gt;isFullPath: true&lt;/code&gt; flag only works when &lt;code&gt;webhookId&lt;/code&gt; exists. This is a self-hosted specific issue that I couldn't find documented anywhere.&lt;/p&gt;




&lt;h2&gt;
  
  
  Key Technical Decisions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Why NextAuth.js v5 instead of Supabase Auth?&lt;/strong&gt;&lt;br&gt;
I originally planned to use Supabase for everything, but hit the free tier project limit (2 projects). Instead of paying, I switched to Neon (PostgreSQL) + Prisma + NextAuth.js v5. This actually turned out better — Prisma gives me more control over queries and NextAuth's session handling is rock solid.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why Groq over OpenAI?&lt;/strong&gt;&lt;br&gt;
Cost. Groq's free tier gives you Llama 3.3 70B — a model that rivals GPT-4 for analysis tasks. The speed is also insane (Groq's LPU inference is significantly faster than GPU-based alternatives). For a tool that promises "results in 60 seconds," speed matters.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why a credit system?&lt;/strong&gt;&lt;br&gt;
Each user gets 3 free reports. This prevents abuse while letting people experience the tool before any paywall. The credit system uses a transaction table for full auditability.&lt;/p&gt;




&lt;h2&gt;
  
  
  What I Learned
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;N8N is production-ready.&lt;/strong&gt; It's not just a toy for simple automations. Multi-agent AI pipelines with error handling, fallbacks, and data transformation — it handles all of it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Zero-cost infrastructure is real.&lt;/strong&gt; Neon, Vercel, Render, Groq — the free tiers of these services are generous enough to run a real SaaS product.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;AI agents are only as good as their prompts.&lt;/strong&gt; I spent more time writing and refining agent prompts than writing code. The difference between a mediocre report and a great one is entirely in the system prompt.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Self-hosting has trade-offs.&lt;/strong&gt; Render's free tier sleeps, so UptimeRobot is essential. The webhook bug cost me hours. But $0/month makes it worth it.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Live app:&lt;/strong&gt; &lt;a href="https://rivalradar-three.vercel.app" rel="noopener noreferrer"&gt;rivalradar-three.vercel.app&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Source code:&lt;/strong&gt; &lt;a href="https://github.com/akincskn/rivalradar" rel="noopener noreferrer"&gt;github.com/akincskn/rivalradar&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Enter any company name and industry. Get a full analysis in 60 seconds. No credit card needed.&lt;/p&gt;




&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;p&gt;I'm building a series of AI-powered tools. Next up: a GEO (Generative Engine Optimization) analyzer that helps content rank in AI search results like ChatGPT and Perplexity. If you're interested in N8N, AI agents, or zero-cost SaaS architecture, follow me — more coming soon.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;I'm Akın Coşkun, a full-stack developer from Turkey building AI-powered tools with zero-cost infrastructure. Find me on &lt;a href="https://github.com/akincskn" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; or check my &lt;a href="https://akin-coskun.web.app" rel="noopener noreferrer"&gt;portfolio&lt;/a&gt;.&lt;/em&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdnygyh3mq6zklb8ks4eu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdnygyh3mq6zklb8ks4eu.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>automation</category>
      <category>nextjs</category>
      <category>showdev</category>
    </item>
    <item>
      <title>How I Built an AI-Powered Competitor Analysis Tool with N8N and Next.js — For $0/month</title>
      <dc:creator>Akın Coşkun</dc:creator>
      <pubDate>Thu, 12 Mar 2026 08:50:19 +0000</pubDate>
      <link>https://dev.to/akincskn/how-i-built-an-ai-powered-competitor-analysis-tool-with-n8n-and-nextjs-for-0month-i9h</link>
      <guid>https://dev.to/akincskn/how-i-built-an-ai-powered-competitor-analysis-tool-with-n8n-and-nextjs-for-0month-i9h</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;I built RivalRadar, an AI tool that generates full competitor analysis reports in under 60 seconds. You enter a company name and industry — it discovers competitors, runs SWOT analysis, compares pricing, and gives actionable recommendations. The entire infrastructure costs $0/month.&lt;/p&gt;

&lt;p&gt;Here's how I did it, what I learned, and why N8N is seriously underrated.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;Competitor analysis tools like Crayon, Klue, and Kompyte cost $12,000–$47,000/year. Small businesses, freelancers, and startup founders can't afford that. But everyone needs to understand their competitive landscape.&lt;/p&gt;

&lt;p&gt;I wanted to build something that gives you 80% of the value for 0% of the cost.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Architecture
&lt;/h2&gt;

&lt;p&gt;Here's how RivalRadar works under the hood:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User enters company + industry
        ↓
Next.js API Route (auth + validation)
        ↓
N8N Webhook Trigger
        ↓
AI Agent #1: Competitor Finder
   → Discovers top 5 competitors via web search
        ↓
AI Agent #2: Company Analyzer (per competitor)
   → Profile, products, pricing, target audience
        ↓
AI Agent #3: Sentiment Analyzer (per competitor)
   → Strengths, weaknesses, public perception
        ↓
AI Agent #4: Report Generator
   → SWOT analysis, pricing table, recommendations
        ↓
JSON response → Frontend renders report
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The key insight: &lt;strong&gt;N8N orchestrates everything.&lt;/strong&gt; Each AI agent is a separate node in the workflow, processing data in sequence. If one fails, the error handler catches it. If the primary AI model hits a rate limit, it falls back to a secondary model automatically.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Stack (Zero Cost)
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Technology&lt;/th&gt;
&lt;th&gt;Cost&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Frontend&lt;/td&gt;
&lt;td&gt;Next.js 14 + Tailwind + shadcn/ui&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Auth&lt;/td&gt;
&lt;td&gt;NextAuth.js v5 (Google OAuth)&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Database&lt;/td&gt;
&lt;td&gt;Neon PostgreSQL (free tier)&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ORM&lt;/td&gt;
&lt;td&gt;Prisma&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Automation&lt;/td&gt;
&lt;td&gt;N8N (self-hosted on Render)&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI Model&lt;/td&gt;
&lt;td&gt;Groq Llama 3.3 70B&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Uptime&lt;/td&gt;
&lt;td&gt;UptimeRobot (keeps N8N alive)&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Deploy&lt;/td&gt;
&lt;td&gt;Vercel&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Total: $0/month.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Why N8N?
&lt;/h2&gt;

&lt;p&gt;I've used N8N in previous projects (FormJet, a smart form builder), but RivalRadar pushed me to learn it deeply. Here's why N8N was the right choice:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Visual workflow design.&lt;/strong&gt; You can see the entire data flow. When something breaks, you click the node and see exactly what input it received and what output it produced. Debugging is incredibly fast.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI Agent nodes.&lt;/strong&gt; N8N has built-in LangChain integration. You define a system prompt, connect an LLM, give it tools (like HTTP Request for web search), and it becomes an autonomous agent.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fallback logic.&lt;/strong&gt; My workflow uses Groq (Llama 3.3) as the primary model. If it hits a rate limit, an IF node catches the error and routes to Google Gemini as a fallback. This took 5 minutes to set up in N8N — in code, it would have been a whole error handling architecture.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Self-hosted and free.&lt;/strong&gt; I run N8N on Render's free tier. The only catch is cold starts (Render sleeps free services after inactivity). I solved this with UptimeRobot pinging the instance every 5 minutes.&lt;/p&gt;




&lt;h2&gt;
  
  
  The N8N Webhook Fix Nobody Talks About
&lt;/h2&gt;

&lt;p&gt;I hit a nasty bug: N8N's webhook paths weren't working as expected. After digging into the source code, I found the root cause in &lt;code&gt;getNodeWebhookPath()&lt;/code&gt;. When a webhook node doesn't have a &lt;code&gt;webhookId&lt;/code&gt;, it generates a compound path (&lt;code&gt;workflowId/nodeName/path&lt;/code&gt;) instead of the clean path you defined.&lt;/p&gt;

&lt;p&gt;The fix: insert the &lt;code&gt;webhookId&lt;/code&gt; directly into N8N's SQLite database. The &lt;code&gt;isFullPath: true&lt;/code&gt; flag only works when &lt;code&gt;webhookId&lt;/code&gt; exists. This is a self-hosted specific issue that I couldn't find documented anywhere.&lt;/p&gt;




&lt;h2&gt;
  
  
  Key Technical Decisions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Why NextAuth.js v5 instead of Supabase Auth?&lt;/strong&gt;&lt;br&gt;
I originally planned to use Supabase for everything, but hit the free tier project limit (2 projects). Instead of paying, I switched to Neon (PostgreSQL) + Prisma + NextAuth.js v5. This actually turned out better — Prisma gives me more control over queries and NextAuth's session handling is rock solid.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why Groq over OpenAI?&lt;/strong&gt;&lt;br&gt;
Cost. Groq's free tier gives you Llama 3.3 70B — a model that rivals GPT-4 for analysis tasks. The speed is also insane (Groq's LPU inference is significantly faster than GPU-based alternatives). For a tool that promises "results in 60 seconds," speed matters.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why a credit system?&lt;/strong&gt;&lt;br&gt;
Each user gets 3 free reports. This prevents abuse while letting people experience the tool before any paywall. The credit system uses a transaction table for full auditability.&lt;/p&gt;




&lt;h2&gt;
  
  
  What I Learned
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;N8N is production-ready.&lt;/strong&gt; It's not just a toy for simple automations. Multi-agent AI pipelines with error handling, fallbacks, and data transformation — it handles all of it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Zero-cost infrastructure is real.&lt;/strong&gt; Neon, Vercel, Render, Groq — the free tiers of these services are generous enough to run a real SaaS product.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;AI agents are only as good as their prompts.&lt;/strong&gt; I spent more time writing and refining agent prompts than writing code. The difference between a mediocre report and a great one is entirely in the system prompt.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Self-hosting has trade-offs.&lt;/strong&gt; Render's free tier sleeps, so UptimeRobot is essential. The webhook bug cost me hours. But $0/month makes it worth it.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Live app:&lt;/strong&gt; &lt;a href="https://rivalradar-three.vercel.app" rel="noopener noreferrer"&gt;rivalradar-three.vercel.app&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Source code:&lt;/strong&gt; &lt;a href="https://github.com/akincskn/rivalradar" rel="noopener noreferrer"&gt;github.com/akincskn/rivalradar&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Enter any company name and industry. Get a full analysis in 60 seconds. No credit card needed.&lt;/p&gt;




&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;p&gt;I'm building a series of AI-powered tools. Next up: a GEO (Generative Engine Optimization) analyzer that helps content rank in AI search results like ChatGPT and Perplexity. If you're interested in N8N, AI agents, or zero-cost SaaS architecture, follow me — more coming soon.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;I'm Akın Coşkun, a full-stack developer from Turkey building AI-powered tools with zero-cost infrastructure. Find me on &lt;a href="https://github.com/akincskn" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; or check my &lt;a href="https://akin-coskun.web.app" rel="noopener noreferrer"&gt;portfolio&lt;/a&gt;.&lt;/em&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdnygyh3mq6zklb8ks4eu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdnygyh3mq6zklb8ks4eu.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>n8n</category>
      <category>ai</category>
      <category>saas</category>
      <category>mcp</category>
    </item>
  </channel>
</rss>
