{
  "workflow": {
    "id": 6166,
    "name": "Automate website performance analysis and comparison using Gemini and PageSpeed Insights",
    "views": 1160,
    "recentViews": 0,
    "totalViews": 1160,
    "createdAt": "2025-07-19T08:20:49.270Z",
    "description": "The **Page Speed Insight** workflow automates website performance analysis by integrating Google PageSpeed Insights API with Discord messaging and Gemini. This n8n workflow provides expert-level performance audits and comparisons, delivering actionable insights for website owners, SEO professionals, and developers.\n\n![Screenshot 20250719 at 14.25.27.png](fileId:1807)\n\nDisclaimer: this workflow using community nodes [Google PageSpeed Insights Community Node](https://www.npmjs.com/package/n8n-nodes-google-pagespeed) \n\n\n## 💡 Why Use Page Speed Insight?\n\n- **Save Time:** Instantly analyze and compare website speeds without manual tool usage\n- **Eliminate Guesswork:** Receive expert audit reports that translate technical data into clear, actionable insights\n- **Improve Website Outcomes:** Identify critical bottlenecks and enhancements prioritized by AI-driven analysis\n- **Seamless Integration:** Pull URLs and deliver reports directly via Discord for team collaboration and immediate response\n\n\n## ⚡ Who Is This For?\n\n- Webmasters and website owners seeking fast, automated performance checks\n- SEO analysts who need consistent, data-backed website comparisons\n- Developers requiring clear, prioritized action points from performance audits\n- Digital agencies managing multiple client sites with ongoing monitoring needs\n\n\n## 🔧 What This Workflow Does\n\n- **⏱ Trigger:** Discord message containing URLs or scheduled execution\n- **📎 Parse:** Extracts URLs and determines analysis type (single/comparison)\n- **🔍 Analyze:** Calls Google PageSpeed API for performance data\n- **🤖 Process:** AI generates user-friendly reports from raw Lighthouse JSON\n- **💌 Deliver:** Sends chunked reports to Discord channels\n- **🗂 Log:** Stores execution data for review and improvement\n\n![Screenshot 20250719 at 14.27.24.png](fileId:1806)\n\n## 🔐 Setup Instructions\n\n1. Import the provided JSON workflow into your n8n instance\n\n2. Set up credentials for:\n   - Google PageSpeed API (ensure you have a valid API key — get yours [here](https://developers.google.com/speed/docs/insights/v5/get-started))\n   - Discord Bot API with permissions to read messages and send messages in your chosen guild/channel\n\n3. Customize the workflow by adjusting:\n   - Discord guild and channel IDs where messages are monitored and results posted\n   - Scheduled trigger interval if needed\n   - Any prompt text or AI model parameters to tailor report tone and detail level\n\n4. Test thoroughly with real URLs and Discord interaction to confirm smooth data flow and output quality\n\n\n## 🧩 Pre-Requirements\n\n- Active n8n instance (Cloud or self-hosted)\n- [n8n Google PageSpeed community node](https://www.npmjs.com/package/n8n-nodes-google-pagespeed)\n- Google PageSpeed Insights API key\n- Discord Bot credentials with channel access\n- Google Gemini AI credentials (recommended)\n\n\n## 🛠️ Customize It Further\n\n- Extend to analyze desktop performance or other device types easily by modifying the PageSpeed API call\n- Integrate with Slack, email, or other team tools alongside Discord for broader notification\n- Enhance report depth by adding more AI-driven insights like competitor site recommendations or historical trend tracking\n\n\n\n## 🧠 Nodes Used\n\n- [Google PageSpeed Insights Community Node](https://www.npmjs.com/package/n8n-nodes-google-pagespeed)\n- Discord (getAllMessages, sendMessage)\n- Code (URL parsing, message chunking)\n- AI Language Model (Google Gemini)\n- Schedule Trigger\n- Switch (message type handling)\n- Sticky Notes (workflow guidance)\n\n\n\n## 📞 Support\n\nMade by: **[khaisa Studio](https://khaisa.studio?utm_source=n8nofficial)**  \n**Tag:** automation, performance, SEO, google-pagespeed, discord  \n**Category:** Monitoring & Reporting  \n\nNeed a custom solution? **[Contact Me](https://khaisa.studio/pages/contact)**",
    "workflow": {
      "id": "hHhdfJwx4e6Q68ho",
      "meta": {
        "instanceId": "c2650793f644091dc80fb900fe63448ad1f4b774008de9608064d67294f8307c",
        "templateCredsSetupCompleted": true
      },
      "name": "Page Speed Insight",
      "tags": [],
      "nodes": [
        {
          "id": "f709e408-0443-42c5-b346-7df22a6e6dfe",
          "name": "Analyze Single url",
          "type": "n8n-nodes-google-pagespeed.googlePageSpeed",
          "position": [
            496,
            112
          ],
          "parameters": {
            "url": "={{ $json.content }}",
            "additionalFields": {}
          },
          "credentials": {
            "googlePageSpeedApi": {
              "id": "credential-id",
              "name": "googlePageSpeedApi Credential"
            }
          },
          "typeVersion": 2
        },
        {
          "id": "0af35e1d-138f-42b4-bb27-7d4aa86b2306",
          "name": "Sticky Note",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            368,
            672
          ],
          "parameters": {
            "color": 5,
            "width": 272,
            "height": 80,
            "content": "## get your key [Here](https://developers.google.com/speed/docs/insights/v5/get-started)"
          },
          "typeVersion": 1
        },
        {
          "id": "fd0399cd-2643-4a3c-9d43-d938a69240ac",
          "name": "Analyze from sitemap",
          "type": "n8n-nodes-google-pagespeed.googlePageSpeed",
          "position": [
            -96,
            768
          ],
          "parameters": {
            "operation": "analyzeSitemap",
            "sitemapUrl": "=https://{{ $json.url }}/sitemap.xml",
            "urlFilters": {},
            "additionalFields": {}
          },
          "credentials": {
            "googlePageSpeedApi": {
              "id": "credential-id",
              "name": "googlePageSpeedApi Credential"
            }
          },
          "typeVersion": 2
        },
        {
          "id": "0fba35e0-9c05-4f66-9530-df2989918757",
          "name": "Get many messages",
          "type": "n8n-nodes-base.discord",
          "position": [
            48,
            272
          ],
          "webhookId": "08a75470-e282-46c0-81bd-94bdb38aecf3",
          "parameters": {
            "limit": 1,
            "guildId": {
              "__rl": true,
              "mode": "list",
              "value": "924339263372406844",
              "cachedResultUrl": "https://discord.com/channels/924339263372406844",
              "cachedResultName": "Khaisa Studio"
            },
            "options": {},
            "resource": "message",
            "channelId": {
              "__rl": true,
              "mode": "list",
              "value": "1396015310888374313",
              "cachedResultUrl": "https://discord.com/channels/924339263372406844/1396015310888374313",
              "cachedResultName": "pagespeed"
            },
            "operation": "getAll"
          },
          "credentials": {
            "discordBotApi": {
              "id": "credential-id",
              "name": "discordBotApi Credential"
            }
          },
          "typeVersion": 2
        },
        {
          "id": "d3efd950-c7ab-45ff-8f3e-1eebf4674586",
          "name": "Schedule Trigger",
          "type": "n8n-nodes-base.scheduleTrigger",
          "position": [
            -176,
            272
          ],
          "parameters": {
            "rule": {
              "interval": [
                {
                  "field": "minutes",
                  "minutesInterval": 1
                }
              ]
            }
          },
          "typeVersion": 1.2
        },
        {
          "id": "0c81a6b1-15ea-4e40-90ad-c8c4fe9d117e",
          "name": "Analyze multiple url in batch",
          "type": "n8n-nodes-google-pagespeed.googlePageSpeed",
          "position": [
            144,
            768
          ],
          "parameters": {
            "operation": "analyzeMultiple",
            "additionalFields": {}
          },
          "credentials": {
            "googlePageSpeedApi": {
              "id": "credential-id",
              "name": "googlePageSpeedApi Credential"
            }
          },
          "typeVersion": 2
        },
        {
          "id": "46fbf072-0d7b-48b5-82cc-6cd0d0412c44",
          "name": "Sticky Note1",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            -192,
            640
          ],
          "parameters": {
            "color": 7,
            "width": 848,
            "height": 352,
            "content": "## Available Tools\n"
          },
          "typeVersion": 1
        },
        {
          "id": "b9f9b80e-41e2-4306-b441-88163db07472",
          "name": "Send a message",
          "type": "n8n-nodes-base.discord",
          "position": [
            1504,
            304
          ],
          "webhookId": "13a2a72e-c936-43c4-93af-f801b0f56a05",
          "parameters": {
            "content": "={{ $json.message }}",
            "guildId": {
              "__rl": true,
              "mode": "list",
              "value": "924339263372406844",
              "cachedResultUrl": "https://discord.com/channels/924339263372406844",
              "cachedResultName": "Khaisa Studio"
            },
            "options": {},
            "resource": "message",
            "channelId": {
              "__rl": true,
              "mode": "list",
              "value": "1396015310888374313",
              "cachedResultUrl": "https://discord.com/channels/924339263372406844/1396015310888374313",
              "cachedResultName": "pagespeed"
            }
          },
          "credentials": {
            "discordBotApi": {
              "id": "credential-id",
              "name": "discordBotApi Credential"
            }
          },
          "typeVersion": 2
        },
        {
          "id": "3a00c7c5-d0ab-4555-9994-48e270797b71",
          "name": "Switch",
          "type": "n8n-nodes-base.switch",
          "position": [
            272,
            272
          ],
          "parameters": {
            "rules": {
              "values": [
                {
                  "outputKey": "process single",
                  "conditions": {
                    "options": {
                      "version": 2,
                      "leftValue": "",
                      "caseSensitive": true,
                      "typeValidation": "strict"
                    },
                    "combinator": "and",
                    "conditions": [
                      {
                        "id": "87365dce-5527-49da-ac21-587baa735679",
                        "operator": {
                          "type": "string",
                          "operation": "startsWith"
                        },
                        "leftValue": "={{ $json.content }}",
                        "rightValue": "http"
                      }
                    ]
                  },
                  "renameOutput": true
                },
                {
                  "outputKey": "compare",
                  "conditions": {
                    "options": {
                      "version": 2,
                      "leftValue": "",
                      "caseSensitive": true,
                      "typeValidation": "strict"
                    },
                    "combinator": "and",
                    "conditions": [
                      {
                        "id": "69456027-7e86-4077-9715-2ea7d66b0370",
                        "operator": {
                          "type": "string",
                          "operation": "startsWith"
                        },
                        "leftValue": "={{ $json.content }}",
                        "rightValue": "compare"
                      }
                    ]
                  },
                  "renameOutput": true
                }
              ]
            },
            "options": {}
          },
          "typeVersion": 3.2
        },
        {
          "id": "cecf1333-f995-434b-a440-98fd4a7587ec",
          "name": "Parse Into Sections",
          "type": "n8n-nodes-base.code",
          "position": [
            1248,
            112
          ],
          "parameters": {
            "jsCode": "// n8n Code Node - Split long messages for Discord\n// Place this node between AI Agent and Discord Send Message\n\nconst input = $input.all();\nconst results = [];\n\n// Discord message limit (leaving some buffer)\nconst DISCORD_MAX_LENGTH = 1900;\n\n// Process each input item\nfor (const item of input) {\n  const longMessage = item.json.output || '';\n  \n  // If message is short enough, send as-is\n  if (longMessage.length <= DISCORD_MAX_LENGTH) {\n    results.push({\n      json: {\n        message: longMessage,\n        messageNumber: 1,\n        totalMessages: 1\n      }\n    });\n    continue;\n  }\n  \n  // Split long message into chunks\n  const chunks = splitMessage(longMessage, DISCORD_MAX_LENGTH);\n  \n  // Create output items for each chunk\n  chunks.forEach((chunk, index) => {\n    results.push({\n      json: {\n        message: chunk,\n        messageNumber: index + 1,\n        totalMessages: chunks.length\n      }\n    });\n  });\n}\n\n// Function to split message intelligently\nfunction splitMessage(text, maxLength) {\n  const chunks = [];\n  let currentChunk = '';\n  \n  // Split by natural break points (double newlines, then single newlines, then sentences)\n  const paragraphs = text.split('\\n\\n');\n  \n  for (const paragraph of paragraphs) {\n    // If adding this paragraph would exceed limit\n    if ((currentChunk + '\\n\\n' + paragraph).length > maxLength) {\n      // Save current chunk if it has content\n      if (currentChunk.trim()) {\n        chunks.push(currentChunk.trim());\n        currentChunk = '';\n      }\n      \n      // If single paragraph is too long, split by sentences\n      if (paragraph.length > maxLength) {\n        const sentences = paragraph.split('. ');\n        \n        for (let i = 0; i < sentences.length; i++) {\n          const sentence = sentences[i] + (i < sentences.length - 1 ? '. ' : '');\n          \n          if ((currentChunk + sentence).length > maxLength) {\n            if (currentChunk.trim()) {\n              chunks.push(currentChunk.trim());\n              currentChunk = sentence;\n            } else {\n              // Even single sentence is too long, force split\n              chunks.push(sentence.substring(0, maxLength - 3) + '...');\n              currentChunk = '...' + sentence.substring(maxLength - 3);\n            }\n          } else {\n            currentChunk += sentence;\n          }\n        }\n      } else {\n        currentChunk = paragraph;\n      }\n    } else {\n      // Add paragraph to current chunk\n      if (currentChunk) {\n        currentChunk += '\\n\\n' + paragraph;\n      } else {\n        currentChunk = paragraph;\n      }\n    }\n  }\n  \n  // Add final chunk\n  if (currentChunk.trim()) {\n    chunks.push(currentChunk.trim());\n  }\n  \n  return chunks;\n}\n\nreturn results;"
          },
          "typeVersion": 2
        },
        {
          "id": "d6d80ea2-4b28-45a1-883c-c4018c2d8af1",
          "name": "Gemini",
          "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
          "position": [
            800,
            288
          ],
          "parameters": {
            "options": {}
          },
          "credentials": {
            "googlePalmApi": {
              "id": "credential-id",
              "name": "googlePalmApi Credential"
            }
          },
          "typeVersion": 1
        },
        {
          "id": "02a20bc9-69ed-4854-9a30-14fa63149fc1",
          "name": "AI Agent",
          "type": "@n8n/n8n-nodes-langchain.chainLlm",
          "position": [
            720,
            112
          ],
          "parameters": {
            "text": "={{ $json }}",
            "batching": {},
            "messages": {
              "messageValues": [
                {
                  "message": "=You are an expert web performance and SEO analyst.  Your task is to meticulously analyze the following Lighthouse JSON report. Your goal is to transform this raw data into a clear, insightful, and actionable audit report. The report should be easy for a website owner or project manager to understand but must also contain the specific technical details a developer needs to implement the fixes.  Analyze the JSON data provided below and structure your output using the following format and sections:  1. Executive Summary Start with a high-level, 2-3 sentence overview of the website's health based on this mobile audit. Summarize the key findings and overall performance.  2. Overall Scorecard Present the four main Lighthouse scores (Performance, Accessibility, Best Practices, SEO) in a clear list or table. Briefly explain what each score represents in simple terms.  3. ✅ What's Going Well (Key Strengths) Identify and celebrate what the website is doing right. Highlight the areas with perfect or near-perfect scores (like Best Practices) and explain why these are important wins.  4. 🚀 Actionable Recommendations (Priority List) This is the most critical section. Identify the key areas for improvement, ordering them by priority from most to least critical. For each recommendation:  State the Issue: Use a clear, descriptive title (e.g., \"Critical Accessibility Failure: Poor Color Contrast\").  Explain the Impact: In simple terms, explain why this is a problem. Describe its impact on user experience, accessibility for people with disabilities, or search engine ranking.  Provide the Fix: Give specific, actionable advice on how to resolve the issue. Reference the exact data from the JSON where necessary. For example, when discussing performance, mention the specific metrics (like Largest Contentful Paint at 2.8 s) and suggest concrete solutions (e.g., \"Optimize the main hero image to load faster\").  Crucially, focus your analysis on the audits with low or failing scores (color-contrast, meta-description) and the performance metrics that fall outside the \"good\" threshold.  Split the output into multiple shorter messages, each under 1800 characters. End each message with \"--- (Message X/Y) ---\" and ensure each message is complete and readable on its own."
                }
              ]
            },
            "promptType": "define"
          },
          "typeVersion": 1.7
        },
        {
          "id": "3a0b7ea6-287c-42c9-a460-6bc8868c7211",
          "name": "Compare Website",
          "type": "@n8n/n8n-nodes-langchain.chainLlm",
          "position": [
            896,
            416
          ],
          "parameters": {
            "text": "={{ $json }}",
            "batching": {},
            "messages": {
              "messageValues": [
                {
                  "message": "You are an expert web performance and SEO analyst specializing in website comparisons.\n\nYour task is to analyze website comparison data and create a Discord-optimized report. Use Discord markdown formatting and ensure readability on mobile and desktop Discord clients.\n\n**DISCORD FORMATTING RULES:**\n- Use **bold** for headings and emphasis\n- Use `code blocks` for metrics and URLs\n- Use bullet points with - or •\n- Avoid complex tables - use simple lists instead\n- Keep line spacing readable\n- Use emojis for visual appeal\n\n**ANALYSIS STRUCTURE:**\n\n**Message 1: Executive Summary & Scorecard**\n```\n🔍 **Website Performance Comparison**\n\n**Executive Summary:**\n[2-3 sentences comparing overall performance]\n\n**📊 Lighthouse Scores:**\n• **Performance:** `Site1: XX` vs `Site2: XX` (Winner: Site)\n• **Accessibility:** `Site1: XX` vs `Site2: XX` (Winner: Site)  \n• **Best Practices:** `Site1: XX` vs `Site2: XX` (Winner: Site)\n• **SEO:** `Site1: XX` vs `Site2: XX` (Winner: Site)\n\n🏆 **Overall Winner:** [Site] with [X] category wins\n\n--- (Message 1/4) ---\n```\n\n**Message 2: Performance Metrics Deep Dive**\n```\n⚡ **Performance Metrics Breakdown**\n\n**Site Comparison:**\n• **First Contentful Paint:** \n  - `Site1`: XXXXms | `Site2`: XXXXms\n  - Winner: [Site] (faster by XXXms)\n\n• **Largest Contentful Paint:**\n  - `Site1`: XXXXms | `Site2`: XXXXms  \n  - Winner: [Site] (faster by XXXms)\n\n[Continue for all metrics with clear formatting]\n\n--- (Message 2/4) ---\n```\n\n**Message 3: Key Insights & Winners**\n```\n🎯 **Key Performance Insights**\n\n**Biggest Improvements:**\n• [Metric]: Improved by [amount]\n• [Metric]: Improved by [amount]\n\n**Critical Issues Found:**\n• [Site]: [Issue description]\n• [Site]: [Issue description]\n\n--- (Message 3/4) ---\n```\n\n**Message 4: Actionable Recommendations**\n```\n🚀 **Action Plan**\n\n**For [Underperforming Site]:**\n• Fix: [Specific issue] - [Impact]\n• Optimize: [Specific area] - [Expected improvement]\n\n**For [Better Site]:**\n• Maintain: [What's working well]\n• Improve: [Areas for enhancement]\n\n**Both Sites:**\n• [Universal recommendations]\n\n--- (Message 4/4) ---\n```\n\n**REQUIREMENTS:**\n- Each message MUST be under 1800 characters\n- Use actual data from scoreDifferences and metricDifferences\n- Include specific millisecond improvements\n- Make URLs readable with `backticks`\n- Prioritize mobile-friendly formatting\n- End each message with the exact format: \"--- (Message X/Y) ---\""
                }
              ]
            },
            "promptType": "define"
          },
          "typeVersion": 1.7
        },
        {
          "id": "9193bccf-37d2-4894-b61c-ab6e79ad0351",
          "name": "Parse Comparison",
          "type": "n8n-nodes-base.code",
          "position": [
            1264,
            416
          ],
          "parameters": {
            "jsCode": "// n8n Code Node - Split comparison messages that are already formatted\n// Place this node after AI Agent and before Discord Send Message\n\nconst input = $input.all();\nconst results = [];\n\nfor (const item of input) {\n  const fullText = item.json.text || item.json.output || '';\n  \n  if (!fullText) {\n    console.log('No text content found');\n    continue;\n  }\n  \n  // Split by the message delimiter pattern\n  const messagePattern = /--- \\(Message \\d+\\/\\d+\\) ---/;\n  const chunks = fullText.split(messagePattern);\n  \n  // Clean up chunks and filter out empty ones\n  const cleanChunks = chunks\n    .map(chunk => chunk.trim())\n    .filter(chunk => chunk.length > 0);\n  \n  // Create output for each chunk\n  cleanChunks.forEach((chunk, index) => {\n    results.push({\n      json: {\n        message: chunk,\n        messageNumber: index + 1,\n        totalMessages: cleanChunks.length,\n        originalLength: fullText.length,\n        chunkLength: chunk.length\n      }\n    });\n  });\n  \n  // If no message delimiters found, treat as single message\n  if (cleanChunks.length === 0 || cleanChunks.length === 1) {\n    // Check if message is too long for Discord (over 1900 chars)\n    if (fullText.length > 1900) {\n      // Split into smaller chunks\n      const smallChunks = splitLongMessage(fullText, 1800);\n      \n      smallChunks.forEach((chunk, index) => {\n        results.push({\n          json: {\n            message: chunk,\n            messageNumber: index + 1,\n            totalMessages: smallChunks.length,\n            originalLength: fullText.length,\n            chunkLength: chunk.length,\n            autoSplit: true\n          }\n        });\n      });\n    } else {\n      // Single message that fits Discord limits\n      results.push({\n        json: {\n          message: fullText,\n          messageNumber: 1,\n          totalMessages: 1,\n          originalLength: fullText.length,\n          chunkLength: fullText.length\n        }\n      });\n    }\n  }\n}\n\n// Function to split long messages at natural break points\nfunction splitLongMessage(text, maxLength) {\n  const chunks = [];\n  let currentChunk = '';\n  \n  // Split by paragraphs first (double newlines)\n  const paragraphs = text.split('\\n\\n');\n  \n  for (const paragraph of paragraphs) {\n    // If adding this paragraph would exceed limit\n    if ((currentChunk + '\\n\\n' + paragraph).length > maxLength) {\n      // Save current chunk if it has content\n      if (currentChunk.trim()) {\n        chunks.push(currentChunk.trim());\n        currentChunk = '';\n      }\n      \n      // If single paragraph is too long, split by sentences\n      if (paragraph.length > maxLength) {\n        const sentences = paragraph.split('. ');\n        \n        for (let i = 0; i < sentences.length; i++) {\n          const sentence = sentences[i] + (i < sentences.length - 1 ? '. ' : '');\n          \n          if ((currentChunk + sentence).length > maxLength) {\n            if (currentChunk.trim()) {\n              chunks.push(currentChunk.trim());\n              currentChunk = sentence;\n            } else {\n              // Force split if even single sentence is too long\n              chunks.push(sentence.substring(0, maxLength - 3) + '...');\n              currentChunk = '...' + sentence.substring(maxLength - 3);\n            }\n          } else {\n            currentChunk += sentence;\n          }\n        }\n      } else {\n        currentChunk = paragraph;\n      }\n    } else {\n      // Add paragraph to current chunk\n      if (currentChunk) {\n        currentChunk += '\\n\\n' + paragraph;\n      } else {\n        currentChunk = paragraph;\n      }\n    }\n  }\n  \n  // Add final chunk\n  if (currentChunk.trim()) {\n    chunks.push(currentChunk.trim());\n  }\n  \n  return chunks;\n}\n\nreturn results;"
          },
          "typeVersion": 2
        },
        {
          "id": "3080f3be-a15c-439c-ae0b-aacf3d3d2d65",
          "name": "Sticky Note2",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            368,
            768
          ],
          "parameters": {
            "width": 272,
            "height": 192,
            "content": "## Guideline\n- send single url to measure your web performance\n- compare url by sending ``compare, \"url1\", \"url2\"``\n\nall url must started with http / https"
          },
          "typeVersion": 1
        },
        {
          "id": "1d063c68-b265-42ba-b313-3a44d1e9bd94",
          "name": "Compare Mobile Performance",
          "type": "n8n-nodes-google-pagespeed.googlePageSpeed",
          "position": [
            672,
            416
          ],
          "parameters": {
            "url1": "={{ $json.url1 }}",
            "url2": "={{ $json.url2 }}",
            "operation": "compareUrls",
            "additionalFields": {}
          },
          "credentials": {
            "googlePageSpeedApi": {
              "id": "credential-id",
              "name": "googlePageSpeedApi Credential"
            }
          },
          "typeVersion": 2
        },
        {
          "id": "a238e039-7768-4b5b-8dd7-63b48e8c7c7f",
          "name": "Parse Url",
          "type": "n8n-nodes-base.code",
          "position": [
            496,
            416
          ],
          "parameters": {
            "jsCode": "// n8n Code Node - Extract URLs for comparison\n// This version handles messages like \"compare, https://site1.com, https://site2.com\"\n\nconst input = $input.all();\nconst results = [];\n\n// URL regex pattern\nconst urlPattern = /https?:\\/\\/[^\\s,]+/g;\n\nfor (const item of input) {\n  const content = item.json.content || '';\n  \n  // Check if this is a comparison request\n  const isComparison = content.toLowerCase().includes('compare');\n  \n  // Extract URLs\n  const urls = content.match(urlPattern) || [];\n  \n  // Clean URLs\n  const cleanUrls = urls.map(url => url.replace(/[,.\\s]+$/, ''));\n  \n  if (cleanUrls.length > 0) {\n    if (isComparison && cleanUrls.length > 1) {\n      // For comparison, create one output with url1 and url2\n      results.push({\n        json: {\n          type: 'comparison',\n          url1: cleanUrls[0],\n          url2: cleanUrls[1] || null,\n          url3: cleanUrls[2] || null, // In case there are more than 2 URLs\n          urlCount: cleanUrls.length,\n          originalContent: content\n        }\n      });\n    } else {\n      // For single URL analysis, use url1\n      results.push({\n        json: {\n          type: 'single',\n          url1: cleanUrls[0],\n          url2: null,\n          urlCount: cleanUrls.length,\n          originalContent: content\n        }\n      });\n    }\n  }\n}\n\nreturn results;"
          },
          "typeVersion": 2
        }
      ],
      "active": false,
      "pinData": {
        "Parse Url": [
          {
            "json": {
              "type": "comparison",
              "url1": "https://pinecone.io/",
              "url2": "https://khmuhtadin.com/",
              "url3": null,
              "urlCount": 2,
              "originalContent": "compare, https://pinecone.io/, https://khmuhtadin.com/"
            }
          }
        ]
      },
      "settings": {
        "executionOrder": "v1",
        "saveManualExecutions": true,
        "saveExecutionProgress": true,
        "saveDataErrorExecution": "all",
        "saveDataSuccessExecution": "all"
      },
      "versionId": "9843222e-8f1d-498e-91ee-4d705f44fb81",
      "connections": {
        "Gemini": {
          "ai_languageModel": [
            [
              {
                "node": "AI Agent",
                "type": "ai_languageModel",
                "index": 0
              },
              {
                "node": "Compare Website",
                "type": "ai_languageModel",
                "index": 0
              }
            ]
          ]
        },
        "Switch": {
          "main": [
            [
              {
                "node": "Analyze Single url",
                "type": "main",
                "index": 0
              }
            ],
            [
              {
                "node": "Parse Url",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "AI Agent": {
          "main": [
            [
              {
                "node": "Parse Into Sections",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Parse Url": {
          "main": [
            [
              {
                "node": "Compare Mobile Performance",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Compare Website": {
          "main": [
            [
              {
                "node": "Parse Comparison",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Parse Comparison": {
          "main": [
            [
              {
                "node": "Send a message",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Schedule Trigger": {
          "main": [
            [
              {
                "node": "Get many messages",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Get many messages": {
          "main": [
            [
              {
                "node": "Switch",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Analyze Single url": {
          "main": [
            [
              {
                "node": "AI Agent",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Parse Into Sections": {
          "main": [
            [
              {
                "node": "Send a message",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Compare Mobile Performance": {
          "main": [
            [
              {
                "node": "Compare Website",
                "type": "main",
                "index": 0
              }
            ]
          ]
        }
      }
    },
    "lastUpdatedBy": 29,
    "workflowInfo": {
      "nodeCount": 17,
      "nodeTypes": {
        "n8n-nodes-base.code": {
          "count": 3
        },
        "n8n-nodes-base.switch": {
          "count": 1
        },
        "n8n-nodes-base.discord": {
          "count": 2
        },
        "n8n-nodes-base.stickyNote": {
          "count": 3
        },
        "n8n-nodes-base.scheduleTrigger": {
          "count": 1
        },
        "@n8n/n8n-nodes-langchain.chainLlm": {
          "count": 2
        },
        "n8n-nodes-google-pagespeed.googlePageSpeed": {
          "count": 4
        },
        "@n8n/n8n-nodes-langchain.lmChatGoogleGemini": {
          "count": 1
        }
      }
    },
    "status": "published",
    "user": {
      "name": "Khairul Muhtadin",
      "username": "khmuhtadin",
      "bio": "",
      "verified": true,
      "links": [
        "https://khmuhtadin.com"
      ],
      "avatar": "https://gravatar.com/avatar/5c05e658f8405977c4ff73ba225c5d0dbdcbf9aff6436e1c740bd86907a07a48?r=pg&d=retro&size=200"
    },
    "nodes": [
      {
        "id": 60,
        "icon": "file:discord.svg",
        "name": "n8n-nodes-base.discord",
        "codex": {
          "data": {
            "alias": [
              "human",
              "form",
              "wait",
              "hitl",
              "approval"
            ],
            "resources": {
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.discord/"
                }
              ],
              "credentialDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/credentials/discord/"
                }
              ]
            },
            "categories": [
              "Communication",
              "HITL"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0",
            "subcategories": {
              "HITL": [
                "Human in the Loop"
              ]
            }
          }
        },
        "group": "[\"output\"]",
        "defaults": {
          "name": "Discord"
        },
        "iconData": {
          "type": "file",
          "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNTYiIGhlaWdodD0iMTk5IiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCI+PHBhdGggZmlsbD0iIzU4NjVGMiIgZD0iTTIxNi44NTYgMTYuNTk3QTIwOC41IDIwOC41IDAgMCAwIDE2NC4wNDIgMGMtMi4yNzUgNC4xMTMtNC45MzMgOS42NDUtNi43NjYgMTQuMDQ2cS0yOS41MzgtNC40NDItNTguNTMzIDBjLTEuODMyLTQuNC00LjU1LTkuOTMzLTYuODQ2LTE0LjA0NmEyMDcuOCAyMDcuOCAwIDAgMC01Mi44NTUgMTYuNjM4QzUuNjE4IDY3LjE0Ny0zLjQ0MyAxMTYuNCAxLjA4NyAxNjQuOTU2YzIyLjE2OSAxNi41NTUgNDMuNjUzIDI2LjYxMiA2NC43NzUgMzMuMTkzQTE2MSAxNjEgMCAwIDAgNzkuNzM1IDE3NS4zYTEzNi40IDEzNi40IDAgMCAxLTIxLjg0Ni0xMC42MzIgMTA5IDEwOSAwIDAgMCA1LjM1Ni00LjIzN2M0Mi4xMjIgMTkuNzAyIDg3Ljg5IDE5LjcwMiAxMjkuNTEgMGExMzIgMTMyIDAgMCAwIDUuMzU1IDQuMjM3IDEzNiAxMzYgMCAwIDEtMjEuODg2IDEwLjY1M2M0LjAwNiA4LjAyIDguNjM4IDE1LjY3IDEzLjg3MyAyMi44NDggMjEuMTQyLTYuNTggNDIuNjQ2LTE2LjYzNyA2NC44MTUtMzMuMjEzIDUuMzE2LTU2LjI4OC05LjA4LTEwNS4wOS0zOC4wNTYtMTQ4LjM2TTg1LjQ3NCAxMzUuMDk1Yy0xMi42NDUgMC0yMy4wMTUtMTEuODA1LTIzLjAxNS0yNi4xOHMxMC4xNDktMjYuMiAyMy4wMTUtMjYuMiAyMy4yMzYgMTEuODA0IDIzLjAxNSAyNi4yYy4wMiAxNC4zNzUtMTAuMTQ4IDI2LjE4LTIzLjAxNSAyNi4xOG04NS4wNTEgMGMtMTIuNjQ1IDAtMjMuMDE0LTExLjgwNS0yMy4wMTQtMjYuMThzMTAuMTQ4LTI2LjIgMjMuMDE0LTI2LjJjMTIuODY3IDAgMjMuMjM2IDExLjgwNCAyMy4wMTUgMjYuMiAwIDE0LjM3NS0xMC4xNDggMjYuMTgtMjMuMDE1IDI2LjE4Ii8+PC9zdmc+"
        },
        "displayName": "Discord",
        "typeVersion": 2,
        "nodeCategories": [
          {
            "id": 6,
            "name": "Communication"
          },
          {
            "id": 28,
            "name": "HITL"
          }
        ]
      },
      {
        "id": 112,
        "icon": "fa:map-signs",
        "name": "n8n-nodes-base.switch",
        "codex": {
          "data": {
            "alias": [
              "Router",
              "If",
              "Path",
              "Filter",
              "Condition",
              "Logic",
              "Branch",
              "Case"
            ],
            "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/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/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/automation-for-maintainers-of-open-source-projects/",
                  "icon": "🏷️",
                  "label": "How to automatically manage contributions to open-source projects"
                }
              ],
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.switch/"
                }
              ]
            },
            "categories": [
              "Core Nodes"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0",
            "subcategories": {
              "Core Nodes": [
                "Flow"
              ]
            }
          }
        },
        "group": "[\"transform\"]",
        "defaults": {
          "name": "Switch",
          "color": "#506000"
        },
        "iconData": {
          "icon": "map-signs",
          "type": "icon"
        },
        "displayName": "Switch",
        "typeVersion": 3,
        "nodeCategories": [
          {
            "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": 839,
        "icon": "fa:clock",
        "name": "n8n-nodes-base.scheduleTrigger",
        "codex": {
          "data": {
            "alias": [
              "Time",
              "Scheduler",
              "Polling",
              "Cron",
              "Interval"
            ],
            "resources": {
              "generic": [],
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.scheduletrigger/"
                }
              ]
            },
            "categories": [
              "Core Nodes"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0"
          }
        },
        "group": "[\"trigger\",\"schedule\"]",
        "defaults": {
          "name": "Schedule Trigger",
          "color": "#31C49F"
        },
        "iconData": {
          "icon": "clock",
          "type": "icon"
        },
        "displayName": "Schedule Trigger",
        "typeVersion": 1,
        "nodeCategories": [
          {
            "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": 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": 16,
        "name": "DevOps"
      },
      {
        "id": 49,
        "name": "AI Summarization"
      }
    ],
    "image": [
      {
        "id": 1806,
        "url": "https://n8niostorageaccount.blob.core.windows.net/n8nio-strapi-blobs-prod/assets/Screenshot_2025_07_19_at_14_27_24_690f2de3f3.png"
      },
      {
        "id": 1807,
        "url": "https://n8niostorageaccount.blob.core.windows.net/n8nio-strapi-blobs-prod/assets/Screenshot_2025_07_19_at_14_25_27_c0b980a426.png"
      }
    ]
  }
}