{"workflow":{"id":12216,"name":"Generate SEO-optimized PWA website with Google Gemini and deploy to S3","views":11,"recentViews":0,"totalViews":11,"createdAt":"2025-12-27T14:21:46.088Z","description":"# Generate SEO-Optimized PWA Website with AI and Deploy to S3\n\n## Who's it for\n\nThis workflow is designed for agencies, freelancers, and businesses who want to generate **production-ready static websites** with built-in SEO optimization and PWA (Progressive Web App) capabilities — all without manual coding.\n\nIt is best suited for users who need landing pages, portfolios, event pages, or client microsites that are **mobile-friendly, SEO-optimized, and installable as apps** on any device.\n\n## What it does\n\nThis workflow collects website requirements via an n8n form, uses **Google Gemini AI** to generate a complete HTML page with SEO metadata and PWA components (service worker, manifest, offline support), assembles all files, uploads them to AWS S3, and sends the published URL via email.\n\nUnlike basic AI website generators, this workflow produces **three separate AI-generated outputs** that are assembled into a complete, deployable package:\n\n- ✅ SEO-optimized meta tags, Open Graph, and structured data (Schema.org)\n- ✅ PWA manifest + service worker for offline support and \"Add to Home Screen\"\n- ✅ Responsive, single-page website with embedded CSS and JavaScript\n- ✅ All files deployed as a cohesive package to S3\n\n## How it works\n\n1. **Website Request Form** — User fills out requirements (name, purpose, colors, content, keywords).\n2. **Process Form Data** — Workflow structures the input for AI processing.\n3. **Generate SEO Metadata** (Gemini AI) — Creates meta tags, Open Graph tags, Twitter cards, and JSON-LD structured data based on the site's purpose and keywords.\n4. **Generate Website HTML** (Gemini AI) — Produces a complete, responsive HTML/CSS/JS page incorporating the SEO metadata.\n5. **Generate PWA Components** — Creates `manifest.json` and `service-worker.js` for offline capability and app-like behavior.\n6. **Assemble All Files** — Merges HTML, manifest, and service worker into a deployment-ready package.\n7. **Convert to Binary** — Prepares all files for S3 upload.\n8. **Upload to S3** — Deploys all files (`index.html`, `manifest.json`, `sw.js`) with proper content types.\n9. **Build Response** — Constructs the live URL and deployment summary.\n10. **Send Confirmation Email** — Delivers the live URL, SEO report, and PWA installation instructions to the user.\n\n## Requirements\n\nTo use this workflow, you will need:\n\n- A **Google Gemini API key** (Gemini 1.5 Flash or Pro recommended)\n- An **AWS account** with S3 access\n- An S3 bucket configured for **static website hosting**\n- A **Gmail account** for sending confirmation emails (or replace with another email service)\n\n## AWS Setup Guide\n\n### Step 1: Create an IAM User for n8n\n\n1. Go to AWS Console → IAM → Users → Create user\n2. User name: `n8n-s3-uploader`\n3. Attach the following custom policy:\n```json\n{\n  \"Version\": \"2012-10-17\",\n  \"Statement\": [\n    {\n      \"Sid\": \"S3WebsiteUpload\",\n      \"Effect\": \"Allow\",\n      \"Action\": [\n        \"s3:PutObject\",\n        \"s3:PutObjectAcl\",\n        \"s3:GetObject\",\n        \"s3:ListBucket\"\n      ],\n      \"Resource\": [\n        \"arn:aws:s3:::YOUR_BUCKET_NAME\",\n        \"arn:aws:s3:::YOUR_BUCKET_NAME/*\"\n      ]\n    }\n  ]\n}\n```\n\n4. Create access key → Select \"Application running outside AWS\"\n5. Save the Access Key ID and Secret Access Key for n8n credential setup\n\n### Step 2: Create an S3 Bucket\n\n1. Go to AWS Console → S3 → Create bucket\n2. Bucket name: Choose a globally unique name (e.g., `my-ai-websites-12345`)\n3. Region: Select your preferred region\n4. **Object Ownership**: Select \"ACLs enabled\" → \"Bucket owner preferred\"\n5. **Block Public Access**: Uncheck \"Block all public access\" and acknowledge the warning\n6. Create bucket\n\n### Step 3: Enable Static Website Hosting\n\n1. Go to your bucket → Properties tab\n2. Scroll to \"Static website hosting\" → Edit\n3. Enable static website hosting\n4. Index document: `index.html`\n5. Error document: `index.html` (for PWA routing)\n6. Save changes\n7. Note the bucket website endpoint URL (e.g., `http://YOUR_BUCKET_NAME.s3-website-REGION.amazonaws.com`)\n\n### Step 4: Add Bucket Policy for Public Access\n\n1. Go to your bucket → Permissions tab\n2. Scroll to \"Bucket policy\" → Edit\n3. Paste the following policy:\n```json\n{\n  \"Version\": \"2012-10-17\",\n  \"Statement\": [\n    {\n      \"Sid\": \"PublicReadGetObject\",\n      \"Effect\": \"Allow\",\n      \"Principal\": \"*\",\n      \"Action\": \"s3:GetObject\",\n      \"Resource\": \"arn:aws:s3:::YOUR_BUCKET_NAME/*\"\n    }\n  ]\n}\n```\n\n4. Replace `YOUR_BUCKET_NAME` with your actual bucket name\n5. Save changes\n\n### Step 5: Configure n8n Credentials\n\n1. In n8n, go to Credentials → Add credential → AWS\n2. Enter the Access Key ID and Secret Access Key from Step 1\n3. Set the region to match your S3 bucket region\n4. Save the credential\n\n## Important limitations\n\n- Generated websites are single-page only (no multi-page navigation).\n- The AI may occasionally produce varying results depending on prompt complexity.\n- S3 bucket must have public access enabled for the websites to be viewable.\n- PWA \"Add to Home Screen\" requires HTTPS — use CloudFront for production deployments.\n- No custom domain support out of the box (requires additional CloudFront/Route53 setup).\n- Service worker caching is basic (cache-first strategy); for advanced caching, customize the generated `sw.js`.\n- AWS charges may apply based on S3 storage and data transfer usage.\n\n## How to set up\n\n1. Complete the AWS Setup Guide above.\n2. Add your **Google Gemini API credential** in n8n.\n3. Add your **AWS credential** in n8n (from Step 5 above).\n4. Update the S3 bucket name in the \"Upload to S3\" node.\n5. Update the bucket URL in the \"Build Response\" node.\n6. Configure Gmail OAuth2 credential (or replace with your email service).\n7. Activate the workflow and share the form URL.\n\n## How to customize\n\n- **AI Model**: Swap Google Gemini for OpenAI, Anthropic, or any LLM supported by n8n.\n- **Form fields**: Add fields for target audience, language preference, or industry-specific requirements.\n- **SEO depth**: Extend the SEO prompt to generate sitemaps, robots.txt, or additional structured data types.\n- **PWA features**: Customize the service worker for push notifications, background sync, or advanced caching strategies.\n- **Notifications**: Replace Gmail with Slack, Discord, or webhook notifications.\n- **Storage**: Add a database node to track generated websites with analytics.\n- **Domain**: Integrate with CloudFront + Route53 for custom domains with HTTPS.\n- **Error handling**: Add error handling nodes and retry logic for production use.\n\n## What makes this different\n\nMost AI website generators create a basic HTML file. This workflow goes further:\n\n| Feature | Basic Generator | This Workflow |\n|---------|----------------|---------------|\n| HTML/CSS/JS | ✅ | ✅ |\n| SEO Meta Tags | ❌ | ✅ (AI-generated) |\n| Open Graph / Twitter Cards | ❌ | ✅ |\n| Schema.org Structured Data | ❌ | ✅ (JSON-LD) |\n| PWA Support | ❌ | ✅ (manifest + service worker) |\n| Offline Capability | ❌ | ✅ |\n| \"Add to Home Screen\" | ❌ | ✅ |\n| Multiple AI Calls | 1 | 2 (specialized prompts) |\n| Deployment Files | 1 (index.html) | 3+ (html + manifest + sw.js) |\n\n## Security Considerations\n\n- The generated websites are publicly accessible. Do not use this for sensitive content.\n- Consider adding authentication if you want to restrict who can generate websites.\n- Review AWS costs regularly to avoid unexpected charges.\n- For production use, set up CloudFront with HTTPS (required for full PWA functionality).\n- Service workers require HTTPS in production; localhost is exempt for testing.\n\n---\n\n**Note:**\nThis workflow was built using Google Gemini AI and AWS S3 static website hosting.\nFor production deployments, we recommend adding CloudFront for HTTPS, custom domains, and global CDN distribution.\n","workflow":{"meta":{"instanceId":"0fd24758e45cbed1f63c03b9ca7326acab4b855985945af441ee95f8874d3e22","templateCredsSetupCompleted":true},"nodes":[{"id":"cbd057a8-9404-4a25-833f-03cfc0afebf6","name":"Workflow Overview","type":"n8n-nodes-base.stickyNote","position":[928,992],"parameters":{"width":540,"height":832,"content":"## AI Multi-Language PWA Website Generator with SEO Optimization\n\n## How it works\n1. User fills out a detailed form with website requirements, target languages, and SEO keywords\n2. Form data is processed and structured for multi-stage AI generation\n3. AI generates comprehensive SEO metadata (meta tags, Open Graph, Schema.org, sitemap)\n4. AI creates a full multi-language, PWA-ready website with embedded SEO optimization\n5. PWA components are generated (Service Worker, Web App Manifest, sitemap.xml, robots.txt)\n6. All files are merged, optimized, and uploaded to AWS S3\n7. User receives an email with the live website URL and PWA installation instructions\n\n## Setup steps\n1. Configure **OpenAI** or **Google Gemini** credentials for AI generation\n2. Configure **AWS S3** credentials with an S3 bucket that has static website hosting enabled\n3. Configure **Gmail** credentials for sending confirmation emails\n4. Update the S3 bucket name in the Upload to S3 node\n5. Activate the workflow and share the form URL with users\n\n## Key features\n- Multi-language website generation (10+ languages)\n- Progressive Web App with offline support\n- AI-powered SEO optimization with structured data\n- Automatic sitemap.xml and robots.txt generation\n- Google Analytics and Facebook Pixel integration\n- Professional email notification with PWA install guide\n\n⚠️ Note: Requires OpenAI or Google Gemini API key, AWS S3 bucket, and Gmail credentials."},"typeVersion":1},{"id":"64026efa-a624-4ceb-98d6-51a94bc6929e","name":"Step 1 - Trigger & Config","type":"n8n-nodes-base.stickyNote","position":[1472,992],"parameters":{"color":7,"width":500,"height":380,"content":"## Trigger & Configuration\nCollects detailed website requirements including target languages, SEO keywords, design preferences, PWA options, and analytics IDs. Processes and structures all form data for the AI pipeline."},"typeVersion":1},{"id":"a15d2841-3f0e-41e1-a1ae-a4bfd330583d","name":"Step 2 - AI Generation","type":"n8n-nodes-base.stickyNote","position":[1984,992],"parameters":{"color":7,"width":628,"height":560,"content":"## AI SEO & Content Generation\nTwo-stage AI pipeline: first generates comprehensive SEO metadata (meta tags, Open Graph, Schema.org structured data), then creates a complete multi-language PWA website incorporating all SEO data, analytics codes, and responsive design."},"typeVersion":1},{"id":"ca18882c-0a9c-4cf1-9be0-8a1910f918de","name":"Step 3 - PWA & Files","type":"n8n-nodes-base.stickyNote","position":[2624,992],"parameters":{"color":7,"width":500,"height":560,"content":"## PWA Processing & File Assembly\nGenerates PWA components (Service Worker, Web App Manifest), SEO files (sitemap.xml, robots.txt), processes the AI-generated HTML, injects PWA registration code, and assembles all files for deployment."},"typeVersion":1},{"id":"5f54d7ae-c5c4-43ad-8058-74d440c38614","name":"Step 4 - Deploy & Notify","type":"n8n-nodes-base.stickyNote","position":[3152,992],"parameters":{"color":7,"width":720,"height":560,"content":"## Deploy & Notify\nSplits the file bundle into individual items, converts each to binary, uploads all files to S3 (HTML, Service Worker, Manifest, sitemap, robots.txt), builds a success response with all URLs, and sends a professional confirmation email with PWA installation instructions."},"typeVersion":1},{"id":"1817afe6-763d-4be4-bf42-0f147e621277","name":"Website Request Form","type":"n8n-nodes-base.formTrigger","position":[1520,1152],"webhookId":"4b01057c-abc5-452b-abf4-af7793eaa1da","parameters":{"options":{"respondWithOptions":{"values":{"formSubmittedText":"Your multi-language PWA website is being generated with AI..."}}},"formTitle":"AI Multi-Language PWA Website Generator","formFields":{"values":[{"fieldLabel":"Website Name","placeholder":"e.g., Global Tech Solutions","requiredField":true},{"fieldType":"dropdown","fieldLabel":"Primary Purpose","fieldOptions":{"values":[{"option":"Corporate Website"},{"option":"Portfolio"},{"option":"Product Landing Page"},{"option":"SaaS Landing"},{"option":"Blog"},{"option":"Event Page"},{"option":"Restaurant or Local Business"},{"option":"Non-profit"}]},"requiredField":true},{"fieldLabel":"Target Languages","placeholder":"e.g., en, ja, es, fr (comma-separated language codes)","requiredField":true},{"fieldType":"dropdown","fieldLabel":"Design Style","fieldOptions":{"values":[{"option":"Modern Minimalist"},{"option":"Corporate Professional"},{"option":"Creative Bold"},{"option":"Tech SaaS"},{"option":"Dark Mode"},{"option":"Colorful Playful"}]},"requiredField":true},{"fieldLabel":"SEO Keywords","placeholder":"e.g., web development, consulting, technology","requiredField":true},{"fieldLabel":"Main Heading","placeholder":"e.g., Transform Your Business with AI","requiredField":true},{"fieldType":"textarea","fieldLabel":"Business Description","placeholder":"Describe your business, products, or services in detail...","requiredField":true},{"fieldType":"email","fieldLabel":"Contact Email","placeholder":"user@example.com","requiredField":true},{"fieldLabel":"Company Name","placeholder":"e.g., Tech Solutions Inc."},{"fieldLabel":"Phone Number","placeholder":"+1234567890"},{"fieldLabel":"Social Media Links","placeholder":"Facebook, Twitter, LinkedIn URLs (comma-separated)"},{"fieldLabel":"Google Analytics ID","placeholder":"G-XXXXXXXXXX (optional)"},{"fieldLabel":"Facebook Pixel ID","placeholder":"1234567890 (optional)"},{"fieldType":"textarea","fieldLabel":"Special Features","placeholder":"e.g., contact form, testimonials, image gallery, pricing table"}]},"formDescription":"Create a professional, SEO-optimized, multi-language Progressive Web App with AI."},"typeVersion":2.2},{"id":"5f54999e-4773-4dd2-9839-90f323ece455","name":"Process Form Data","type":"n8n-nodes-base.code","position":[1728,1152],"parameters":{"jsCode":"const f = $json;\nconst langs = (f['Target Languages'] || 'en').split(',').map(l => l.trim());\n\nconst socialLinks = {};\nif (f['Social Media Links']) {\n  f['Social Media Links'].split(',').forEach(link => {\n    const l = link.trim();\n    if (l.includes('facebook')) socialLinks.facebook = l;\n    else if (l.includes('twitter') || l.includes('x.com')) socialLinks.twitter = l;\n    else if (l.includes('linkedin')) socialLinks.linkedin = l;\n    else if (l.includes('instagram')) socialLinks.instagram = l;\n  });\n}\n\nconst slug = f['Website Name'].toLowerCase().replace(/[^a-z0-9]/g, '-').replace(/-+/g, '-').replace(/^-|-$/g, '');\n\nreturn {\n  websiteName: f['Website Name'],\n  purpose: f['Primary Purpose'],\n  languages: langs,\n  primaryLang: langs[0],\n  designStyle: f['Design Style'],\n  seoKeywords: f['SEO Keywords'],\n  mainHeading: f['Main Heading'],\n  description: f['Business Description'],\n  contactEmail: f['Contact Email'],\n  companyName: f['Company Name'] || f['Website Name'],\n  phone: f['Phone Number'] || '',\n  socialLinks: socialLinks,\n  gaId: f['Google Analytics ID'] || '',\n  fbPixelId: f['Facebook Pixel ID'] || '',\n  specialFeatures: f['Special Features'] || '',\n  slug: slug,\n  timestamp: Date.now()\n};"},"typeVersion":2},{"id":"8d50a807-8248-490d-9404-e4a831f89b1f","name":"Generate SEO Metadata","type":"@n8n/n8n-nodes-langchain.chainLlm","position":[2080,1152],"parameters":{"text":"=You are an expert SEO specialist. Analyze the following and generate SEO metadata as JSON.\n\nBusiness: {{ $json.companyName }}\nPurpose: {{ $json.purpose }}\nKeywords: {{ $json.seoKeywords }}\nDescription: {{ $json.description }}\nLanguages: {{ $json.languages.join(', ') }}\n\nRespond ONLY in valid JSON with these keys:\n- metaTitle: SEO title (50-60 chars)\n- metaDescription: meta description (150-160 chars)\n- ogTitle: Open Graph title\n- ogDescription: Open Graph description\n- schemaType: Schema.org type (Organization, LocalBusiness, WebSite, etc.)\n- schemaJson: complete Schema.org JSON-LD object as a string\n- keywords: array of 10-15 SEO keywords\n- h1Suggestion: suggested H1 tag text\n- h2Suggestions: array of 3-5 H2 suggestions","messages":{"messageValues":[]},"promptType":"define"},"typeVersion":1.5},{"id":"00a4cfd6-abab-4d79-b01d-270e119e243d","name":"Generate Website HTML","type":"@n8n/n8n-nodes-langchain.chainLlm","position":[2368,1152],"parameters":{"text":"=You are an expert web developer. Generate a complete, production-ready HTML page.\n\nRequirements:\n- Name: {{ $('Process Form Data').item.json.websiteName }}\n- Purpose: {{ $('Process Form Data').item.json.purpose }}\n- Languages: {{ $('Process Form Data').item.json.languages.join(', ') }} (primary: {{ $('Process Form Data').item.json.primaryLang }})\n- Style: {{ $('Process Form Data').item.json.designStyle }}\n- Heading: {{ $('Process Form Data').item.json.mainHeading }}\n- Description: {{ $('Process Form Data').item.json.description }}\n- Email: {{ $('Process Form Data').item.json.contactEmail }}\n- Phone: {{ $('Process Form Data').item.json.phone }}\n- Social: {{ JSON.stringify($('Process Form Data').item.json.socialLinks) }}\n- Features: {{ $('Process Form Data').item.json.specialFeatures }}\n- GA ID: {{ $('Process Form Data').item.json.gaId }}\n- FB Pixel: {{ $('Process Form Data').item.json.fbPixelId }}\n\nSEO Data:\n{{ $json.text }}\n\nInstructions:\n1. Semantic HTML5, mobile-first responsive, modern design\n2. Embed ALL SEO meta tags, Open Graph, Twitter Card, and Schema.org JSON-LD in head\n3. Add language selector in nav with translations for each target language\n4. Add hreflang link tags for all languages\n5. Include <link rel=\"manifest\" href=\"manifest.json\"> in head\n6. Register Service Worker before </body>\n7. Embed Google Analytics and Facebook Pixel if IDs provided\n8. Sections: hero, about/services, features, contact form, footer with social links\n9. All CSS in <style>, all JS in <script>, NO external CDN links\n10. Smooth animations, dark/light considerations, accessible (ARIA labels)\n\nReturn ONLY complete HTML from <!DOCTYPE html> to </html>.","messages":{"messageValues":[]},"promptType":"define"},"typeVersion":1.5},{"id":"adf2c894-d8e3-4541-a84b-7ad6ad97efa9","name":"Google Gemini Chat Model","type":"@n8n/n8n-nodes-langchain.lmChatGoogleGemini","position":[2080,1392],"parameters":{"options":{}},"typeVersion":1},{"id":"1cd9b6e0-d2bf-4489-8b32-7dda8db7faf2","name":"Google Gemini Chat Model1","type":"@n8n/n8n-nodes-langchain.lmChatGoogleGemini","position":[2368,1392],"parameters":{"options":{}},"typeVersion":1},{"id":"3516d89a-3c13-433a-a183-1158272aa2b8","name":"Generate PWA Components","type":"n8n-nodes-base.code","position":[2672,1152],"parameters":{"jsCode":"const pd = $('Process Form Data').item.json;\nconst style = pd.designStyle;\nconst themeColor = style.includes('Dark') ? '#111827' : style.includes('Tech') ? '#4F46E5' : style.includes('Creative') ? '#7C3AED' : '#3B82F6';\nconst bgColor = style.includes('Dark') ? '#000000' : '#ffffff';\n\nconst manifest = JSON.stringify({\n  name: pd.websiteName,\n  short_name: pd.companyName.substring(0, 12),\n  description: pd.description.substring(0, 132),\n  start_url: '/',\n  display: 'standalone',\n  background_color: bgColor,\n  theme_color: themeColor,\n  orientation: 'portrait-primary',\n  icons: [\n    { src: 'icon-192.png', sizes: '192x192', type: 'image/png' },\n    { src: 'icon-512.png', sizes: '512x512', type: 'image/png' }\n  ],\n  lang: pd.primaryLang\n}, null, 2);\n\nconst sw = `const CACHE='${pd.slug}-v1';\nconst URLS=['/','manifest.json'];\nself.addEventListener('install',e=>e.waitUntil(caches.open(CACHE).then(c=>c.addAll(URLS))));\nself.addEventListener('fetch',e=>e.respondWith(caches.match(e.request).then(r=>r||fetch(e.request))));\nself.addEventListener('activate',e=>e.waitUntil(caches.keys().then(ks=>Promise.all(ks.filter(k=>k!==CACHE).map(k=>caches.delete(k))))));`;\n\nconst sitemap = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\\n<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\" xmlns:xhtml=\"http://www.w3.org/1999/xhtml\">\\n${pd.languages.map(l=>`  <url>\\n    <loc>https://YOUR_DOMAIN/${l==='en'?'':l+'/'}</loc>\\n    <lastmod>${new Date().toISOString().split('T')[0]}</lastmod>\\n    <priority>${l===pd.primaryLang?'1.0':'0.8'}</priority>\\n  </url>`).join('\\n')}\\n</urlset>`;\n\nconst robots = `User-agent: *\\nAllow: /\\nSitemap: https://YOUR_DOMAIN/sitemap.xml`;\n\nreturn { manifest, sw, sitemap, robots };"},"typeVersion":2},{"id":"50f5309e-f90f-4975-983a-54b7bff6054e","name":"Assemble All Files","type":"n8n-nodes-base.code","position":[2880,1152],"parameters":{"jsCode":"const htmlRaw = $('Generate Website HTML').item.json.text || '';\nconst pwa = $json;\nconst pd = $('Process Form Data').item.json;\n\nlet html = htmlRaw.trim();\nif (html.startsWith('```html')) html = html.slice(7);\nif (html.startsWith('```')) html = html.slice(3);\nif (html.endsWith('```')) html = html.slice(0, -3);\nhtml = html.trim();\n\nconst dIdx = html.toLowerCase().indexOf('<!doctype html>');\nif (dIdx > 0) html = html.slice(dIdx);\n\nif (!html.includes('manifest.json')) {\n  html = html.replace('<head>', '<head>\\n<link rel=\"manifest\" href=\"manifest.json\">');\n}\nif (!html.includes('serviceWorker')) {\n  html = html.replace('</body>', '<script>if(\"serviceWorker\" in navigator){navigator.serviceWorker.register(\"sw.js\")}</script>\\n</body>');\n}\n\nconst fn = pd.slug + '-' + pd.timestamp;\n\nreturn [\n  { fileName: fn + '.html', content: html, contentType: 'text/html' },\n  { fileName: 'manifest.json', content: pwa.manifest, contentType: 'application/json' },\n  { fileName: 'sw.js', content: pwa.sw, contentType: 'application/javascript' },\n  { fileName: 'sitemap.xml', content: pwa.sitemap, contentType: 'application/xml' },\n  { fileName: 'robots.txt', content: pwa.robots, contentType: 'text/plain' }\n];"},"typeVersion":2},{"id":"f791f6f2-6663-4ba5-99ed-4b18f1970638","name":"Convert to Binary","type":"n8n-nodes-base.moveBinaryData","position":[3184,1152],"parameters":{"mode":"jsonToBinary","options":{"encoding":"utf8","fileName":"={{ $json.fileName }}","mimeType":"={{ $json.contentType }}"},"destinationKey":"file"},"typeVersion":1.1},{"id":"1e0cfc90-3ccd-4177-a885-c01cd8e908d3","name":"Upload to S3","type":"n8n-nodes-base.awsS3","position":[3408,1152],"parameters":{"fileName":"={{ $json.fileName }}","operation":"upload","bucketName":"YOUR_S3_BUCKET_NAME","additionalFields":{},"binaryPropertyName":"file"},"typeVersion":1},{"id":"a3edd0f4-9074-4e1d-9fb9-859d781b3e81","name":"Build Response","type":"n8n-nodes-base.code","position":[3632,1152],"parameters":{"jsCode":"const items = $input.all();\nconst pd = items[0].json;\nconst baseUrl = 'https://YOUR_S3_BUCKET_NAME.s3.YOUR_REGION.amazonaws.com';\nconst mainFile = items.find(i => i.json.fileName && i.json.fileName.endsWith('.html'));\n\nreturn {\n  status: 'success',\n  websiteUrl: mainFile ? baseUrl + '/' + mainFile.json.fileName : baseUrl,\n  filesUploaded: items.length,\n  timestamp: new Date().toISOString()\n};"},"typeVersion":2},{"id":"c55a14ec-00ec-4605-b7aa-ffbeab9f0581","name":"Send Confirmation Email","type":"n8n-nodes-base.gmail","position":[3632,1376],"webhookId":"538a84cd-df8f-4dd2-909b-6dcff818a0df","parameters":{"sendTo":"={{ $('Process Form Data').item.json.contactEmail }}","message":"=<h1>Your website is ready!</h1>\n<p>Your website <strong>{{ $('Process Form Data').item.json.websiteName }}</strong> has been generated with:</p>\n<ul>\n<li>Multi-language support ({{ $('Process Form Data').item.json.languages.join(', ') }})</li>\n<li>Progressive Web App (installable on mobile)</li>\n<li>SEO optimization (meta tags, structured data, sitemap)</li>\n{{ $('Process Form Data').item.json.gaId ? '<li>Google Analytics tracking</li>' : '' }}\n</ul>\n<p><a href=\"{{ $json.websiteUrl }}\" style=\"display:inline-block;padding:14px 28px;background:#4F46E5;color:#fff;text-decoration:none;border-radius:8px;font-weight:bold;\">View Your Website</a></p>\n<p>To install as a mobile app, visit the URL on your phone and tap \"Add to Home Screen\".</p>","options":{},"subject":"Your Multi-Language PWA Website is Live!"},"typeVersion":2.1}],"pinData":{},"connections":{"Upload to S3":{"main":[[{"node":"Build Response","type":"main","index":0}]]},"Build Response":{"main":[[{"node":"Send Confirmation Email","type":"main","index":0}]]},"Convert to Binary":{"main":[[{"node":"Upload to S3","type":"main","index":0}]]},"Process Form Data":{"main":[[{"node":"Generate SEO Metadata","type":"main","index":0}]]},"Assemble All Files":{"main":[[{"node":"Convert to Binary","type":"main","index":0}]]},"Website Request Form":{"main":[[{"node":"Process Form Data","type":"main","index":0}]]},"Generate SEO Metadata":{"main":[[{"node":"Generate Website HTML","type":"main","index":0}]]},"Generate Website HTML":{"main":[[{"node":"Generate PWA Components","type":"main","index":0}]]},"Generate PWA Components":{"main":[[{"node":"Assemble All Files","type":"main","index":0}]]},"Google Gemini Chat Model":{"ai_languageModel":[[{"node":"Generate SEO Metadata","type":"ai_languageModel","index":0}]]},"Google Gemini Chat Model1":{"ai_languageModel":[[{"node":"Generate Website HTML","type":"ai_languageModel","index":0}]]}}},"lastUpdatedBy":1,"workflowInfo":{"nodeCount":17,"nodeTypes":{"n8n-nodes-base.code":{"count":4},"n8n-nodes-base.awsS3":{"count":1},"n8n-nodes-base.gmail":{"count":1},"n8n-nodes-base.stickyNote":{"count":5},"n8n-nodes-base.formTrigger":{"count":1},"n8n-nodes-base.moveBinaryData":{"count":1},"@n8n/n8n-nodes-langchain.chainLlm":{"count":2},"@n8n/n8n-nodes-langchain.lmChatGoogleGemini":{"count":2}}},"status":"published","readyToDemo":null,"user":{"name":"Oka Hironobu","username":"okp29","bio":"https://okp29.net/","verified":true,"links":[""],"avatar":"https://gravatar.com/avatar/d57c7a2cb027c144079388f3ca6c4204696dbee6f1995242748dccd9619fdc09?r=pg&d=retro&size=200"},"nodes":[{"id":62,"icon":"fa:exchange-alt","name":"n8n-nodes-base.moveBinaryData","codex":{"data":{"alias":["Move Binary Data"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.converttofile/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Files"]}}},"group":"[\"transform\"]","defaults":{"name":"Convert to/from binary data","color":"#7722CC"},"iconData":{"icon":"exchange-alt","type":"icon"},"displayName":"Convert to/from binary data","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":307,"icon":"file:s3.svg","name":"n8n-nodes-base.awsS3","codex":{"data":{"resources":{"generic":[{"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/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.awss3/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/aws/"}]},"categories":["Development","Data & Storage"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"output\"]","defaults":{"name":"AWS S3"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMDY1IiBoZWlnaHQ9IjI1MDAiIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaWRZTWlkIiB2aWV3Qm94PSIwIDAgMjU2IDMxMCI+PHBhdGggZmlsbD0iIzhDMzEyMyIgZD0iTTIwLjYyNCA1My42ODYgMCA2NHYxODEuMDJsMjAuNjI0IDEwLjI1NC4xMjQtLjE0OVY1My44Mjh6Ii8+PHBhdGggZmlsbD0iI0UwNTI0MyIgZD0iTTEzMSAyMjkgMjAuNjI0IDI1NS4yNzRWNTMuNjg2TDEzMSA3OS4zODd6Ii8+PHBhdGggZmlsbD0iIzhDMzEyMyIgZD0ibTgxLjE3OCAxODcuODY2IDQ2LjgxOCA1Ljk2LjI5NC0uNjc4LjI2My03Ni43Ny0uNTU3LS42LTQ2LjgxOCA1Ljg3NHoiLz48cGF0aCBmaWxsPSIjOEMzMTIzIiBkPSJtMTI3Ljk5NiAyMjkuMjk1IDEwNy4zNzEgMjYuMDM1LjE2OS0uMjY5LS4wMDMtMjAxLjE5NS0uMTctLjE4LTEwNy4zNjcgMjUuOTk2eiIvPjxwYXRoIGZpbGw9IiNFMDUyNDMiIGQ9Im0xNzQuODI3IDE4Ny44NjYtNDYuODMxIDUuOTZ2LTc4LjA0OGw0Ni44MzEgNS44NzR6Ii8+PHBhdGggZmlsbD0iIzVFMUYxOCIgZD0ibTE3NC44MjcgODkuNjMxLTQ2LjgzMSA4LjUzNS00Ni44MTgtOC41MzUgNDYuNzU5LTEyLjI1NnoiLz48cGF0aCBmaWxsPSIjRjJCMEE5IiBkPSJtMTc0LjgyNyAyMTkuODAxLTQ2LjgzMS04LjU5MS00Ni44MTggOC41OTEgNDYuNzYxIDEzLjA1M3oiLz48cGF0aCBmaWxsPSIjOEMzMTIzIiBkPSJtODEuMTc4IDg5LjYzMSA0Ni44MTgtMTEuNTg2LjM3OS0uMTE3Vi4zMTNMMTI3Ljk5NiAwIDgxLjE3OCAyMy40MTN6Ii8+PHBhdGggZmlsbD0iI0UwNTI0MyIgZD0ibTE3NC44MjcgODkuNjMxLTQ2LjgzMS0xMS41ODZWMGw0Ni44MzEgMjMuNDEzeiIvPjxwYXRoIGZpbGw9IiM4QzMxMjMiIGQ9Im0xMjcuOTk2IDMwOS40MjgtNDYuODIzLTIzLjQwNXYtNjYuMjE3bDQ2LjgyMyAxMS41ODIuNjg5Ljc4My0uMTg3IDc1LjkwNnoiLz48cGF0aCBmaWxsPSIjRTA1MjQzIiBkPSJtMTI3Ljk5NiAzMDkuNDI4IDQ2LjgyNy0yMy40MDV2LTY2LjIxN2wtNDYuODI3IDExLjU4MnpNMjM1LjM2NyA1My42ODYgMjU2IDY0djE4MS4wMmwtMjAuNjMzIDEwLjMxeiIvPjwvc3ZnPg=="},"displayName":"AWS S3","typeVersion":2,"nodeCategories":[{"id":3,"name":"Data & Storage"},{"id":5,"name":"Development"}]},{"id":356,"icon":"file:gmail.svg","name":"n8n-nodes-base.gmail","codex":{"data":{"alias":["email","human","form","wait","hitl","approval"],"resources":{"generic":[{"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/supercharging-your-conference-registration-process-with-n8n/","icon":"🎫","label":"Supercharging your conference registration process with n8n"},{"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/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/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/your-business-doesnt-need-you-to-operate/","icon":" 🖥️","label":"Hey founders! Your business doesn't need you to operate"},{"url":"https://n8n.io/blog/using-automation-to-boost-productivity-in-the-workplace/","icon":"💪","label":"Using Automation to Boost Productivity in the Workplace"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.gmail/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/google/oauth-single-service/"}]},"categories":["Communication","HITL"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"HITL":["Human in the Loop"]}}},"group":"[\"transform\"]","defaults":{"name":"Gmail"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNTYiIGhlaWdodD0iMTkzIiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCI+PHBhdGggZmlsbD0iIzQyODVGNCIgZD0iTTU4LjE4MiAxOTIuMDVWOTMuMTRMMjcuNTA3IDY1LjA3NyAwIDQ5LjUwNHYxMjUuMDkxYzAgOS42NTggNy44MjUgMTcuNDU1IDE3LjQ1NSAxNy40NTV6Ii8+PHBhdGggZmlsbD0iIzM0QTg1MyIgZD0iTTE5Ny44MTggMTkyLjA1aDQwLjcyN2M5LjY1OSAwIDE3LjQ1NS03LjgyNiAxNy40NTUtMTcuNDU1VjQ5LjUwNWwtMzEuMTU2IDE3LjgzNy0yNy4wMjYgMjUuNzk4eiIvPjxwYXRoIGZpbGw9IiNFQTQzMzUiIGQ9Im01OC4xODIgOTMuMTQtNC4xNzQtMzguNjQ3IDQuMTc0LTM2Ljk4OUwxMjggNjkuODY4bDY5LjgxOC01Mi4zNjQgNC42NyAzNC45OTItNC42NyA0MC42NDRMMTI4IDE0NS41MDR6Ii8+PHBhdGggZmlsbD0iI0ZCQkMwNCIgZD0iTTE5Ny44MTggMTcuNTA0VjkzLjE0TDI1NiA0OS41MDRWMjYuMjMxYzAtMjEuNTg1LTI0LjY0LTMzLjg5LTQxLjg5LTIwLjk0NXoiLz48cGF0aCBmaWxsPSIjQzUyMjFGIiBkPSJtMCA0OS41MDQgMjYuNzU5IDIwLjA3TDU4LjE4MiA5My4xNFYxNy41MDRMNDEuODkgNS4yODZDMjQuNjEtNy42NiAwIDQuNjQ2IDAgMjYuMjN6Ii8+PC9zdmc+"},"displayName":"Gmail","typeVersion":2,"nodeCategories":[{"id":6,"name":"Communication"},{"id":28,"name":"HITL"}]},{"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":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"}]},{"id":1262,"icon":"file:google.svg","name":"@n8n/n8n-nodes-langchain.lmChatGoogleGemini","codex":{"data":{"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.lmchatgooglegemini/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Language Models","Root Nodes"],"Language Models":["Chat Models (Recommended)"]}}},"group":"[\"transform\"]","defaults":{"name":"Google Gemini Chat Model"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgNDggNDgiPjxkZWZzPjxwYXRoIGlkPSJhIiBkPSJNNDQuNSAyMEgyNHY4LjVoMTEuOEMzNC43IDMzLjkgMzAuMSAzNyAyNCAzN2MtNy4yIDAtMTMtNS44LTEzLTEzczUuOC0xMyAxMy0xM2MzLjEgMCA1LjkgMS4xIDguMSAyLjlsNi40LTYuNEMzNC42IDQuMSAyOS42IDIgMjQgMiAxMS44IDIgMiAxMS44IDIgMjRzOS44IDIyIDIyIDIyYzExIDAgMjEtOCAyMS0yMiAwLTEuMy0uMi0yLjctLjUtNCIvPjwvZGVmcz48Y2xpcFBhdGggaWQ9ImIiPjx1c2UgeGxpbms6aHJlZj0iI2EiIG92ZXJmbG93PSJ2aXNpYmxlIi8+PC9jbGlwUGF0aD48cGF0aCBmaWxsPSIjRkJCQzA1IiBkPSJNMCAzN1YxMWwxNyAxM3oiIGNsaXAtcGF0aD0idXJsKCNiKSIvPjxwYXRoIGZpbGw9IiNFQTQzMzUiIGQ9Im0wIDExIDE3IDEzIDctNi4xTDQ4IDE0VjBIMHoiIGNsaXAtcGF0aD0idXJsKCNiKSIvPjxwYXRoIGZpbGw9IiMzNEE4NTMiIGQ9Im0wIDM3IDMwLTIzIDcuOSAxTDQ4IDB2NDhIMHoiIGNsaXAtcGF0aD0idXJsKCNiKSIvPjxwYXRoIGZpbGw9IiM0Mjg1RjQiIGQ9Ik00OCA0OCAxNyAyNGwtNC0zIDM1LTEweiIgY2xpcC1wYXRoPSJ1cmwoI2IpIi8+PC9zdmc+"},"displayName":"Google Gemini Chat Model","typeVersion":1,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]}],"categories":[{"id":31,"name":"Content Creation"},{"id":51,"name":"Multimodal AI"}],"image":[]}}