{
  "name": "🤖 Create a Documentation Expert Bot with RAG, Gemini, and Supabase",
  "nodes": [
    {
      "id": "2ad62f13-abb9-4278-b356-e864f6195333",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1264,
        -880
      ],
      "parameters": {
        "width": 832,
        "height": 544,
        "content": "## Video Tutorial\n\n@[youtube](J4Zwc6UzxAg)"
      }
    },
    {
      "id": "d5a76a59-a08d-4ed9-aa47-e49f01192e19",
      "name": "Simple Memory",
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "position": [
        -1136,
        -48
      ]
    },
    {
      "id": "1bbdea91-baef-465b-9d7a-29e3af85cdd3",
      "name": "Official n8n Documentation",
      "type": "@n8n/n8n-nodes-langchain.vectorStoreSupabase",
      "position": [
        -848,
        -48
      ]
    },
    {
      "id": "8c365d9c-c6f5-448d-8900-e51140056f0a",
      "name": "Default Data Loader",
      "type": "@n8n/n8n-nodes-langchain.documentDefaultDataLoader",
      "position": [
        576,
        -1552
      ]
    },
    {
      "id": "345ffcae-00ad-4555-ab88-4b9c5b4e7fac",
      "name": "Recursive Character Text Splitter",
      "type": "@n8n/n8n-nodes-langchain.textSplitterRecursiveCharacterTextSplitter",
      "position": [
        672,
        -1344
      ]
    },
    {
      "id": "42c79849-3529-471e-b355-76363791f0f5",
      "name": "Remove Duplicate Documentation Content",
      "type": "n8n-nodes-base.removeDuplicates",
      "position": [
        -48,
        -1776
      ]
    },
    {
      "id": "3e914e61-6eb1-4570-83ca-89987b32bbcd",
      "name": "Only Keep Doc Paths",
      "type": "n8n-nodes-base.filter",
      "position": [
        80,
        -2544
      ]
    },
    {
      "id": "648fc609-500b-49cb-b1a2-a3d531e04ed9",
      "name": "Clean Documentation",
      "type": "n8n-nodes-base.set",
      "position": [
        -480,
        -1776
      ]
    },
    {
      "id": "f2ffe790-312a-43b9-b568-398ef2ae508d",
      "name": "Gemini 2.5 Flash",
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "position": [
        -1488,
        -48
      ]
    },
    {
      "id": "fbda8b9a-038d-4968-b65d-a438cbfac493",
      "name": "Your Supabase Vector Store",
      "type": "@n8n/n8n-nodes-langchain.vectorStoreSupabase",
      "position": [
        464,
        -1776
      ]
    },
    {
      "id": "e09949fc-205a-4a6e-ac02-038c8c8409da",
      "name": "Get All n8n Documentation Links",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -1072,
        -2544
      ]
    },
    {
      "id": "2bccb047-cdb0-41cd-bd23-457b3aaffc02",
      "name": "Extract Links from HTML",
      "type": "n8n-nodes-base.html",
      "position": [
        -784,
        -2544
      ]
    },
    {
      "id": "6cbddaa0-24b2-4bff-b72f-13220065ceee",
      "name": "Split Out Links",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        -448,
        -2544
      ]
    },
    {
      "id": "75d011f4-cb3b-4f8c-8cd0-902205ea6e8b",
      "name": "Remove Duplicate Links",
      "type": "n8n-nodes-base.removeDuplicates",
      "position": [
        -144,
        -2544
      ]
    },
    {
      "id": "2ff289f1-9fca-4b26-bd97-8748c4c0c982",
      "name": "Add Documentation Page to Vector Store",
      "type": "n8n-nodes-base.executeWorkflow",
      "position": [
        592,
        -2512
      ]
    },
    {
      "id": "602123a8-8889-4f07-a7bd-2c2f3e1f710d",
      "name": "Get Documentation Page",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -1008,
        -1776
      ]
    },
    {
      "id": "f3d49729-da95-4676-ba77-2f1f69c03b4c",
      "name": "Extract Documentation Content",
      "type": "n8n-nodes-base.html",
      "position": [
        -704,
        -1776
      ]
    },
    {
      "id": "10d376c0-d5e8-4d3e-a420-78616724f491",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2560,
        -2192
      ],
      "parameters": {
        "width": 760,
        "height": 752,
        "content": "-- Enable the pgvector extension to work with embedding vectors (REMOVE THIS LINE IF ALREADY ENABLED)\ncreate extension vector;\n\n-- Create a table to store your documents\ncreate table documents (\n  id "
      }
    },
    {
      "id": "dc7586a5-10ff-445a-add8-c385a3f19e5c",
      "name": "Gemini Query Embedding",
      "type": "@n8n/n8n-nodes-langchain.embeddingsGoogleGemini",
      "position": [
        -768,
        144
      ]
    },
    {
      "id": "0c699715-c6d5-4292-aa2e-cacf9f684c2f",
      "name": "Gemini Chunk Embedding",
      "type": "@n8n/n8n-nodes-langchain.embeddingsGoogleGemini",
      "position": [
        448,
        -1552
      ]
    },
    {
      "id": "8706ada8-8b69-4b68-aab2-c96c2b2119d0",
      "name": "Keep Supabase Instance Alive",
      "type": "n8n-nodes-base.supabase",
      "position": [
        -112,
        -896
      ]
    },
    {
      "id": "c140b29f-6fea-456d-a2f2-de02e669f48b",
      "name": "Every 6 Days",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -336,
        -896
      ]
    },
    {
      "id": "1e7540da-bf42-4fcb-b3cb-37f45a532728",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1664,
        -2896
      ],
      "parameters": {
        "width": 2640,
        "height": 1760,
        "content": "## Part 1: Building the Knowledge Base (The Library)\n\n**Goal:** To read all n8n documentation, break it into small pieces, and store it in our Supabase database.\n**Action:** You only need to run this "
      }
    },
    {
      "id": "272fcc9f-887a-4b7c-a92e-212b73286230",
      "name": "Loop Over Documentation Pages",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        368,
        -2544
      ]
    },
    {
      "id": "a620eb1b-3afa-41b2-a92c-00c0250fb62d",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2624,
        -3424
      ],
      "parameters": {
        "width": 1064,
        "height": 504,
        "content": "# Tutorial: Build an AI Expert with RAG\n\nWelcome! This workflow teaches you **RAG (Retrieval-Augmented Generation)**.\n\n**The Goal:** To create an AI chatbot that is an expert on a specific topic (the "
      }
    },
    {
      "id": "52b33334-f3bf-4fd0-a595-9993b5e59e45",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2624,
        -2896
      ],
      "parameters": {
        "width": 924,
        "height": 3228,
        "content": "# Workflow Setup"
      }
    },
    {
      "id": "cbd4f31b-1ae0-4b9a-b479-0ac0598b829a",
      "name": "n8n Docs AI Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        -1120,
        -640
      ]
    },
    {
      "id": "b034896c-93d8-4ea9-99d1-4e4d5e014412",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1168,
        -2752
      ],
      "parameters": {
        "width": 288,
        "height": 400,
        "content": "### Step 1.1: Find All the 'Books'\n\n**What it does:** This node visits the main n8n documentation page.\n**Analogy:** We're asking the library's front desk for a complete list of every single book they"
      }
    },
    {
      "id": "46c45a67-e934-4b08-8e26-4cde8452fc75",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -864,
        -2752
      ],
      "parameters": {
        "width": 272,
        "height": 400,
        "content": "### Step 1.2: Read the List of Books\n\n**What it does:** It takes the HTML from the previous step and extracts every single link (`<a>` tag).\n**Analogy:** We're reading the list from the front desk and"
      }
    },
    {
      "id": "f1f4f619-bf7f-46bd-b693-a52d4d086792",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -576,
        -2752
      ],
      "parameters": {
        "width": 336,
        "height": 400,
        "content": "### Step 1.3: Process One Book at a Time\n\n**What it does:** It takes the big list of links and turns each link into a separate item for n8n to process.\n**Analogy:** Instead of trying to read all the b"
      }
    },
    {
      "id": "c797b838-0aee-4e27-b13b-f9bbc106fb65",
      "name": "Sticky Note9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -224,
        -2752
      ],
      "parameters": {
        "width": 480,
        "height": 400,
        "content": "### Step 1.4: Tidy Up the To-Do List\n\n**What it does:** First, it removes any duplicate links. Then, it filters out any links that don't point to an actual documentation page (e.g., links to the homep"
      }
    },
    {
      "id": "b0e2599e-5e8d-40a7-8c8e-69e874ce22dc",
      "name": "Sticky Note10",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        272,
        -2752
      ],
      "parameters": {
        "width": 512,
        "height": 464,
        "content": "### Step 1.5: The Librarian's Reading Loop\n\n**What it does:** This is the engine of the indexing process. It takes our clean list of pages and processes them one by one. The `Execute Workflow` node ca"
      }
    },
    {
      "id": "3177c487-9dfb-4f21-839f-130f65a9b859",
      "name": "Sticky Note11",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1104,
        -1984
      ],
      "parameters": {
        "width": 288,
        "height": 384,
        "content": "### Step 1.5.1: Read a Single Page\n\n**What it does:** This node takes a single URL from the loop and fetches the HTML content of that page.\n**Analogy:** The librarian opens one book to the first page."
      }
    },
    {
      "id": "e6f2fa91-e79a-4157-9985-79b591d88df5",
      "name": "Sticky Note12",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1632,
        -2128
      ],
      "parameters": {
        "width": 512,
        "height": 528,
        "content": "### Why Use a Sub-Workflow?\n\nThe main reason is **memory management**.\n\nProcessing a single web page, especially creating vector embeddings for all its chunks, uses a lot of memory (RAM). The n8n docu"
      }
    },
    {
      "id": "db438316-dbed-4d25-ac1a-80373a7235af",
      "name": "Sticky Note13",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -800,
        -1984
      ],
      "parameters": {
        "width": 512,
        "height": 384,
        "content": "### Step 1.5.2: Get the Good Stuff\n\n**What it does:** It extracts only the main text from the article on the page, ignoring menus, footers, and images. Then, it cleans up the formatting.\n**Analogy:** "
      }
    },
    {
      "id": "9b8b485b-4be8-474a-9ba1-1a1d55d7a02e",
      "name": "Sticky Note14",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -272,
        -2208
      ],
      "parameters": {
        "width": 544,
        "height": 608,
        "content": "### Step 1.5.3: Avoid Re-reading\n\n**What it does:** It checks if we have already processed this exact page content in a previous run. If so, it stops here to save time and resources.\n**Analogy:** The "
      }
    },
    {
      "id": "e271d052-dc6e-4380-be18-8d51c49fc6ef",
      "name": "Sticky Note15",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        288,
        -2208
      ],
      "parameters": {
        "width": 656,
        "height": 1040,
        "content": "### Step 1.5.4: Create & Store the 'Magic Index Cards'\n\nThis is the most important step of indexing!\n\n1.  **`Recursive Character Text Splitter`:** The text is broken down into small, overlapping parag"
      }
    },
    {
      "id": "041060ee-020a-4541-b894-3a7f531fc20e",
      "name": "Sticky Note16",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1664,
        -1104
      ],
      "parameters": {
        "width": 1200,
        "height": 1440,
        "content": "## Part 2: The Chatbot (Talking to the Expert Librarian)\n\n**Goal:** To provide an interface where a user can ask a question, have the system find relevant information from the knowledge base, and get "
      }
    },
    {
      "id": "f93ae799-f751-48ce-ac9e-98a0ec2c8cda",
      "name": "Sticky Note17",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1632,
        -944
      ],
      "parameters": {
        "width": 368,
        "height": 448,
        "content": "### The Front Desk: Ask Your Question Here\n\n**What it does:** This is the public-facing chat interface. When you send a message here, the entire RAG process begins.\n\n**Action:**\n1.  **Activate** the e"
      }
    },
    {
      "id": "e13e5f83-3628-4bc9-9d4a-2b2a1d8f5af8",
      "name": "Sticky Note18",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1248,
        -832
      ],
      "parameters": {
        "width": 560,
        "height": 400,
        "content": "### The Brains: The Expert Librarian\n\n**What it does:** This is the AI agent that orchestrates the entire response. It understands your question, decides which tools to use, and formulates the final a"
      }
    },
    {
      "id": "5597474d-cded-474e-a9cc-631050986d63",
      "name": "Sticky Note19",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1632,
        -480
      ],
      "parameters": {
        "width": 368,
        "height": 576,
        "content": "### The 'Synthesizer' & 'Strategist'\n\n**What it does:** This is the Large Language Model (LLM). It has two critical jobs:\n\n1.  **The Strategist:** Based on your question and the conversation history, "
      }
    },
    {
      "id": "60d88a66-9f0c-482f-8235-461695fd9d02",
      "name": "Sticky Note20",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1248,
        -416
      ],
      "parameters": {
        "width": 288,
        "height": 512,
        "content": "### Short-Term Memory\n\n**What it does:** This node stores the last few messages of your conversation.\n**Analogy:** This helps the librarian remember what you just talked about, so you can ask follow-u"
      }
    },
    {
      "id": "c2c15516-c4f3-4770-9435-8a2ec33d4d80",
      "name": "Sticky Note21",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -944,
        -416
      ],
      "parameters": {
        "width": 448,
        "height": 720,
        "content": "### The Tool: The 'Magic Filing Cabinet' Retriever\n\nThis is the \"Retrieval\" part of RAG. When the agent gets your question, it uses this tool to find the most relevant information.\n\n1.  **`Gemini Quer"
      }
    },
    {
      "id": "d450a7b2-584a-4e47-b66b-0f5442db45ec",
      "name": "Sticky Note22",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -432,
        -1104
      ],
      "parameters": {
        "width": 544,
        "height": 416,
        "content": "## Optional: Keep the Database Awake\n\n**What it does:** Free Supabase projects \"go to sleep\" after a week of inactivity. This scheduled trigger runs a tiny query every 6 days to keep your database awa"
      }
    },
    {
      "id": "ee177bf3-36c5-4b05-baad-b0858be54d0a",
      "name": "Start Indexing",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -1312,
        -2544
      ]
    },
    {
      "id": "b1e9e574-d2d7-41be-8859-b3aeea8c5be0",
      "name": "RAG Chatbot",
      "type": "@n8n/n8n-nodes-langchain.chatTrigger",
      "position": [
        -1472,
        -640
      ]
    },
    {
      "id": "486ed614-77bc-41fd-bc8e-d034701b6919",
      "name": "Sticky Note25",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2592,
        -2816
      ],
      "parameters": {
        "width": 704,
        "height": 256,
        "content": "## Setup Step 1: Create Your Supabase Project\n\nFirst, we need to create the \"library\" where your AI's knowledge will be stored.\n\n**Action:**\n1.  Go to [supabase.com](https://supabase.com/) and sign up"
      }
    },
    {
      "id": "ece95b88-01df-4d23-9004-878c5d6a7b49",
      "name": "Sticky Note26",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2592,
        -2544
      ],
      "parameters": {
        "width": 832,
        "height": 1136,
        "content": "## Setup Step 2: Prepare the Database (SQL)\n\nNow we need to build the \"shelves\" and \"card catalog system\" for our library.\n\n**Action:**\n1.  In your Supabase project, go to the **SQL Editor**.\n2.  Find"
      }
    },
    {
      "id": "f68cfb36-4229-42de-b249-d99ae6de65ee",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2592,
        -16
      ],
      "parameters": {
        "width": 624,
        "height": 320,
        "content": "## Setup Step 7: Chat with Your Expert!\n\nCongratulations, the library is built! Now it's time to ask the expert librarian a question.\n\n**Action:**\n1.  **Activate** the entire workflow using the toggle"
      }
    },
    {
      "id": "1f66a70a-1da1-42f1-ada9-4d298fe6636f",
      "name": "Sticky Note23",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2592,
        -1392
      ],
      "parameters": {
        "width": 720,
        "height": 272,
        "content": "## Setup Step 3: Get Your Supabase Keys\n\nTo let n8n access your new library, we need the keys.\n\n**Action:**\n1.  Go to **Project Settings > API**.\n2.  Find the **Project URL**. Copy it.\n3.  Find the **"
      }
    },
    {
      "id": "16a876d7-73f4-4d60-8fc2-9f6b682e346d",
      "name": "Sticky Note24",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2592,
        -1104
      ],
      "parameters": {
        "width": 656,
        "height": 400,
        "content": "## Setup Step 4: Connect Your Credentials\n\nNow, let's save those keys securely in n8n without leaving the workflow.\n\n**Action for Supabase:**\n1.  Go to the **`Your Supabase Vector Store`** node on the"
      }
    },
    {
      "id": "5e4db806-3fda-48f3-b0e4-be7d042dec8e",
      "name": "Sticky Note27",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2592,
        -688
      ],
      "parameters": {
        "width": 864,
        "height": 368,
        "content": "## Setup Step 5: Select Credentials for Other Nodes\n\nYour new credentials are now saved. Let's make sure all the other nodes are using them.\n\n**Action:**\nGo to the remaining Supabase and Gemini nodes."
      }
    },
    {
      "id": "49d66d23-1eb4-4cb3-bada-c2dc3cea3599",
      "name": "Sticky Note28",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2592,
        -304
      ],
      "parameters": {
        "width": 784,
        "height": 272,
        "content": "## Setup Step 6: Build the Knowledge Base (Indexing)\n\nThis is the big one-time step where the \"librarian\" reads all the books.\n\n**Action:**\n1.  Find the **`Start Indexing`** manual trigger node at the"
      }
    },
    {
      "id": "a981dd10-915b-46bf-9c79-58ec73dd7cd7",
      "name": "Ingest Web Page",
      "type": "n8n-nodes-base.executeWorkflowTrigger",
      "position": [
        -1312,
        -1776
      ]
    },
    {
      "id": "d4bd1733-e4c7-4487-a6c1-591c3acbffc0",
      "name": "Sticky Note30",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -432,
        -656
      ],
      "parameters": {
        "width": 544,
        "height": 1088,
        "content": "## Was this helpful? Let me know!\n[![clic](https://supastudio.ia2s.app/storage/v1/object/public/assets/n8n/clic_down_lucas.gif)](https://workflows.ac/form)\n\nI really hope this template helped you. You"
      }
    }
  ],
  "connections": {
    "RAG Chatbot": {
      "main": [
        [
          {
            "node": "n8n Docs AI Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Every 6 Days": {
      "main": [
        [
          {
            "node": "Keep Supabase Instance Alive",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Simple Memory": {
      "ai_memory": [
        [
          {
            "node": "n8n Docs AI Agent",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "Start Indexing": {
      "main": [
        [
          {
            "node": "Get All n8n Documentation Links",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Ingest Web Page": {
      "main": [
        [
          {
            "node": "Get Documentation Page",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split Out Links": {
      "main": [
        [
          {
            "node": "Remove Duplicate Links",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Gemini 2.5 Flash": {
      "ai_languageModel": [
        [
          {
            "node": "n8n Docs AI Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Clean Documentation": {
      "main": [
        [
          {
            "node": "Remove Duplicate Documentation Content",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Default Data Loader": {
      "ai_document": [
        [
          {
            "node": "Your Supabase Vector Store",
            "type": "ai_document",
            "index": 0
          }
        ]
      ]
    },
    "Only Keep Doc Paths": {
      "main": [
        [
          {
            "node": "Loop Over Documentation Pages",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Gemini Chunk Embedding": {
      "ai_embedding": [
        [
          {
            "node": "Your Supabase Vector Store",
            "type": "ai_embedding",
            "index": 0
          }
        ]
      ]
    },
    "Gemini Query Embedding": {
      "ai_embedding": [
        [
          {
            "node": "Official n8n Documentation",
            "type": "ai_embedding",
            "index": 0
          }
        ]
      ]
    },
    "Get Documentation Page": {
      "main": [
        [
          {
            "node": "Extract Documentation Content",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Remove Duplicate Links": {
      "main": [
        [
          {
            "node": "Only Keep Doc Paths",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract Links from HTML": {
      "main": [
        [
          {
            "node": "Split Out Links",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Official n8n Documentation": {
      "ai_tool": [
        [
          {
            "node": "n8n Docs AI Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Extract Documentation Content": {
      "main": [
        [
          {
            "node": "Clean Documentation",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Documentation Pages": {
      "main": [
        [],
        [
          {
            "node": "Add Documentation Page to Vector Store",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get All n8n Documentation Links": {
      "main": [
        [
          {
            "node": "Extract Links from HTML",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Recursive Character Text Splitter": {
      "ai_textSplitter": [
        [
          {
            "node": "Default Data Loader",
            "type": "ai_textSplitter",
            "index": 0
          }
        ]
      ]
    },
    "Add Documentation Page to Vector Store": {
      "main": [
        [
          {
            "node": "Loop Over Documentation Pages",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Remove Duplicate Documentation Content": {
      "main": [
        [
          {
            "node": "Your Supabase Vector Store",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}