{
  "id": "IdoJSuGn4RiJRWh5",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Human-Governed AI Content Publishing Pipeline using Telegram for LinkedIn Post",
  "tags": [],
  "nodes": [
    {
      "id": "ffd93ee7-e36c-4c08-843f-c663a8702bbc",
      "name": "Ollama Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOllama",
      "position": [
        736,
        -272
      ],
      "parameters": {
        "model": "qwen2.5:3b",
        "options": {}
      },
      "credentials": {
        "ollamaApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "e9aad559-e466-419d-9a41-ccf57d59fd2a",
      "name": "AI Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        736,
        -528
      ],
      "parameters": {
        "text": "=You are an AI news summarization agent.\n\nYour task is to analyze the provided RSS/news article data and generate a clean structured JSON response.\n\nInput Data:\nCreator: {{ $json.creator }}\nTitle: {{ $json.title }}\nLink: {{ $json.link }}\nPublished Date: {{ $json.pubDate }}\nContent: {{ $json.content }}\n\nInstructions:\n1. Read and understand the article content.\n2. Generate a concise summary in 3-5 sentences.\n3. Extract the main topic/category.\n4. Identify important keywords.\n5. Detect sentiment if possible (Positive, Neutral, Negative).\n6. Return ONLY valid JSON.\n7. Do not include markdown or explanations.\n\nOutput JSON format:\n\n{\n  \"creator\": \"\",\n  \"title\": \"\",\n  \"link\": \"\",\n  \"published_date\": \"\",\n  \"summary\": \"\",\n  \"category\": \"\",\n  \"keywords\": [],\n  \"sentiment\": \"\",\n  \"important_points\": []\n}",
        "options": {},
        "promptType": "define"
      },
      "typeVersion": 3.1
    },
    {
      "id": "4f4f0cfc-f449-465f-8fec-ea993ec40322",
      "name": "Insert rows in a table1",
      "type": "n8n-nodes-base.postgres",
      "position": [
        1408,
        -528
      ],
      "parameters": {
        "table": {
          "__rl": true,
          "mode": "list",
          "value": "rss_feed_articles",
          "cachedResultName": "rss_feed_articles"
        },
        "schema": {
          "__rl": true,
          "mode": "list",
          "value": "public"
        },
        "columns": {
          "value": {
            "link": "={{ $('Code in JavaScript').item.json.link }}",
            "title": "={{ $('Code in JavaScript').item.json.title }}",
            "creator": "={{ $('Code in JavaScript').item.json.creator }}",
            "summary": "={{ $('Code in JavaScript').item.json.summary }}",
            "category": "={{ $('Code in JavaScript').item.json.category }}",
            "keywords": "={{ $('Code in JavaScript').item.json.keywords }}",
            "sentiment": "={{ $('Code in JavaScript').item.json.sentiment }}",
            "is_approved": false,
            "published_date": "={{ $('Code in JavaScript').item.json.published_date }}",
            "important_points": "={{ $('Code in JavaScript').item.json.important_points }}"
          },
          "schema": [
            {
              "id": "id",
              "type": "number",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "id",
              "defaultMatch": true,
              "canBeUsedToMatch": true
            },
            {
              "id": "creator",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "creator",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "title",
              "type": "string",
              "display": true,
              "required": true,
              "displayName": "title",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "link",
              "type": "string",
              "display": true,
              "required": true,
              "displayName": "link",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "published_date",
              "type": "dateTime",
              "display": true,
              "required": false,
              "displayName": "published_date",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "summary",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "summary",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "category",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "category",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "keywords",
              "type": "array",
              "display": true,
              "required": false,
              "displayName": "keywords",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "sentiment",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "sentiment",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "important_points",
              "type": "array",
              "display": true,
              "required": false,
              "displayName": "important_points",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "is_approved",
              "type": "boolean",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "is_approved",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "created_at",
              "type": "dateTime",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "created_at",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "id"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {}
      },
      "credentials": {
        "postgres": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.6
    },
    {
      "id": "ebec4384-0b2e-4aed-b8f0-59bec07b0b82",
      "name": "Telegram Trigger",
      "type": "n8n-nodes-base.telegramTrigger",
      "position": [
        -64,
        64
      ],
      "parameters": {
        "updates": [
          "message"
        ],
        "additionalFields": {}
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "79b4617d-8bf1-40e6-ad32-4e1e07728d6c",
      "name": "Code in JavaScript",
      "type": "n8n-nodes-base.code",
      "position": [
        1104,
        -528
      ],
      "parameters": {
        "jsCode": "const parsed = JSON.parse($input.first().json.output);\n\nreturn [\n  {\n    json: parsed\n  }\n];"
      },
      "typeVersion": 2
    },
    {
      "id": "64bc816c-7fd2-48d4-8dd1-ab0491cfd01b",
      "name": "No Operation, do nothing",
      "type": "n8n-nodes-base.noOp",
      "position": [
        1648,
        -528
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "ca6d2797-09c2-4417-9470-27fafbe2d8de",
      "name": "Create a post",
      "type": "n8n-nodes-base.linkedIn",
      "position": [
        1968,
        48
      ],
      "parameters": {
        "text": "xsaxs",
        "additionalFields": {}
      },
      "credentials": {
        "linkedInOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "108d7a0a-fbf8-42ad-8988-e6e617576907",
      "name": "No Operation, do nothing1",
      "type": "n8n-nodes-base.noOp",
      "position": [
        2080,
        224
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "616c0c5d-1685-40ca-8f43-d093b7860c1f",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -240,
        -768
      ],
      "parameters": {
        "color": 3,
        "width": 2960,
        "height": 640,
        "content": "# AI Processing Layer:\n## \u2022 RSS Feed Aggregation\n## \u2022 Ollama AI Summarization\n## \u2022 Metadata Extraction"
      },
      "typeVersion": 1
    },
    {
      "id": "9e38960b-8b1b-4e0f-824c-3f9cb5cca87f",
      "name": "Send message and wait for response",
      "type": "n8n-nodes-base.telegram",
      "position": [
        976,
        64
      ],
      "parameters": {
        "chatId": "={{ $('Telegram Trigger').item.json.message.chat.id }}",
        "message": "=\ud83d\udcf0 *{{ $json.title }}*\n\n\ud83d\udc64 *Creator:* {{ $json.creator }}\n\n\ud83d\udcc2 *Category:* {{ $json.category }}\n\n\ud83d\ude0a *Sentiment:* {{ $json.sentiment }}\n\n\ud83d\udcdd *Summary:*\n{{ $json.summary }}\n\n\n\ud83d\udd17 *Read More:*\n{{ $json.link }}\n\n\ud83d\udcc5 *Published:*\n{{ $json.published_date }}",
        "options": {},
        "operation": "sendAndWait"
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "46194e82-1b58-4e11-ade4-5aec5aae8aa0",
      "name": "RSS Read",
      "type": "n8n-nodes-base.rssFeedRead",
      "position": [
        400,
        -528
      ],
      "parameters": {
        "url": "https://feeds.arstechnica.com/arstechnica/index",
        "options": {}
      },
      "typeVersion": 1.2
    },
    {
      "id": "dc543f1e-862d-420c-a649-24ed849a8e1b",
      "name": "Loop Over Items",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        624,
        48
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "12b26c01-b362-4d1f-96c4-5201f87530e3",
      "name": "Select rows from a table",
      "type": "n8n-nodes-base.postgres",
      "position": [
        144,
        64
      ],
      "parameters": {
        "limit": 10,
        "table": {
          "__rl": true,
          "mode": "list",
          "value": "rss_feed_articles",
          "cachedResultName": "rss_feed_articles"
        },
        "where": {
          "values": [
            {
              "column": "is_approved",
              "condition": "IS NULL"
            }
          ]
        },
        "schema": {
          "__rl": true,
          "mode": "list",
          "value": "public"
        },
        "options": {},
        "operation": "select"
      },
      "credentials": {
        "postgres": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.6,
      "alwaysOutputData": true
    },
    {
      "id": "52588ad4-da69-46e7-8ae0-727fc997c34f",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -240,
        -128
      ],
      "parameters": {
        "width": 2960,
        "height": 736,
        "content": "# Human Governance Layer:\n## \u2022 Telegram Approval Workflow\n## \u2022 Manual Content Validation\n## \u2022 Publishing Control"
      },
      "typeVersion": 1
    },
    {
      "id": "aeffea68-6bef-4fe9-97bb-8f36ea7d547a",
      "name": "If",
      "type": "n8n-nodes-base.if",
      "position": [
        1184,
        64
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 3,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "5c1ae620-776d-424a-838b-d53f70bfddda",
              "operator": {
                "type": "boolean",
                "operation": "equals"
              },
              "leftValue": "={{ $json.data.approved }}",
              "rightValue": true
            }
          ]
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "7215dcbb-ad3a-42a5-8c9e-81c44ef109df",
      "name": "Update rows in a table",
      "type": "n8n-nodes-base.postgres",
      "position": [
        1488,
        48
      ],
      "parameters": {
        "table": {
          "__rl": true,
          "mode": "list",
          "value": "rss_feed_articles",
          "cachedResultName": "rss_feed_articles"
        },
        "schema": {
          "__rl": true,
          "mode": "list",
          "value": "public"
        },
        "columns": {
          "value": {
            "id": "={{ $('Loop Over Items').item.json.id }}",
            "is_approved": true
          },
          "schema": [
            {
              "id": "id",
              "type": "number",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "id",
              "defaultMatch": true,
              "canBeUsedToMatch": true
            },
            {
              "id": "creator",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "creator",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "title",
              "type": "string",
              "display": true,
              "removed": true,
              "required": true,
              "displayName": "title",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "link",
              "type": "string",
              "display": true,
              "removed": true,
              "required": true,
              "displayName": "link",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "published_date",
              "type": "dateTime",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "published_date",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "summary",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "summary",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "category",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "category",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "keywords",
              "type": "array",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "keywords",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "sentiment",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "sentiment",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "important_points",
              "type": "array",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "important_points",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "is_approved",
              "type": "boolean",
              "display": true,
              "required": false,
              "displayName": "is_approved",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "created_at",
              "type": "dateTime",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "created_at",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "id"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "update"
      },
      "credentials": {
        "postgres": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.6
    },
    {
      "id": "43c78949-e8a5-4b29-b992-2a9d40befaa4",
      "name": "Update rows in a table1",
      "type": "n8n-nodes-base.postgres",
      "position": [
        1488,
        224
      ],
      "parameters": {
        "table": {
          "__rl": true,
          "mode": "list",
          "value": "rss_feed_articles",
          "cachedResultName": "rss_feed_articles"
        },
        "schema": {
          "__rl": true,
          "mode": "list",
          "value": "public"
        },
        "columns": {
          "value": {
            "id": "={{ $('Loop Over Items').item.json.id }}",
            "is_approved": false
          },
          "schema": [
            {
              "id": "id",
              "type": "number",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "id",
              "defaultMatch": true,
              "canBeUsedToMatch": true
            },
            {
              "id": "creator",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "creator",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "title",
              "type": "string",
              "display": true,
              "removed": true,
              "required": true,
              "displayName": "title",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "link",
              "type": "string",
              "display": true,
              "removed": true,
              "required": true,
              "displayName": "link",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "published_date",
              "type": "dateTime",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "published_date",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "summary",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "summary",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "category",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "category",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "keywords",
              "type": "array",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "keywords",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "sentiment",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "sentiment",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "important_points",
              "type": "array",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "important_points",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "is_approved",
              "type": "boolean",
              "display": true,
              "required": false,
              "displayName": "is_approved",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "created_at",
              "type": "dateTime",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "created_at",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "id"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "update"
      },
      "credentials": {
        "postgres": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.6
    },
    {
      "id": "9f6e1f28-9ca1-43b9-83be-b91ae1547cbe",
      "name": "If1",
      "type": "n8n-nodes-base.if",
      "position": [
        352,
        64
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 3,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "c626b43c-d373-4244-a751-b7eadc4076a8",
              "operator": {
                "type": "number",
                "operation": "gt"
              },
              "leftValue": "={{ $input.all().length }}",
              "rightValue": 0
            }
          ]
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "134f9b16-7787-4ef8-aa6e-d82bcce7cf9e",
      "name": "No Operation, do nothing3",
      "type": "n8n-nodes-base.noOp",
      "position": [
        368,
        304
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "d048feab-f752-44c6-b559-47c78233a4d0",
      "name": "No Operation, do nothing4",
      "type": "n8n-nodes-base.noOp",
      "position": [
        736,
        -96
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "b0e149de-d59b-4689-8e56-1d3a145e87e9",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -240,
        -1056
      ],
      "parameters": {
        "color": 5,
        "width": 2960,
        "height": 288,
        "content": "#  An AI-powered Human-in-the-Loop content automation workflow that collects RSS news feeds, generates structured summaries using local AI models, routes content through Telegram for human approval, and automatically publishes approved posts to LinkedIn.\n\n## The system combines AI efficiency with human governance to ensure high-quality, controlled, and brand-safe social media publishing."
      },
      "typeVersion": 1
    },
    {
      "id": "a46ac27f-b993-46c9-85c6-2f43becf4ade",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        896,
        -48
      ],
      "parameters": {
        "color": 4,
        "width": 272,
        "height": 304,
        "content": "## Human In Loop Approval "
      },
      "typeVersion": 1
    },
    {
      "id": "051db11b-f230-4eea-ac1d-e14700454a5d",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1872,
        -80
      ],
      "parameters": {
        "color": 4,
        "width": 272,
        "height": 304,
        "content": "## Automated LinkedIn Publishing"
      },
      "typeVersion": 1
    },
    {
      "id": "658684a6-bb99-4411-af19-a42214701d01",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1408,
        -48
      ],
      "parameters": {
        "color": 4,
        "width": 272,
        "height": 432,
        "content": "## Postgres Audit Tracking "
      },
      "typeVersion": 1
    },
    {
      "id": "1876bf30-b2f5-4f5d-abb6-63d8325b6da0",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        96,
        -16
      ],
      "parameters": {
        "color": 4,
        "width": 224,
        "height": 224,
        "content": "### Getting non approved feeds"
      },
      "typeVersion": 1
    },
    {
      "id": "d05a7854-c083-471e-9b54-5ab3b3375f6d",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        32,
        -624
      ],
      "parameters": {
        "color": 6,
        "width": 224,
        "height": 256,
        "content": "### Trigger when new data arrives"
      },
      "typeVersion": 1
    },
    {
      "id": "d9ecdae8-8b80-4995-acd1-7639cedf364d",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        720,
        -624
      ],
      "parameters": {
        "color": 6,
        "width": 304,
        "height": 256,
        "content": "### Ollama AI Summarization"
      },
      "typeVersion": 1
    },
    {
      "id": "05506e34-0433-4b92-9ab5-ca76fdd315ab",
      "name": "RSS Feed Trigger",
      "type": "n8n-nodes-base.rssFeedReadTrigger",
      "position": [
        80,
        -528
      ],
      "parameters": {
        "feedUrl": "https://feeds.arstechnica.com/arstechnica/index",
        "pollTimes": {
          "item": [
            {
              "mode": "everyMinute"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "84b913fd-3c35-4135-b0a3-6a10dcc2ac57",
      "name": "Sticky Note9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1072,
        -624
      ],
      "parameters": {
        "color": 6,
        "width": 224,
        "height": 256,
        "content": "### Metadata Extraction"
      },
      "typeVersion": 1
    },
    {
      "id": "a33b4554-02c9-454a-aae7-034e71dfbd4b",
      "name": "Sticky Note10",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        352,
        -624
      ],
      "parameters": {
        "color": 6,
        "width": 224,
        "height": 256,
        "content": "### Metadata Extraction"
      },
      "typeVersion": 1
    },
    {
      "id": "cdca2d28-56e7-4e3d-931a-cd627eec9437",
      "name": "Sticky Note11",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1360,
        -624
      ],
      "parameters": {
        "color": 6,
        "width": 224,
        "height": 256,
        "content": "### Db Storing"
      },
      "typeVersion": 1
    },
    {
      "id": "211a35e0-83b3-48a3-9707-e2ae8c942f5d",
      "name": "Sticky Note12",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1104,
        -1056
      ],
      "parameters": {
        "color": 7,
        "width": 864,
        "height": 1664,
        "content": "# SYSTEM REQUIREMENTS\n\n## Core Platform\n- PostgreSQL Database\n- Telegram Bot API\n- LinkedIn Developer Application\n- Ollama Local AI Runtime\n\n---\n\n## AI Models\n- qwen2.5:3b (Recommended)\n- Any Ollama-supported LLM\n\n---\n\n## Required Integrations\n- Telegram Bot\n- LinkedIn OAuth2\n- PostgreSQL Connection\n- RSS Feed Sources\n- Ollama API Access\n\n---\n\n## Database Tables Required\n\n### 1. rss_feed_articles\nStores processed AI-generated article summaries and approval status.\n\n# Database Schema \u2014 rss_feed_articles\n\n## Table: `rss_feed_articles`\n\nStores AI-processed RSS news articles, metadata, approval status, and publishing information.\n\n| Column Name       | Data Type      | Constraints / Default           | Description |\n|------------------|----------------|---------------------------------|-------------|\n| id               | SERIAL         | PRIMARY KEY                     | Unique article identifier |\n| creator          | TEXT           | NULLABLE                        | Author or creator of the article |\n| title            | TEXT           | NOT NULL                        | News article title |\n| link             | TEXT           | NOT NULL                        | Original article URL |\n| published_date   | TIMESTAMP      | NULLABLE                        | Original publication date |\n| summary          | TEXT           | NULLABLE                        | AI-generated article summary |\n| category         | VARCHAR(100)   | NULLABLE                        | Detected news category/topic |\n| keywords         | TEXT[]         | NULLABLE                        | Extracted keywords from article |\n| sentiment        | VARCHAR(20)    | NULLABLE                        | Sentiment analysis result |\n| important_points | TEXT[]         | NULLABLE                        | Key highlights extracted by AI |\n| is_approved      | BOOLEAN        | DEFAULT TRUE                    | Human approval status |\n| created_at       | TIMESTAMP      | DEFAULT CURRENT_TIMESTAMP       | Record creation timestamp |\n\n---\n\n## SQL Schema\n\n```sql\nCREATE TABLE rss_feed_articles (\n    id SERIAL PRIMARY KEY,\n    creator TEXT,\n    title TEXT NOT NULL,\n    link TEXT NOT NULL,\n    published_date TIMESTAMP,\n    summary TEXT,\n    category VARCHAR(100),\n    keywords TEXT[],\n    sentiment VARCHAR(20),\n    important_points TEXT[],\n    is_approved BOOLEAN DEFAULT TRUE,\n    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP\n);"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "binaryMode": "separate",
    "executionOrder": "v1"
  },
  "versionId": "94f16c58-4de2-4a64-9210-8278427fadf6",
  "connections": {
    "If": {
      "main": [
        [
          {
            "node": "Update rows in a table",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Update rows in a table1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "If1": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "No Operation, do nothing3",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI Agent": {
      "main": [
        [
          {
            "node": "Code in JavaScript",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "RSS Read": {
      "main": [
        [
          {
            "node": "AI Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create a post": {
      "main": [
        [
          {
            "node": "No Operation, do nothing1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Items": {
      "main": [
        [
          {
            "node": "No Operation, do nothing4",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Send message and wait for response",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "RSS Feed Trigger": {
      "main": [
        [
          {
            "node": "RSS Read",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Telegram Trigger": {
      "main": [
        [
          {
            "node": "Select rows from a table",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Ollama Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Code in JavaScript": {
      "main": [
        [
          {
            "node": "Insert rows in a table1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update rows in a table": {
      "main": [
        [
          {
            "node": "Create a post",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Insert rows in a table1": {
      "main": [
        [
          {
            "node": "No Operation, do nothing",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update rows in a table1": {
      "main": [
        [
          {
            "node": "No Operation, do nothing1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "No Operation, do nothing": {
      "main": [
        []
      ]
    },
    "Select rows from a table": {
      "main": [
        [
          {
            "node": "If1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "No Operation, do nothing1": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send message and wait for response": {
      "main": [
        [
          {
            "node": "If",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}