{"workflow":{"id":13362,"name":"Transform GitHub repos into evidence-based architecture blueprints with Claude","views":62,"recentViews":0,"totalViews":62,"createdAt":"2026-02-13T02:25:25.194Z","description":"**Requirements:** GitHub API token (`repo` scope), Anthropic API key (Claude Sonnet 4.5), Slack Bot Token *(optional)*\n\nThis workflow analyzes any public GitHub repository and generates an evidence-based architecture blueprint — with Mermaid.js diagrams, technical stack analysis, and risk assessment — then pushes it as `README_ARCH.md` directly to the repo.\n\n**What makes it different:** A strict anti-hallucination prompt ensures Claude only describes technologies that actually exist in the code. No Dockerfile? Docker is never mentioned. No `.tf` files? Terraform doesn't appear. Every claim traces back to real file evidence.\n\n## How it works\n\n1. A GitHub URL is submitted via the **web form** or **webhook API**\n2. The workflow fetches repo metadata, the full file tree, and contents of key files (package.json, requirements.txt, Dockerfiles, entry points, etc.)\n3. **Claude Sonnet 4.5** (temperature 0.1) analyzes only the evidence — strict rules prevent inventing technologies not found in the code\n4. A Markdown blueprint with architecture diagrams and risk analysis is assembled, auto-fixed, and pushed to the repo's default branch\n5. A Slack notification is sent and the form user receives a styled success page\n\n## Example output\n\nThe generated `README_ARCH.md` includes:\n\n- **Project Purpose** — What the project does, based on code evidence\n- **Technical Stack** — Languages, frameworks, and dependencies from actual dependency files\n- **Architecture Blueprint** — Mermaid.js flowchart with dark-theme styling, grouped by layer\n- **Request Flow** — Sequence diagram showing a typical path through the system\n- **Evidence-Based Risks** — Three risks traceable to specific files or patterns\n\n## Use cases\n\n- **Open-source maintainers** — Auto-generate architecture docs for contributors\n- **Engineering teams** — Quick onboarding docs for new team members\n- **Code reviewers** — Understand unfamiliar repositories at a glance\n- **Technical due diligence** — Rapid architecture assessment of vendor codebases\n- **Portfolio projects** — Add professional documentation to showcase repos\n\n## Setup\n\nSee the **Setup & Overview** sticky note in the workflow for step-by-step credential configuration.\n","workflow":{"name":"Transform GitHub repositories into architecture blueprints with AI","nodes":[{"id":"c239fbe4-e34f-445f-9292-141699a76a9a","name":"Receive GitHub URL","type":"n8n-nodes-base.webhook","onError":"continueRegularOutput","position":[-2704,208],"parameters":{"path":"repo-blueprint","options":{"ignoreBots":false},"httpMethod":"POST","responseMode":"responseNode"},"typeVersion":2.1},{"id":"f6117e39-bbea-4b8b-af81-9d11dea411d6","name":"Blueprint Form","type":"n8n-nodes-base.formTrigger","position":[-2704,512],"parameters":{"path":"repo-blueprint-form","options":{"buttonLabel":"Generate Blueprint"},"formTitle":"Repo Blueprint Architect","formFields":{"values":[{"fieldLabel":"GitHub Repository URL","placeholder":"https://github.com/owner/repo","requiredField":true}]},"responseMode":"responseNode","formDescription":"Enter a public GitHub repository URL to generate an evidence-based system architecture blueprint with Mermaid.js diagrams."},"typeVersion":2.1},{"id":"0da401d5-5bd5-4d5c-8bd4-56c0231278e6","name":"Parse Owner and Repo","type":"n8n-nodes-base.code","position":[-2432,208],"parameters":{"jsCode":"const input = $input.first().json;\nconst url = input.body?.github_url || input.body?.repository_url || input['GitHub Repository URL'];\n\nif (!url) {\n  throw new Error('Missing GitHub URL. Send body.github_url or body.repository_url (webhook) or fill the form field.');\n}\n\nconst match = url.match(/github\\.com\\/([^\\/]+)\\/([^\\/\\.]+)/);\n\nif (!match) {\n  throw new Error(`Invalid GitHub URL: ${url}`);\n}\n\nreturn [{\n  json: {\n    github_url: url,\n    owner: match[1],\n    repo: match[2]\n  }\n}];"},"typeVersion":2},{"id":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","name":"Fetch Repo Metadata","type":"n8n-nodes-base.httpRequest","position":[-2160,208],"parameters":{"url":"=https://api.github.com/repos/{{ $json.owner }}/{{ $json.repo }}","options":{"response":{"response":{"neverError":true}}},"sendHeaders":true,"authentication":"predefinedCredentialType","headerParameters":{"parameters":[{"name":"Accept","value":"application/vnd.github.v3+json"},{"name":"User-Agent","value":"n8n-repo-blueprint"}]},"nodeCredentialType":"githubApi"},"credentials":{"githubApi":{"id":"CONFIGURE_ME","name":"GitHub API"}},"typeVersion":4.4},{"id":"fcdd844d-d327-45b1-b319-6b2fb78da8b6","name":"Fetch Repo Tree","type":"n8n-nodes-base.httpRequest","position":[-1888,208],"parameters":{"url":"=https://api.github.com/repos/{{ $('Parse Owner and Repo').first().json.owner }}/{{ $('Parse Owner and Repo').first().json.repo }}/git/trees/{{ $json.default_branch || 'main' }}?recursive=1","options":{},"sendHeaders":true,"authentication":"predefinedCredentialType","headerParameters":{"parameters":[{"name":"Accept","value":"application/vnd.github.v3+json"},{"name":"User-Agent","value":"n8n-repo-blueprint"}]},"nodeCredentialType":"githubApi"},"credentials":{"githubApi":{"id":"CONFIGURE_ME","name":"GitHub API"}},"typeVersion":4.4},{"id":"84d7cac3-bcb0-4c99-9778-8382f43a4699","name":"Identify Key Files","type":"n8n-nodes-base.code","position":[-1616,208],"parameters":{"jsCode":"const treeData = $input.first().json;\nconst tree = treeData.tree || [];\nconst owner = $('Parse Owner and Repo').first().json.owner;\nconst repo = $('Parse Owner and Repo').first().json.repo;\n\nconst filteredTree = tree.filter(item => {\n  const p = item.path.toLowerCase();\n  return !p.includes('node_modules') &&\n         !p.includes('.git/') &&\n         !p.includes('package-lock.json') &&\n         !p.includes('yarn.lock') &&\n         !p.includes('dist/') &&\n         !p.includes('build/') &&\n         !p.includes('__pycache__') &&\n         !p.includes('.egg-info');\n});\n\nlet fileTreeStr = filteredTree\n  .filter(item => item.type === 'blob')\n  .map(item => item.path)\n  .join('\\n');\nif (fileTreeStr.length > 40000) {\n  fileTreeStr = fileTreeStr.substring(0, 40000) + '\\n... [TREE TRUNCATED]';\n}\n\nconst keyPatterns = [\n  /^main\\.py$/i,\n  /^app\\.py$/i,\n  /^index\\.(js|ts|tsx)$/i,\n  /^server\\.(js|ts)$/i,\n  /^package\\.json$/i,\n  /^requirements\\.txt$/i,\n  /^pyproject\\.toml$/i,\n  /^Cargo\\.toml$/i,\n  /^go\\.mod$/i,\n  /^setup\\.py$/i,\n  /^setup\\.cfg$/i,\n  /^docker-compose\\.ya?ml$/i,\n  /^Dockerfile$/i,\n  /^Makefile$/i,\n  /^config\\/.*\\.(ya?ml|json|toml)$/i,\n  /^src\\/index\\.(js|ts|tsx)$/i,\n  /^src\\/main\\.(py|js|ts|rs)$/i,\n  /^src\\/app\\.(py|js|ts)$/i,\n  /^\\.github\\/workflows\\/.*\\.ya?ml$/i,\n  /^streamlit_app\\.py$/i,\n  /^train.*\\.py$/i,\n  /^model.*\\.py$/i,\n  /^predict.*\\.py$/i,\n  /^Pipfile$/i,\n  /^environment\\.ya?ml$/i\n];\n\nconst keyFiles = filteredTree\n  .filter(item => item.type === 'blob')\n  .filter(item => keyPatterns.some(pattern => pattern.test(item.path)))\n  .map(item => item.path)\n  .slice(0, 12);\n\nconst totalFiles = filteredTree.filter(i => i.type === 'blob').length;\nconst totalDirs = filteredTree.filter(i => i.type === 'tree').length;\n\nif (keyFiles.length === 0) {\n  return [{\n    json: { owner, repo, filePath: null, fileTreeStr, totalFiles, totalDirs }\n  }];\n}\n\nreturn keyFiles.map(filePath => ({\n  json: { owner, repo, filePath, fileTreeStr, totalFiles, totalDirs }\n}));"},"typeVersion":2},{"id":"9ed95dfa-5a0d-4f76-ab11-e8a25f3fb18b","name":"Fetch Key File Contents","type":"n8n-nodes-base.httpRequest","position":[-1344,208],"parameters":{"url":"=https://api.github.com/repos/{{ $json.owner }}/{{ $json.repo }}/contents/{{ $json.filePath }}","options":{"response":{"response":{"neverError":true}}},"sendHeaders":true,"authentication":"predefinedCredentialType","headerParameters":{"parameters":[{"name":"Accept","value":"application/vnd.github.v3+json"},{"name":"User-Agent","value":"n8n-repo-blueprint"}]},"nodeCredentialType":"githubApi"},"credentials":{"githubApi":{"id":"CONFIGURE_ME","name":"GitHub API"}},"typeVersion":4.4},{"id":"076af1fe-6bfe-49ab-8500-cd1b2f3db975","name":"Prepare LLM Input","type":"n8n-nodes-base.code","position":[-1088,208],"parameters":{"jsCode":"const items = $input.all();\nconst owner = $('Parse Owner and Repo').first().json.owner;\nconst repo = $('Parse Owner and Repo').first().json.repo;\nconst metadata = $('Fetch Repo Metadata').first().json;\nconst description = metadata.description || '';\nconst topics = (metadata.topics || []).join(', ');\nconst language = metadata.language || '';\nconst fileTreeStr = $('Identify Key Files').first().json.fileTreeStr;\nconst totalFiles = $('Identify Key Files').first().json.totalFiles;\nconst totalDirs = $('Identify Key Files').first().json.totalDirs;\n\nconst fileContents = items\n  .filter(item => item.json.content && item.json.path)\n  .map(item => {\n    try {\n      const decoded = Buffer.from(item.json.content, 'base64').toString('utf-8');\n      const truncated = decoded.length > 3000\n        ? decoded.substring(0, 3000) + '\\n... [TRUNCATED]'\n        : decoded;\n      return `--- FILE: ${item.json.path} ---\\n${truncated}\\n`;\n    } catch(e) {\n      return `--- FILE: ${item.json.path} --- [BINARY/UNREADABLE]\\n`;\n    }\n  })\n  .join('\\n');\n\nconst prompt = `Repository: ${owner}/${repo}\\nDescription: ${description || 'No description provided'}\\nTopics: ${topics || 'None'}\\nPrimary Language: ${language || 'Unknown'}\\nTotal files: ${totalFiles} | Total directories: ${totalDirs}\\n\\n=== FULL FILE TREE ===\\n${fileTreeStr}\\n\\n=== KEY FILE CONTENTS ===\\n${fileContents}`;\n\nreturn [{\n  json: {\n    owner,\n    repo,\n    llmInput: prompt,\n    fileTreeStr,\n    totalFiles,\n    totalDirs\n  }\n}];"},"typeVersion":2},{"id":"b2f94c0e-b70b-4a2a-8cea-2a9863d78ce0","name":"Analyze Architecture","type":"@n8n/n8n-nodes-langchain.chainLlm","position":[-816,208],"parameters":{"text":"={{ $json.llmInput }}","batching":{},"messages":{"messageValues":[{"message":"You are a Senior Software Architect performing a forensic, evidence-only code analysis. You describe ONLY what exists in the repository evidence below. You NEVER speculate or assume.\n\nABSOLUTE RULES — VIOLATION MEANS FAILURE:\n1. ONLY reference technologies found in the file tree or file contents provided.\n2. Check dependency files (requirements.txt, package.json, Cargo.toml, go.mod, pyproject.toml) — list ONLY libraries found there.\n3. No Dockerfile in tree → DO NOT mention Docker.\n4. No .tf files in tree → DO NOT mention Terraform.\n5. No .github/workflows/ in tree → DO NOT mention CI/CD.\n6. Read entry-point files (main.py, app.py, index.js) to understand the project's ACTUAL purpose and domain.\n7. Every claim must trace to a specific file in the evidence.\n\nTOKEN EFFICIENCY: Concise. Bullets over paragraphs. No filler. Every sentence must add information.\n\nMERMAID SYNTAX RULES (violations break rendering):\n1. Node IDs: ONLY alphanumeric (A, B, SVC1). No special chars, spaces, or hyphens.\n2. Labels: ALWAYS in double quotes: A[\"Service\"].\n3. Reserved words (end, graph, subgraph, style, click, class, default): NEVER as node IDs.\n4. Edge labels in double quotes: A -->|\"data\"| B\n5. Every subgraph closes with end on its own line.\n6. Use flowchart TD (NOT graph TD).\n7. No emoji or unicode in Mermaid code.\n\nDark-theme hex styles:\n- Frontend: style ID fill:#1f6feb,stroke:#58a6ff,color:#fff\n- Backend: style ID fill:#238636,stroke:#3fb950,color:#fff\n- Database: style ID fill:#da3633,stroke:#f85149,color:#fff\n- External: style ID fill:#8b949e,stroke:#c9d1d9,color:#fff\n\nUse subgraph blocks to group by layer. Shapes: [\"Service\"] for services, [(\"Database\")] for databases.\n\nOUTPUT FORMAT (strict — nothing outside these sections):\n\n## Project Purpose\n[1-2 sentences: what this project does, with its specific domain, based on code evidence.]\n\n## Technical Stack\n- **Language**: [from file extensions]\n- **Framework**: [from dependency files ONLY]\n- **Key Dependencies**: [from requirements.txt/package.json/etc.]\n- **Infrastructure**: [ONLY if config files exist in tree — omit entire line if none]\n\n## Architecture Blueprint\n```mermaid\nflowchart TD\n[diagram reflecting ACTUAL file structure — subgraphs by layer]\n```\n\n## Request Flow\n```mermaid\nsequenceDiagram\n[based on ACTUAL code paths — min 3 participants]\n```\n\n## Evidence-Based Risks\n1. [Risk traceable to specific file/pattern]\n2. [Risk traceable to specific file/pattern]\n3. [Risk traceable to specific file/pattern]"}]},"promptType":"define"},"typeVersion":1.9},{"id":"ce51847f-7c5f-494f-975b-e8ea545cd50c","name":"Claude 3.5 Sonnet","type":"@n8n/n8n-nodes-langchain.lmChatAnthropic","position":[-816,432],"parameters":{"model":{"__rl":true,"mode":"id","value":"claude-sonnet-4-5-20250929"},"options":{"temperature":0.1,"maxTokensToSample":3000}},"credentials":{"anthropicApi":{"id":"CONFIGURE_ME","name":"Anthropic API"}},"typeVersion":1.3},{"id":"b2c3d4e5-f6a7-8901-bcde-f12345678901","name":"Fix Markdown","type":"n8n-nodes-base.code","position":[-544,208],"parameters":{"jsCode":"const input = $input.first().json;\nlet md = input.text || '';\n\n// Fix: Ensure space after # headers\nmd = md.replace(/^(#{1,6})([^\\s#])/gm, '$1 $2');\n\n// Fix: Ensure blank line before headers\nmd = md.replace(/([^\\n])\\n(#{1,6}\\s)/g, '$1\\n\\n$2');\n\n// Fix: Ensure blank line before code blocks\nmd = md.replace(/([^\\n])\\n```/g, '$1\\n\\n```');\n\n// Fix: Ensure blank line after code blocks\nmd = md.replace(/```\\n([^\\n`])/g, '```\\n\\n$1');\n\n// Fix: Remove trailing whitespace on lines\nmd = md.replace(/[ \\t]+$/gm, '');\n\nreturn [{\n  json: {\n    ...input,\n    text: md\n  }\n}];"},"typeVersion":2},{"id":"18443356-0962-445c-9f53-daf3e95505ed","name":"Generate Dashboard HTML","type":"n8n-nodes-base.code","position":[-272,208],"parameters":{"jsCode":"const analysisOutput = $input.first().json.text || '';\nconst owner = $('Parse Owner and Repo').first().json.owner;\nconst repo = $('Parse Owner and Repo').first().json.repo;\nconst description = $('Fetch Repo Metadata').first().json.description || '';\nconst totalFiles = $('Prepare LLM Input').first().json.totalFiles;\nconst totalDirs = $('Prepare LLM Input').first().json.totalDirs;\nconst defaultBranch = $('Fetch Repo Metadata').first().json.default_branch || 'main';\nconst now = new Date().toISOString().split('T')[0];\n\nconst mermaidBlocks = [];\nconst mermaidRegex = /```mermaid\\n([\\s\\S]*?)```/g;\nlet m;\nwhile ((m = mermaidRegex.exec(analysisOutput)) !== null) {\n  mermaidBlocks.push(m[1].trim());\n}\n\nconst markdown = `# System Blueprint: ${owner}/${repo}\\n\\n> ${description || 'Architecture analysis'}\\n>\\n> Auto-generated on ${now} by Repo-to-Blueprint Architect\\n\\n${analysisOutput.trim()}\\n\\n---\\n\\n## Repository Stats\\n| Metric | Value |\\n|--------|-------|\\n| Total Files | ${totalFiles} |\\n| Total Directories | ${totalDirs} |\\n| Generated | ${now} |\\n| Source | [${owner}/${repo}](https://github.com/${owner}/${repo}) |\\n\\n---\\n\\n*Generated by Repo-to-Blueprint Architect via n8n*\\n`;\n\nconst mermaidPreview = mermaidBlocks.length > 0 ? mermaidBlocks[0].substring(0, 1500) : '[No diagram]';\n\nreturn [{\n  json: {\n    owner,\n    repo,\n    markdownContent: markdown,\n    mermaidCode: mermaidPreview,\n    diagramCount: mermaidBlocks.length,\n    commitMessage: `docs: update system blueprint (${now})`,\n    defaultBranch\n  }\n}];"},"typeVersion":2},{"id":"5301aa8f-fce4-42e8-8334-3339e873dfc3","name":"Fetch Existing README","type":"n8n-nodes-base.httpRequest","position":[0,208],"parameters":{"url":"=https://api.github.com/repos/{{ $json.owner }}/{{ $json.repo }}/contents/README_ARCH.md?ref={{ $json.defaultBranch }}","options":{"response":{"response":{"neverError":true}}},"sendHeaders":true,"authentication":"predefinedCredentialType","headerParameters":{"parameters":[{"name":"Accept","value":"application/vnd.github.v3+json"},{"name":"User-Agent","value":"n8n-repo-blueprint"}]},"nodeCredentialType":"githubApi"},"credentials":{"githubApi":{"id":"CONFIGURE_ME","name":"GitHub API"}},"typeVersion":4.4},{"id":"f006ed96-6ef9-4bc8-96bb-0fac76993db0","name":"Prepare Push Data","type":"n8n-nodes-base.code","position":[272,208],"parameters":{"jsCode":"const dashData = $('Generate Dashboard HTML').first().json;\nconst existing = $input.first().json;\n\nconst content = Buffer.from(dashData.markdownContent).toString('base64');\n\nconst body = {\n  message: dashData.commitMessage,\n  content: content,\n  branch: dashData.defaultBranch\n};\n\nif (existing.sha) {\n  body.sha = existing.sha;\n}\n\nreturn [{\n  json: {\n    owner: dashData.owner,\n    repo: dashData.repo,\n    pushBodyStr: JSON.stringify(body),\n    isUpdate: !!existing.sha,\n    diagramCount: dashData.diagramCount,\n    mermaidCode: dashData.mermaidCode\n  }\n}];"},"typeVersion":2},{"id":"e5558bb5-6670-4824-864c-696360085f67","name":"Push README_ARCH.md","type":"n8n-nodes-base.httpRequest","position":[544,208],"parameters":{"url":"=https://api.github.com/repos/{{ $json.owner }}/{{ $json.repo }}/contents/README_ARCH.md","method":"PUT","options":{},"jsonBody":"={{ $json.pushBodyStr }}","sendBody":true,"sendHeaders":true,"specifyBody":"json","authentication":"predefinedCredentialType","headerParameters":{"parameters":[{"name":"Accept","value":"application/vnd.github.v3+json"},{"name":"User-Agent","value":"n8n-repo-blueprint"}]},"nodeCredentialType":"githubApi"},"credentials":{"githubApi":{"id":"CONFIGURE_ME","name":"GitHub API"}},"typeVersion":4.4},{"id":"f9b37d10-b08d-4689-9332-c3cdc1e0d2a0","name":"Notify on Update","type":"n8n-nodes-base.slack","position":[816,48],"parameters":{"text":"=:{{ $('Prepare Push Data').first().json.isUpdate ? 'arrows_counterclockwise' : 'blueprint' }}: *System Blueprint {{ $('Prepare Push Data').first().json.isUpdate ? 'Updated' : 'Created' }}*\n\n*Repository:* <https://github.com/{{ $('Parse Owner and Repo').first().json.owner }}/{{ $('Parse Owner and Repo').first().json.repo }}|{{ $('Parse Owner and Repo').first().json.owner }}/{{ $('Parse Owner and Repo').first().json.repo }}>\n*Blueprint:* <https://github.com/{{ $('Parse Owner and Repo').first().json.owner }}/{{ $('Parse Owner and Repo').first().json.repo }}/blob/{{ $('Generate Dashboard HTML').first().json.defaultBranch }}/README_ARCH.md|View README_ARCH.md>\n*Diagrams:* {{ $('Prepare Push Data').first().json.diagramCount }} generated\n*Stats:* {{ $('Prepare LLM Input').first().json.totalFiles }} files | {{ $('Prepare LLM Input').first().json.totalDirs }} dirs\n\n```{{ $('Prepare Push Data').first().json.mermaidCode }}```","select":"channel","resource":"message","channelId":{"__rl":true,"mode":"list","value":""},"operation":"post","otherOptions":{}},"credentials":{"slackApi":{"id":"CONFIGURE_ME","name":"Slack Bot Token"}},"typeVersion":2.4,"continueOnFail":true},{"id":"8e995431-419c-4d45-b349-368f72ec21c7","name":"Send Success Page","type":"n8n-nodes-base.respondToWebhook","position":[1088,48],"parameters":{"options":{"responseCode":200,"responseHeaders":{"entries":[{"name":"Content-Type","value":"text/html; charset=utf-8"}]}},"respondWith":"text","responseBody":"=<!DOCTYPE html><html lang='en'><head><meta charset='UTF-8'><meta name='viewport' content='width=device-width,initial-scale=1'><title>Blueprint Generated</title><style>*{margin:0;padding:0;box-sizing:border-box}body{font-family:-apple-system,BlinkMacSystemFont,sans-serif;background:#0d1117;color:#c9d1d9;display:flex;align-items:center;justify-content:center;min-height:100vh}.card{background:#161b22;border:1px solid #30363d;border-radius:12px;padding:3rem;max-width:520px;text-align:center;box-shadow:0 8px 32px rgba(0,0,0,.4)}h1{color:#58a6ff;font-size:1.8rem;margin-bottom:1rem}.icon{font-size:3.5rem;margin-bottom:1rem}p{margin:.7rem 0;color:#8b949e;line-height:1.6}.repo{color:#c9d1d9;font-weight:600}.btn{display:inline-block;background:#238636;color:#fff;padding:.75rem 2rem;border-radius:8px;margin-top:1.5rem;font-size:1rem;text-decoration:none;transition:background .2s}.btn:hover{background:#2ea043}.footer{margin-top:2rem;font-size:.75rem;color:#484f58}</style></head><body><div class='card'><div class='icon'>&#9989;</div><h1>Blueprint Generated!</h1><p>Architecture analysis complete for<br><span class='repo'>{{ $('Parse Owner and Repo').first().json.owner }}/{{ $('Parse Owner and Repo').first().json.repo }}</span></p><p>{{ $('Prepare Push Data').first().json.diagramCount }} diagram(s) generated and pushed.</p><a class='btn' href='https://github.com/{{ $('Parse Owner and Repo').first().json.owner }}/{{ $('Parse Owner and Repo').first().json.repo }}/blob/{{ $('Generate Dashboard HTML').first().json.defaultBranch }}/README_ARCH.md' target='_blank'>View README_ARCH.md &#8594;</a><div class='footer'>Powered by Repo-to-Blueprint Architect</div></div></body></html>"},"typeVersion":1.5},{"id":"s0000000-0000-0000-0000-000000000000","name":"Sticky Note - Setup","type":"n8n-nodes-base.stickyNote","position":[-2784,-384],"parameters":{"width":3960,"height":416,"content":"## How it works\n\nThis workflow analyzes any public GitHub repository and generates an evidence-based architecture blueprint with Mermaid.js diagrams.\n\n1. A GitHub URL is submitted via the web form or webhook API\n2. The workflow fetches repository metadata, the full file tree, and contents of key files (package.json, main.py, Dockerfiles, etc.)\n3. Claude AI (Sonnet 4.5, temperature 0.1) analyzes ONLY the evidence — strict anti-hallucination rules prevent it from inventing technologies not found in the code\n4. A Markdown blueprint with architecture diagrams and risk analysis is assembled, validated, and pushed as `README_ARCH.md` to the repository\n5. A Slack notification is sent and the form user receives a styled success page\n\n## Setup steps\n\n1. **GitHub API** — Create a Personal Access Token with `repo` scope. Add as \"GitHub API\" credential\n2. **Anthropic API** — Get an API key from console.anthropic.com. Add as \"Anthropic API\" credential\n3. **Slack** *(optional)* — Create a Slack Bot Token with `chat:write` scope. Add as \"Slack API\" credential and update the channel ID in the Notify node\n4. **Activate** — Toggle the workflow active. Use the Form URL in your browser or POST `{\"github_url\": \"https://github.com/owner/repo\"}` to the webhook"},"typeVersion":1},{"id":"s1000001-0000-0000-0000-000000000001","name":"Sticky Note - Input","type":"n8n-nodes-base.stickyNote","position":[-2816,80],"parameters":{"color":6,"width":580,"height":560,"content":"## Input\nTwo entry points: web form for browser users, webhook POST for API calls. Both feed into the URL parser."},"typeVersion":1},{"id":"s1000002-0000-0000-0000-000000000002","name":"Sticky Note - Evidence","type":"n8n-nodes-base.stickyNote","position":[-2208,80],"parameters":{"color":6,"width":1292,"height":320,"content":"## Evidence gathering\nFetches repo metadata, file tree, and key file contents. This evidence is the only input to the AI."},"typeVersion":1},{"id":"s1000003-0000-0000-0000-000000000003","name":"Sticky Note - AI","type":"n8n-nodes-base.stickyNote","position":[-896,80],"parameters":{"color":6,"width":588,"height":500,"content":"## AI analysis\nClaude Sonnet 4.5 analyzes only what exists in the code. Anti-hallucination rules enforced. Markdown auto-fixed."},"typeVersion":1},{"id":"s1000004-0000-0000-0000-000000000004","name":"Sticky Note - Delivery","type":"n8n-nodes-base.stickyNote","position":[-288,48],"parameters":{"color":6,"width":1560,"height":352,"content":"## Delivery\nAssembles blueprint, pushes to repo, notifies Slack, and returns a success page."},"typeVersion":1}],"settings":{"executionOrder":"v1","saveExecutionProgress":true,"saveDataErrorExecution":"all","saveDataSuccessExecution":"all"},"connections":{"Fix Markdown":{"main":[[{"node":"Generate Dashboard HTML","type":"main","index":0}]]},"Blueprint Form":{"main":[[{"node":"Parse Owner and Repo","type":"main","index":0}]]},"Fetch Repo Tree":{"main":[[{"node":"Identify Key Files","type":"main","index":0}]]},"Notify on Update":{"main":[[{"node":"Send Success Page","type":"main","index":0}]]},"Claude 3.5 Sonnet":{"ai_languageModel":[[{"node":"Analyze Architecture","type":"ai_languageModel","index":0}]]},"Prepare LLM Input":{"main":[[{"node":"Analyze Architecture","type":"main","index":0}]]},"Prepare Push Data":{"main":[[{"node":"Push README_ARCH.md","type":"main","index":0}]]},"Identify Key Files":{"main":[[{"node":"Fetch Key File Contents","type":"main","index":0}]]},"Receive GitHub URL":{"main":[[{"node":"Parse Owner and Repo","type":"main","index":0}]]},"Fetch Repo Metadata":{"main":[[{"node":"Fetch Repo Tree","type":"main","index":0}]]},"Push README_ARCH.md":{"main":[[{"node":"Notify on Update","type":"main","index":0}]]},"Analyze Architecture":{"main":[[{"node":"Fix Markdown","type":"main","index":0}]]},"Parse Owner and Repo":{"main":[[{"node":"Fetch Repo Metadata","type":"main","index":0}]]},"Fetch Existing README":{"main":[[{"node":"Prepare Push Data","type":"main","index":0}]]},"Fetch Key File Contents":{"main":[[{"node":"Prepare LLM Input","type":"main","index":0}]]},"Generate Dashboard HTML":{"main":[[{"node":"Fetch Existing README","type":"main","index":0}]]}}},"lastUpdatedBy":1,"workflowInfo":{"nodeCount":22,"nodeTypes":{"n8n-nodes-base.code":{"count":6},"n8n-nodes-base.slack":{"count":1},"n8n-nodes-base.webhook":{"count":1},"n8n-nodes-base.stickyNote":{"count":5},"n8n-nodes-base.formTrigger":{"count":1},"n8n-nodes-base.httpRequest":{"count":5},"n8n-nodes-base.respondToWebhook":{"count":1},"@n8n/n8n-nodes-langchain.chainLlm":{"count":1},"@n8n/n8n-nodes-langchain.lmChatAnthropic":{"count":1}}},"status":"published","readyToDemo":null,"user":{"name":"Surya Vardhan Yalavarthi","username":"suryayalavarthi","bio":"CS/Data Science student at UC, exploring what's possible with n8n and agentic AI workflows. I build practical automations that solve real engineering problems — focused on evidence-based AI, clean outputs, and no hallucinations. Currently diving deeper into Data Science and Machine Learning.","verified":true,"links":["https://www.suryayalavarthi.dev"],"avatar":"https://gravatar.com/avatar/420a0b3f344404512d778a86376e6155000918989388997e17fd407cb3f0f4ba?r=pg&d=retro&size=200"},"nodes":[{"id":19,"icon":"file:httprequest.svg","name":"n8n-nodes-base.httpRequest","codex":{"data":{"alias":["API","Request","URL","Build","cURL"],"resources":{"generic":[{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/","icon":"🧬","label":"Why business process automation with n8n can change your daily life"},{"url":"https://n8n.io/blog/automatically-pulling-and-visualizing-data-with-n8n/","icon":"📈","label":"Automatically pulling and visualizing data with n8n"},{"url":"https://n8n.io/blog/learn-how-to-automatically-cross-post-your-content-with-n8n/","icon":"✍️","label":"Learn how to automatically cross-post your content with n8n"},{"url":"https://n8n.io/blog/automatically-adding-expense-receipts-to-google-sheets-with-telegram-mindee-twilio-and-n8n/","icon":"🧾","label":"Automatically Adding Expense Receipts to Google Sheets with Telegram, Mindee, Twilio, and n8n"},{"url":"https://n8n.io/blog/running-n8n-on-ships-an-interview-with-maranics/","icon":"🛳","label":"Running n8n on ships: An interview with Maranics"},{"url":"https://n8n.io/blog/what-are-apis-how-to-use-them-with-no-code/","icon":" 🪢","label":"What are APIs and how to use them with no code"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/world-poetry-day-workflow/","icon":"📜","label":"Celebrating World Poetry Day with a daily poem in Telegram"},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/automate-designs-with-bannerbear-and-n8n/","icon":"🎨","label":"Automate Designs with Bannerbear and n8n"},{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/building-an-expense-tracking-app-in-10-minutes/","icon":"📱","label":"Building an expense tracking app in 10 minutes"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/how-to-use-the-http-request-node-the-swiss-army-knife-for-workflow-automation/","icon":"🧰","label":"How to use the HTTP Request Node - The Swiss Army Knife for Workflow Automation"},{"url":"https://n8n.io/blog/learn-how-to-use-webhooks-with-mattermost-slash-commands/","icon":"🦄","label":"Learn how to use webhooks with Mattermost slash commands"},{"url":"https://n8n.io/blog/how-a-membership-development-manager-automates-his-work-and-investments/","icon":"📈","label":"How a Membership Development Manager automates his work and investments"},{"url":"https://n8n.io/blog/a-low-code-bitcoin-ticker-built-with-questdb-and-n8n-io/","icon":"📈","label":"A low-code bitcoin ticker built with QuestDB and n8n.io"},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/automations-for-activists/","icon":"✨","label":"How Common Knowledge use workflow automation for activism"},{"url":"https://n8n.io/blog/creating-scheduled-text-affirmations-with-n8n/","icon":"🤟","label":"Creating scheduled text affirmations with n8n"},{"url":"https://n8n.io/blog/how-goomer-automated-their-operations-with-over-200-n8n-workflows/","icon":"🛵","label":"How Goomer automated their operations with over 200 n8n workflows"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"output\"]","defaults":{"name":"HTTP Request","color":"#0004F5"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00MCAyMEM0MCA4Ljk1MzE0IDMxLjA0NjkgMCAyMCAwQzguOTUzMTQgMCAwIDguOTUzMTQgMCAyMEMwIDMxLjA0NjkgOC45NTMxNCA0MCAyMCA0MEMzMS4wNDY5IDQwIDQwIDMxLjA0NjkgNDAgMjBaTTIwIDM2Ljk0NThDMTguODg1MiAzNi45NDU4IDE3LjEzNzggMzUuOTY3IDE1LjQ5OTggMzIuNjk4NUMxNC43OTY0IDMxLjI5MTggMTQuMTk2MSAyOS41NDMxIDEzLjc1MjYgMjcuNjg0N0gyNi4xODk4QzI1LjgwNDUgMjkuNTQwMyAyNS4yMDQ0IDMxLjI5MDEgMjQuNTAwMiAzMi42OTg1QzIyLjg2MjIgMzUuOTY3IDIxLjExNDggMzYuOTQ1OCAyMCAzNi45NDU4Wk0xMi45MDY0IDIwQzEyLjkwNjQgMjEuNjA5NyAxMy4wMDg3IDIzLjE2NCAxMy4yMDAzIDI0LjYzMDVIMjYuNzk5N0MyNi45OTEzIDIzLjE2NCAyNy4wOTM2IDIxLjYwOTcgMjcuMDkzNiAyMEMyNy4wOTM2IDE4LjM5MDMgMjYuOTkxMyAxNi44MzYgMjYuNzk5NyAxNS4zNjk1SDEzLjIwMDNDMTMuMDA4NyAxNi44MzYgMTIuOTA2NCAxOC4zOTAzIDEyLjkwNjQgMjBaTTIwIDMuMDU0MTlDMjEuMTE0OSAzLjA1NDE5IDIyLjg2MjIgNC4wMzA3OCAyNC41MDAxIDcuMzAwMzlDMjUuMjA2NiA4LjcxNDA4IDI1LjgwNzIgMTAuNDA2NyAyNi4xOTIgMTIuMzE1M0gxMy43NTAxQzE0LjE5MzMgMTAuNDA0NyAxNC43OTQyIDguNzEyNTQgMTUuNDk5OCA3LjMwMDY0QzE3LjEzNzcgNC4wMzA4MyAxOC44ODUxIDMuMDU0MTkgMjAgMy4wNTQxOVpNMzAuMTQ3OCAyMEMzMC4xNDc4IDE4LjQwOTkgMzAuMDU0MyAxNi44NjE3IDI5LjgyMjcgMTUuMzY5NUgzNi4zMDQyQzM2LjcyNTIgMTYuODQyIDM2Ljk0NTggMTguMzk2NCAzNi45NDU4IDIwQzM2Ljk0NTggMjEuNjAzNiAzNi43MjUyIDIzLjE1OCAzNi4zMDQyIDI0LjYzMDVIMjkuODIyN0MzMC4wNTQzIDIzLjEzODMgMzAuMTQ3OCAyMS41OTAxIDMwLjE0NzggMjBaTTI2LjI3NjcgNC4yNTUxMkMyNy42MzY1IDYuMzYwMTkgMjguNzExIDkuMTMyIDI5LjM3NzQgMTIuMzE1M0gzNS4xMDQ2QzMzLjI1MTEgOC42NjggMzAuMTA3IDUuNzgzNDYgMjYuMjc2NyA0LjI1NTEyWk0xMC42MjI2IDEyLjMxNTNINC44OTI5M0M2Ljc1MTQ3IDguNjY3ODQgOS44OTM1MSA1Ljc4MzQxIDEzLjcyMzIgNC4yNTUxM0MxMi4zNjM1IDYuMzYwMjEgMTEuMjg5IDkuMTMyMDEgMTAuNjIyNiAxMi4zMTUzWk0zLjA1NDE5IDIwQzMuMDU0MTkgMjEuNjAzIDMuMjc3NDMgMjMuMTU3NSAzLjY5NDg0IDI0LjYzMDVIMTAuMTIxN0M5Ljk0NjE5IDIzLjE0MiA5Ljg1MjIyIDIxLjU5NDMgOS44NTIyMiAyMEM5Ljg1MjIyIDE4LjQwNTcgOS45NDYxOSAxNi44NTggMTAuMTIxNyAxNS4zNjk1SDMuNjk0ODRDMy4yNzc0MyAxNi44NDI1IDMuMDU0MTkgMTguMzk3IDMuMDU0MTkgMjBaTTI2LjI3NjYgMzUuNzQyN0MyNy42MzY1IDMzLjYzOTMgMjguNzExIDMwLjg2OCAyOS4zNzc0IDI3LjY4NDdIMzUuMTA0NkMzMy4yNTEgMzEuMzMyMiAzMC4xMDY4IDM0LjIxNzkgMjYuMjc2NiAzNS43NDI3Wk0xMy43MjM0IDM1Ljc0MjdDOS44OTM2OSAzNC4yMTc5IDYuNzUxNTUgMzEuMzMyNCA0Ljg5MjkzIDI3LjY4NDdIMTAuNjIyNkMxMS4yODkgMzAuODY4IDEyLjM2MzUgMzMuNjM5MyAxMy43MjM0IDM1Ljc0MjdaIiBmaWxsPSIjM0E0MkU5Ii8+Cjwvc3ZnPgo="},"displayName":"HTTP Request","typeVersion":4,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":40,"icon":"file:slack.svg","name":"n8n-nodes-base.slack","codex":{"data":{"alias":["human","form","wait","hitl","approval"],"resources":{"generic":[{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/automate-your-data-processing-pipeline-in-9-steps-with-n8n/","icon":"⚙️","label":"Automate your data processing pipeline in 9 steps"},{"url":"https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/","icon":"👥","label":"How to get started with CRM automation (with 3 no-code workflow ideas"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/build-your-own-virtual-assistant-with-n8n-a-step-by-step-guide/","icon":"👦","label":"Build your own virtual assistant with n8n: A step by step guide"},{"url":"https://n8n.io/blog/how-to-automatically-give-kudos-to-contributors-with-github-slack-and-n8n/","icon":"👏","label":"How to automatically give kudos to contributors with GitHub, Slack, and n8n"},{"url":"https://n8n.io/blog/automations-for-activists/","icon":"✨","label":"How Common Knowledge use workflow automation for activism"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.slack/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/slack/"}]},"categories":["Communication","HITL"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"HITL":["Human in the Loop"]}}},"group":"[\"output\"]","defaults":{"name":"Slack"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiB2aWV3Qm94PSIwIDAgMTUwLjg1MiAxNTAuODUyIj48dXNlIHhsaW5rOmhyZWY9IiNhIiB4PSIuOTI2IiB5PSIuOTI2Ii8+PHN5bWJvbCBpZD0iYSIgb3ZlcmZsb3c9InZpc2libGUiPjxnIHN0cm9rZS13aWR0aD0iMS44NTIiPjxwYXRoIGZpbGw9IiNlMDFlNWEiIHN0cm9rZT0iI2UwMWU1YSIgZD0iTTQwLjc0MSA5My41NWMwLTguNzM1IDYuNjA3LTE1Ljc3MiAxNC44MTUtMTUuNzcyczE0LjgxNSA3LjAzNyAxNC44MTUgMTUuNzcydjM4LjgyNGMwIDguNzM3LTYuNjA3IDE1Ljc3NC0xNC44MTUgMTUuNzc0cy0xNC44MTUtNy4wMzctMTQuODE1LTE1Ljc3MnoiLz48cGF0aCBmaWxsPSIjZWNiMjJkIiBzdHJva2U9IiNlY2IyMmQiIGQ9Ik05My41NSAxMDcuNDA4Yy04LjczNSAwLTE1Ljc3Mi02LjYwNy0xNS43NzItMTQuODE1czcuMDM3LTE0LjgxNSAxNS43NzItMTQuODE1aDM4LjgyNmM4LjczNSAwIDE1Ljc3MiA2LjYwNyAxNS43NzIgMTQuODE1cy03LjAzNyAxNC44MTUtMTUuNzcyIDE0LjgxNXoiLz48cGF0aCBmaWxsPSIjMmZiNjdjIiBzdHJva2U9IiMyZmI2N2MiIGQ9Ik03Ny43NzggMTUuNzcyQzc3Ljc3OCA3LjAzNyA4NC4zODUgMCA5Mi41OTMgMHMxNC44MTUgNy4wMzcgMTQuODE1IDE1Ljc3MnYzOC44MjZjMCA4LjczNS02LjYwNyAxNS43NzItMTQuODE1IDE1Ljc3MnMtMTQuODE1LTcuMDM3LTE0LjgxNS0xNS43NzJ6Ii8+PHBhdGggZmlsbD0iIzM2YzVmMSIgc3Ryb2tlPSIjMzZjNWYxIiBkPSJNMTUuNzcyIDcwLjM3MUM3LjAzNyA3MC4zNzEgMCA2My43NjMgMCA1NS41NTZzNy4wMzctMTQuODE1IDE1Ljc3Mi0xNC44MTVoMzguODI2YzguNzM1IDAgMTUuNzcyIDYuNjA3IDE1Ljc3MiAxNC44MTVzLTcuMDM3IDE0LjgxNS0xNS43NzIgMTQuODE1eiIvPjxnIHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiPjxwYXRoIGZpbGw9IiNlY2IyMmQiIHN0cm9rZT0iI2VjYjIyZCIgZD0iTTc3Ljc3OCAxMzMuMzMzYzAgOC4yMDggNi42MDcgMTQuODE1IDE0LjgxNSAxNC44MTVzMTQuODE1LTYuNjA3IDE0LjgxNS0xNC44MTUtNi42MDctMTQuODE1LTE0LjgxNS0xNC44MTVINzcuNzc4eiIvPjxwYXRoIGZpbGw9IiMyZmI2N2MiIHN0cm9rZT0iIzJmYjY3YyIgZD0iTTEzMy4zMzQgNzAuMzcxaC0xNC44MTVWNTUuNTU2YzAtOC4yMDcgNi42MDctMTQuODE1IDE0LjgxNS0xNC44MTVzMTQuODE1IDYuNjA3IDE0LjgxNSAxNC44MTUtNi42MDcgMTQuODE1LTE0LjgxNSAxNC44MTV6Ii8+PHBhdGggZmlsbD0iI2UwMWU1YSIgc3Ryb2tlPSIjZTAxZTVhIiBkPSJNMTQuODE1IDc3Ljc3OEgyOS42M3YxNC44MTVjMCA4LjIwNy02LjYwNyAxNC44MTUtMTQuODE1IDE0LjgxNVMwIDEwMC44IDAgOTIuNTkzczYuNjA3LTE0LjgxNSAxNC44MTUtMTQuODE1eiIvPjxwYXRoIGZpbGw9IiMzNmM1ZjEiIHN0cm9rZT0iIzM2YzVmMSIgZD0iTTcwLjM3MSAxNC44MTVWMjkuNjNINTUuNTU2Yy04LjIwNyAwLTE0LjgxNS02LjYwNy0xNC44MTUtMTQuODE1UzQ3LjM0OCAwIDU1LjU1NiAwczE0LjgxNSA2LjYwNyAxNC44MTUgMTQuODE1eiIvPjwvZz48L2c+PC9zeW1ib2w+PC9zdmc+"},"displayName":"Slack","typeVersion":2,"nodeCategories":[{"id":6,"name":"Communication"},{"id":28,"name":"HITL"}]},{"id":47,"icon":"file:webhook.svg","name":"n8n-nodes-base.webhook","codex":{"data":{"alias":["HTTP","API","Build","WH"],"resources":{"generic":[{"url":"https://n8n.io/blog/learn-how-to-automatically-cross-post-your-content-with-n8n/","icon":"✍️","label":"Learn how to automatically cross-post your content with n8n"},{"url":"https://n8n.io/blog/running-n8n-on-ships-an-interview-with-maranics/","icon":"🛳","label":"Running n8n on ships: An interview with Maranics"},{"url":"https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/","icon":"🔗","label":"How to build a low-code, self-hosted URL shortener in 3 steps"},{"url":"https://n8n.io/blog/what-are-apis-how-to-use-them-with-no-code/","icon":" 🪢","label":"What are APIs and how to use them with no code"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/how-a-digital-strategist-uses-n8n-for-online-marketing/","icon":"💻","label":"How a digital strategist uses n8n for online marketing"},{"url":"https://n8n.io/blog/the-ultimate-guide-to-automate-your-video-collaboration-with-whereby-mattermost-and-n8n/","icon":"📹","label":"The ultimate guide to automate your video collaboration with Whereby, Mattermost, and n8n"},{"url":"https://n8n.io/blog/how-to-automatically-give-kudos-to-contributors-with-github-slack-and-n8n/","icon":"👏","label":"How to automatically give kudos to contributors with GitHub, Slack, and n8n"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/","icon":"🧠","label":"Why this Product Manager loves workflow automation with n8n"},{"url":"https://n8n.io/blog/creating-custom-incident-response-workflows-with-n8n/","label":"How to automate every step of an incident response workflow"},{"url":"https://n8n.io/blog/learn-to-build-powerful-api-endpoints-using-webhooks/","icon":"🧰","label":"Learn to Build Powerful API Endpoints Using Webhooks"},{"url":"https://n8n.io/blog/learn-how-to-use-webhooks-with-mattermost-slash-commands/","icon":"🦄","label":"Learn how to use webhooks with Mattermost slash commands"},{"url":"https://n8n.io/blog/how-goomer-automated-their-operations-with-over-200-n8n-workflows/","icon":"🛵","label":"How Goomer automated their operations with over 200 n8n workflows"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.webhook/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"trigger\"]","defaults":{"name":"Webhook"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCI+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTM1IDM3Yy0yLjIgMC00LTEuOC00LTRzMS44LTQgNC00IDQgMS44IDQgNC0xLjggNC00IDQiLz48cGF0aCBmaWxsPSIjMzc0NzRmIiBkPSJNMzUgNDNjLTMgMC01LjktMS40LTcuOC0zLjdsMy4xLTIuNWMxLjEgMS40IDIuOSAyLjMgNC43IDIuMyAzLjMgMCA2LTIuNyA2LTZzLTIuNy02LTYtNmMtMSAwLTIgLjMtMi45LjdsLTEuNyAxTDIzLjMgMTZsMy41LTEuOSA1LjMgOS40YzEtLjMgMi0uNSAzLS41IDUuNSAwIDEwIDQuNSAxMCAxMFM0MC41IDQzIDM1IDQzIi8+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTE0IDQzQzguNSA0MyA0IDM4LjUgNCAzM2MwLTQuNiAzLjEtOC41IDcuNS05LjdsMSAzLjlDOS45IDI3LjkgOCAzMC4zIDggMzNjMCAzLjMgMi43IDYgNiA2czYtMi43IDYtNnYtMmgxNXY0SDIzLjhjLS45IDQuNi01IDgtOS44IDgiLz48cGF0aCBmaWxsPSIjZTkxZTYzIiBkPSJNMTQgMzdjLTIuMiAwLTQtMS44LTQtNHMxLjgtNCA0LTQgNCAxLjggNCA0LTEuOCA0LTQgNCIvPjxwYXRoIGZpbGw9IiMzNzQ3NGYiIGQ9Ik0yNSAxOWMtMi4yIDAtNC0xLjgtNC00czEuOC00IDQtNCA0IDEuOCA0IDQtMS44IDQtNCA0Ii8+PHBhdGggZmlsbD0iI2U5MWU2MyIgZD0ibTE1LjcgMzQtMy40LTIgNS45LTkuN2MtMi0xLjktMy4yLTQuNS0zLjItNy4zIDAtNS41IDQuNS0xMCAxMC0xMHMxMCA0LjUgMTAgMTBjMCAuOS0uMSAxLjctLjMgMi41bC0zLjktMWMuMS0uNS4yLTEgLjItMS41IDAtMy4zLTIuNy02LTYtNnMtNiAyLjctNiA2YzAgMi4xIDEuMSA0IDIuOSA1LjFsMS43IDF6Ii8+PC9zdmc+"},"displayName":"Webhook","typeVersion":2,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":535,"icon":"file:webhook.svg","name":"n8n-nodes-base.respondToWebhook","codex":{"data":{"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.respondtowebhook/"}]},"categories":["Core Nodes","Utility"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"transform\"]","defaults":{"name":"Respond to Webhook"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCI+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTM1IDM3Yy0yLjIgMC00LTEuOC00LTRzMS44LTQgNC00IDQgMS44IDQgNC0xLjggNC00IDQiLz48cGF0aCBmaWxsPSIjMzc0NzRmIiBkPSJNMzUgNDNjLTMgMC01LjktMS40LTcuOC0zLjdsMy4xLTIuNWMxLjEgMS40IDIuOSAyLjMgNC43IDIuMyAzLjMgMCA2LTIuNyA2LTZzLTIuNy02LTYtNmMtMSAwLTIgLjMtMi45LjdsLTEuNyAxTDIzLjMgMTZsMy41LTEuOSA1LjMgOS40YzEtLjMgMi0uNSAzLS41IDUuNSAwIDEwIDQuNSAxMCAxMFM0MC41IDQzIDM1IDQzIi8+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTE0IDQzQzguNSA0MyA0IDM4LjUgNCAzM2MwLTQuNiAzLjEtOC41IDcuNS05LjdsMSAzLjlDOS45IDI3LjkgOCAzMC4zIDggMzNjMCAzLjMgMi43IDYgNiA2czYtMi43IDYtNnYtMmgxNXY0SDIzLjhjLS45IDQuNi01IDgtOS44IDgiLz48cGF0aCBmaWxsPSIjZTkxZTYzIiBkPSJNMTQgMzdjLTIuMiAwLTQtMS44LTQtNHMxLjgtNCA0LTQgNCAxLjggNCA0LTEuOCA0LTQgNCIvPjxwYXRoIGZpbGw9IiMzNzQ3NGYiIGQ9Ik0yNSAxOWMtMi4yIDAtNC0xLjgtNC00czEuOC00IDQtNCA0IDEuOCA0IDQtMS44IDQtNCA0Ii8+PHBhdGggZmlsbD0iI2U5MWU2MyIgZD0ibTE1LjcgMzQtMy40LTIgNS45LTkuN2MtMi0xLjktMy4yLTQuNS0zLjItNy4zIDAtNS41IDQuNS0xMCAxMC0xMHMxMCA0LjUgMTAgMTBjMCAuOS0uMSAxLjctLjMgMi41bC0zLjktMWMuMS0uNS4yLTEgLjItMS41IDAtMy4zLTIuNy02LTYtNnMtNiAyLjctNiA2YzAgMi4xIDEuMSA0IDIuOSA1LjFsMS43IDF6Ii8+PC9zdmc+"},"displayName":"Respond to Webhook","typeVersion":2,"nodeCategories":[{"id":7,"name":"Utility"},{"id":9,"name":"Core Nodes"}]},{"id":565,"icon":"fa:sticky-note","name":"n8n-nodes-base.stickyNote","codex":{"data":{"alias":["Comments","Notes","Sticky"],"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"input\"]","defaults":{"name":"Sticky Note","color":"#FFD233"},"iconData":{"icon":"sticky-note","type":"icon"},"displayName":"Sticky Note","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":834,"icon":"file:code.svg","name":"n8n-nodes-base.code","codex":{"data":{"alias":["cpde","Javascript","JS","Python","Script","Custom Code","Function"],"details":"The Code node allows you to execute JavaScript in your workflow.","resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.code/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers","Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Code"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xMTcxXzQ0MSkiPgo8cGF0aCBkPSJNMTcwLjI4MyA0OEgxOTYuNUMyMDMuMTI3IDQ4IDIwOC41IDQyLjYyNzQgMjA4LjUgMzZWMTJDMjA4LjUgNS4zNzI1OCAyMDMuMTI3IDAgMTk2LjUgMEgxNzAuMjgzQzEyNi4xIDAgOTAuMjgzIDM1LjgxNzIgOTAuMjgzIDgwVjE3NkM5MC4yODMgMjA2LjkyOCA2NS4yMTA5IDIzMiAzNC4yODMgMjMySDIzQzE2LjM3MjYgMjMyIDExIDIzNy4zNzIgMTEgMjQ0VjI2OEMxMSAyNzQuNjI3IDE2LjM3MjQgMjgwIDIyLjk5OTYgMjgwTDM0LjI4MyAyODBDNjUuMjEwOSAyODAgOTAuMjgzIDMwNS4wNzIgOTAuMjgzIDMzNlY0NDBDOTAuMjgzIDQ3OS43NjQgMTIyLjUxOCA1MTIgMTYyLjI4MyA1MTJIMTk2LjVDMjAzLjEyNyA1MTIgMjA4LjUgNTA2LjYyNyAyMDguNSA1MDBWNDc2QzIwOC41IDQ2OS4zNzMgMjAzLjEyNyA0NjQgMTk2LjUgNDY0SDE2Mi4yODNDMTQ5LjAyOCA0NjQgMTM4LjI4MyA0NTMuMjU1IDEzOC4yODMgNDQwVjMzNkMxMzguMjgzIDMwOS4wMjIgMTI4LjAxMSAyODQuNDQzIDExMS4xNjQgMjY1Ljk2MUMxMDYuMTA5IDI2MC40MTYgMTA2LjEwOSAyNTEuNTg0IDExMS4xNjQgMjQ2LjAzOUMxMjguMDExIDIyNy41NTcgMTM4LjI4MyAyMDIuOTc4IDEzOC4yODMgMTc2VjgwQzEzOC4yODMgNjIuMzI2OSAxNTIuNjEgNDggMTcwLjI4MyA0OFoiIGZpbGw9IiNGRjk5MjIiLz4KPHBhdGggZD0iTTMwNSAzNkMzMDUgNDIuNjI3NCAzMTAuMzczIDQ4IDMxNyA0OEgzNDIuOTc5QzM2MC42NTIgNDggMzc0Ljk3OCA2Mi4zMjY5IDM3NC45NzggODBWMTc2QzM3NC45NzggMjAyLjk3OCAzODUuMjUxIDIyNy41NTcgNDAyLjA5OCAyNDYuMDM5QzQwNy4xNTMgMjUxLjU4NCA0MDcuMTUzIDI2MC40MTYgNDAyLjA5OCAyNjUuOTYxQzM4NS4yNTEgMjg0LjQ0MyAzNzQuOTc4IDMwOS4wMjIgMzc0Ljk3OCAzMzZWNDMyQzM3NC45NzggNDQ5LjY3MyAzNjAuNjUyIDQ2NCAzNDIuOTc5IDQ2NEgzMTdDMzEwLjM3MyA0NjQgMzA1IDQ2OS4zNzMgMzA1IDQ3NlY1MDBDMzA1IDUwNi42MjcgMzEwLjM3MyA1MTIgMzE3IDUxMkgzNDIuOTc5QzM4Ny4xNjEgNTEyIDQyMi45NzggNDc2LjE4MyA0MjIuOTc4IDQzMlYzMzZDNDIyLjk3OCAzMDUuMDcyIDQ0OC4wNTEgMjgwIDQ3OC45NzkgMjgwSDQ5MEM0OTYuNjI3IDI4MCA1MDIgMjc0LjYyOCA1MDIgMjY4VjI0NEM1MDIgMjM3LjM3MyA0OTYuNjI4IDIzMiA0OTAgMjMyTDQ3OC45NzkgMjMyQzQ0OC4wNTEgMjMyIDQyMi45NzggMjA2LjkyOCA0MjIuOTc4IDE3NlY4MEM0MjIuOTc4IDM1LjgxNzIgMzg3LjE2MSAwIDM0Mi45NzkgMEgzMTdDMzEwLjM3MyAwIDMwNSA1LjM3MjU4IDMwNSAxMlYzNloiIGZpbGw9IiNGRjk5MjIiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMTcxXzQ0MSI+CjxyZWN0IHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo="},"displayName":"Code","typeVersion":2,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":1123,"icon":"fa:link","name":"@n8n/n8n-nodes-langchain.chainLlm","codex":{"data":{"alias":["LangChain"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.chainllm/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Chains","Root Nodes"]}}},"group":"[\"transform\"]","defaults":{"name":"Basic LLM Chain","color":"#909298"},"iconData":{"icon":"link","type":"icon"},"displayName":"Basic LLM Chain","typeVersion":2,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]},{"id":1145,"icon":"file:anthropic.svg","name":"@n8n/n8n-nodes-langchain.lmChatAnthropic","codex":{"data":{"alias":["claude","sonnet","opus"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.lmchatanthropic/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Language Models","Root Nodes"],"Language Models":["Chat Models (Recommended)"]}}},"group":"[\"transform\"]","defaults":{"name":"Anthropic Chat Model"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NiIgaGVpZ2h0PSIzMiIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iIzdEN0Q4NyIgZD0iTTMyLjczIDBoLTYuOTQ1TDM4LjQ1IDMyaDYuOTQ1ek0xMi42NjUgMCAwIDMyaDcuMDgybDIuNTktNi43MmgxMy4yNWwyLjU5IDYuNzJoNy4wODJMMTkuOTI5IDB6bS0uNzAyIDE5LjMzNyA0LjMzNC0xMS4yNDYgNC4zMzQgMTEuMjQ2eiIvPjwvc3ZnPg=="},"displayName":"Anthropic Chat Model","typeVersion":1,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]},{"id":1225,"icon":"file:form.svg","name":"n8n-nodes-base.formTrigger","codex":{"data":{"alias":["table","submit","post"],"resources":{"generic":[],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.formtrigger/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Other Trigger Nodes"]}}},"group":"[\"trigger\"]","defaults":{"name":"On form submission"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NiIgaGVpZ2h0PSI0MCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iIzAwQjdCQyIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMzQuOTc4IDM3LjczMmExLjU2IDEuNTYgMCAwIDEtMS41NjIgMS41NjNINi4yNmExLjU2IDEuNTYgMCAwIDEtMS41NjMtMS41NjNWOS42MDdjMC0uNDA1LjE1Ny0uNzk0LjQzOC0xLjA4Nmw2LjMwNC02LjUzMXY1LjM0NEg4LjIxM2ExLjE3MiAxLjE3MiAwIDEgMCAwIDIuMzQzaDQuNDNhMS4xNyAxLjE3IDAgMCAwIDEuMTcxLTEuMTcxVi4yMzJoMTkuNjAyYTEuNTYgMS41NiAwIDAgMSAxLjU2MiAxLjU2M3YxMC4zMjdsLTIuODYgMi44Ni04LjI1MiA4LjI3NmE0MTMuMDA2IDQxMy4wMDYgMCAwIDEtMS42NTQgMS42NjJsLS4zMzcuMzM3YTIgMiAwIDAgMC0uNTU3IDEuMDhMMjAuMyAzMS45MjJjLS4xMDguNjM4LS4yMTUgMS4wNzkuMjExIDEuNDE4LjQwMy4zMi45LjE3NCAxLjU0LjA2Nmw1LjQwOC0uOTI4YTIgMiAwIDAgMCAxLjA4LS41NTZsNi40NC02LjQyOXptLTI0LjAzLTIxLjI2NWExLjE4IDEuMTggMCAwIDAgMS4xNzEgMS4xNzJoMTMuMTYzYTEuMTcyIDEuMTcyIDAgMSAwIDAtMi4zNDRIMTIuMTE5YTEuMTcgMS4xNyAwIDAgMC0xLjE3MiAxLjE3Mm03LjI5NCAxNC43NjZhMS4xNyAxLjE3IDAgMCAwLTEuMTcyLTEuMTcySDEyLjEyYTEuMTcyIDEuMTcyIDAgMSAwIDAgMi4zNDNoNC45NTFhMS4xNyAxLjE3IDAgMCAwIDEuMTcyLTEuMTcybS44Ni03LjM5MWExLjE3IDEuMTcgMCAwIDAtMS4xNzItMS4xNzJoLTUuODExYTEuMTcyIDEuMTcyIDAgMSAwIDAgMi4zNDNoNS44MWExLjE2NCAxLjE2NCAwIDAgMCAxLjE3My0xLjE3MSIgY2xpcC1ydWxlPSJldmVub2RkIi8+PHBhdGggZmlsbD0iIzAwQjdCQyIgZD0ibTMzLjUzMiAxNi4zOTcgNC4yODktNC4yODkgMy43NTggMy43MSAxLjYxNy0xLjYxNiAyLjI1OCAyLjI1N2MuMjE4LjIxOC4zNC41MTMuMzQzLjgyLS4wMDIuMzExLS4xMjUuNjA4LS4zNDQuODNsLTYuODA0IDYuNzk2YTEuMTMgMS4xMyAwIDAgMS0uODI4LjM0MyAxLjE1IDEuMTUgMCAwIDEtLjgyOC0uMzQzIDEuMTggMS4xOCAwIDAgMSAwLTEuNjU3bDUuOTc2LTUuOTY4LTEuMzEyLTEuMzEzLTEuMzgzIDEuNDE0LTEzLjE0OSAxMy4xMjUtNC42MTcuNzgyLjc4Mi00LjYxNy4zMzYtLjMzNyAyLjU2MiAyLjU1NWExLjEgMS4xIDAgMCAwIC44MjguMzQ0Yy4zMTIuMDA1LjYxMi0uMTIuODI4LS4zNDRhMS4xOCAxLjE4IDAgMCAwIDAtMS42NTZsLTIuNTYyLTIuNTYyek00NC43MzYgMTIuMjRjMCAuNDE0LS4xNjMuODEtLjQ1NCAxLjEwMmwtLjkyMi45MTQtMy44NTItMy44MjguOTMtLjkzYTEuNTYzIDEuNTYzIDAgMCAxIDIuMjAzIDBsMS42NCAxLjY0MWMuMjkxLjI5My40NTUuNjkuNDU1IDEuMTAyIi8+PC9zdmc+"},"displayName":"n8n Form Trigger","typeVersion":3,"nodeCategories":[{"id":9,"name":"Core Nodes"}]}],"categories":[{"id":5,"name":"Engineering"},{"id":49,"name":"AI Summarization"}],"image":[]}}