{
  "name": "News Digets",
  "nodes": [
    {
      "parameters": {
        "rule": {
          "interval": [
            {
              "triggerAtHour": 7
            }
          ]
        }
      },
      "id": "bcafb006-6592-44e3-ae7e-48a6afff45aa",
      "name": "Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1.3,
      "position": [
        -256,
        96
      ]
    },
    {
      "parameters": {
        "url": "https://www.theverge.com/rss/index.xml",
        "options": {}
      },
      "id": "0c287a8a-8437-4ef8-bf11-4e102f2756e1",
      "name": "theverge",
      "type": "n8n-nodes-base.rssFeedRead",
      "typeVersion": 1.2,
      "position": [
        640,
        0
      ],
      "executeOnce": true,
      "retryOnFail": true,
      "alwaysOutputData": true,
      "onError": "continueRegularOutput"
    },
    {
      "parameters": {},
      "id": "509cc581-97e7-49e2-a38f-8f501861d746",
      "name": "Collect Feeds",
      "type": "n8n-nodes-base.merge",
      "typeVersion": 3.2,
      "position": [
        2192,
        96
      ]
    },
    {
      "parameters": {
        "jsCode": "// RSS source NODE NAME -> category.\nconst CATEGORY = {\n  // AI\n  'techcrunch':             'AI',\n  'venturebeat':            'AI',\n  // Tech\n  'arstechnica':            'Tech',\n  'theverge':               'Tech',\n  // Finance\n  'investingcom':           'Finanzen',\n  'cnbcFinance':            'Finanzen',\n  // Economy\n  'theguardian':            'Wirtschaft',\n  'bbcBusiness':            'Wirtschaft',\n  // Weltnews\n  'tagesschau':             'Weltnews',\n  'bbcWorld':               'Weltnews',\n  // Reddit (combined multi-subreddit feed)\n  './subreddits':           'Reddit',\n};\nconst PUBLISHER = {\n  'techcrunch':    'TechCrunch',\n  'venturebeat':   'VentureBeat',\n  'arstechnica':   'Ars Technica',\n  'theverge':      'The Verge',\n  'investingcom':  'Investing.com',\n  'cnbcFinance':   'CNBC',\n  'theguardian':   'The Guardian',\n  'bbcBusiness':   'BBC Business',\n  'tagesschau':    'Tagesschau',\n  'bbcWorld':      'BBC News',\n  // './subreddits' bewusst NICHT hier - wird dynamisch aus dem Link ermittelt\n};\n// Nodes, bei denen der Publisher dynamisch aus dem Link extrahiert wird (statt fixem Mapping)\nconst DYNAMIC_REDDIT = new Set(['./subreddits']);\nfunction extractSubreddit(link){\n  const m = String(link||'').match(/reddit\\.com\\/r\\/([^\\/]+)\\//i);\n  return m ? ('r/' + m[1]) : 'Reddit';\n}\n// Google News feeds embed the real source at the end of the title: \"... - The Register\".\nconst GOOGLE_NEWS = new Set([]);\nconst MAX_AGE_HOURS = 48;\nconst now = Date.now();\nfunction stripHtml(s){ return String(s||'').replace(/<[^>]*>/g,' ').replace(/\\s+/g,' ').trim(); }\nfunction normTitle(s){ return stripHtml(s).toLowerCase().replace(/[^a-z0-9 ]/g,'').replace(/\\s+/g,' ').trim(); }\nfunction splitGoogleTitle(rawTitle){\n  const t = stripHtml(rawTitle);\n  const idx = t.lastIndexOf(' - ');\n  if (idx > 0 && idx > t.length - 60) {\n    return { title: t.slice(0, idx).trim(), publisher: t.slice(idx + 3).trim() };\n  }\n  return { title: t, publisher: '' };\n}\nconst out = [];\nconst seen = new Set();\nfunction add(category, source, publisher, title, link, dateStr, snippet){\n  title = stripHtml(title);\n  link = String(link || '').trim();\n  if (!title || !link) return;\n  let ts = dateStr ? Date.parse(dateStr) : NaN;\n  if (!isNaN(ts) && (now - ts) > MAX_AGE_HOURS*3600*1000) return;\n  const tnorm = normTitle(title);\n  const key = link.split('?')[0];\n  if (seen.has(key) || seen.has('t:'+tnorm)) return;\n  seen.add(key); seen.add('t:'+tnorm);\n  out.push({ json: {\n    category,\n    source,\n    publisher: publisher || source,\n    title,\n    link,\n    title_norm: tnorm,\n    snippet: stripHtml(snippet).slice(0,280),\n    published: dateStr || '',\n    published_ts: isNaN(ts) ? 0 : ts,\n  }});\n}\nfor (const source of Object.keys(CATEGORY)) {\n  let rows;\n  try { rows = $(source).all(); } catch (e) { continue; }\n  for (const it of (rows||[])) {\n    const j = it.json || {};\n    if (!j.title && !j.link) continue;\n    let title = j.title || '';\n    let publisher;\n    if (GOOGLE_NEWS.has(source)) {\n      const s = splitGoogleTitle(title);\n      title = s.title;\n      publisher = s.publisher;\n    } else if (DYNAMIC_REDDIT.has(source)) {\n      publisher = extractSubreddit(j.link || j.guid || '');\n    } else {\n      publisher = PUBLISHER[source] || source;\n    }\n    add(\n      CATEGORY[source],\n      source,\n      publisher,\n      title,\n      (j.link || j.guid || ''),\n      (j.isoDate || j.pubDate || j.date || null),\n      (j.contentSnippet || j.content || j.summary || '')\n    );\n  }\n}\nout.sort((a,b)=> (b.json.published_ts||0) - (a.json.published_ts||0));\nreturn out;"
      },
      "id": "20ff5417-bfbb-4cc8-97e3-de75952a000a",
      "name": "Normalize & Tag",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        2416,
        96
      ],
      "executeOnce": true,
      "alwaysOutputData": true
    },
    {
      "parameters": {
        "operation": "get",
        "dataTableId": {
          "__rl": true,
          "value": "P7tTI8S3iuDlgBpx",
          "mode": "list",
          "cachedResultName": "NEWS",
          "cachedResultUrl": "/projects/6Srcl5jmPgT9620y/datatables/P7tTI8S3iuDlgBpx"
        },
        "returnAll": true
      },
      "id": "ad941472-c083-4d67-91c8-7009f04b7abe",
      "name": "Get Sent Articles",
      "type": "n8n-nodes-base.dataTable",
      "typeVersion": 1.1,
      "position": [
        2640,
        96
      ],
      "executeOnce": true,
      "alwaysOutputData": true
    },
    {
      "parameters": {
        "jsCode": "\nconst PER_CATEGORY_CANDIDATES = 25;\nconst candidates = $('Normalize & Tag').all();\n\nlet sentRows = [];\ntry { sentRows = $('Get Sent Articles').all(); } catch (e) { sentRows = []; }\nconst sentLinks = new Set();\nconst sentTitles = new Set();\nfor (const r of sentRows) {\n  const j = r.json || {};\n  if (j.article_link) sentLinks.add(String(j.article_link).split('?')[0]);\n  if (j.title_norm) sentTitles.add(String(j.title_norm));\n}\n\nconst perCat = {};\nconst out = [];\nfor (const it of candidates) {\n  const j = it.json;\n  const key = String(j.link).split('?')[0];\n  if (sentLinks.has(key)) continue;\n  if (j.title_norm && sentTitles.has(j.title_norm)) continue;\n  perCat[j.category] = (perCat[j.category]||0);\n  if (perCat[j.category] >= PER_CATEGORY_CANDIDATES) continue;\n  perCat[j.category]++;\n  out.push({ json: j });\n}\nreturn out;\n"
      },
      "id": "99ee5e58-fdef-4270-8629-80c406187af3",
      "name": "Filter New & Cap",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        2864,
        96
      ],
      "executeOnce": true,
      "alwaysOutputData": true
    },
    {
      "parameters": {
        "jsCode": "\nconst PER_CATEGORY = { AI:5, Tech:5, Finanzen:5, Wirtschaft:5, Weltnews:5, Reddit:15 };\nconst items = $('Filter New & Cap').all().map((it, i) => {\n  const j = it.json;\n  return { id: i, category: j.category, source: j.source, publisher: j.publisher, title: j.title, snippet: j.snippet, link: j.link };\n});\nreturn [{ json: {\n  limits: PER_CATEGORY,\n  count: items.length,\n  articles: items,\n  articles_json: JSON.stringify(items),\n} }];\n"
      },
      "id": "a790da2b-651e-4821-93e9-1ca22fd2c548",
      "name": "Build LLM Input",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        3088,
        96
      ],
      "executeOnce": true,
      "alwaysOutputData": true
    },
    {
      "parameters": {
        "promptType": "define",
        "text": "={{ $json.articles_json }}",
        "messages": {
          "messageValues": [
            {
              "message": "Du bist ein Nachrichten-Kurator. Du erhältst eine JSON-Liste von Artikeln (jeder mit id, category, source, title, snippet, link). Wähle pro Kategorie die wichtigsten und interessantesten Artikel aus und sortiere sie nach Relevanz (wichtigster zuerst). Maximale Anzahl pro Kategorie: AI=5, Tech=5, Finanzen=5, Wirtschaft=5, Weltnews=5, Reddit=15. Entferne dabei inhaltliche Duplikate (gleiche Story aus verschiedenen Quellen) und behalte jeweils nur die beste Variante. Verwende ausschließlich die gegebenen Artikel und ändere link/title nicht. Antworte NUR mit JSON in exakt diesem Format: {\"items\":[{\"id\":<number>,\"category\":\"<Kategorie>\",\"headline\":\"<kurze prägnante deutsche Schlagzeile>\",\"summary\":\"<1-2 Sätze deutsche Zusammenfassung>\",\"rank\":<1-basierter Rang innerhalb der Kategorie>}]}. Keine Erklärungen, kein Markdown, nur das JSON-Objekt."
            },
            {
              "type": "HumanMessagePromptTemplate",
              "message": "=Artikel (JSON): {{ $json.articles_json }}"
            }
          ]
        },
        "batching": {}
      },
      "id": "fa406f66-5e96-4aaf-8aca-456d858d72a6",
      "name": "Rank & Select",
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "typeVersion": 1.9,
      "position": [
        3280,
        96
      ]
    },
    {
      "parameters": {
        "jsCode": "\nconst CAT_LABEL = { AI:'🤖 AI', Tech:'💻 Tech', Finanzen:'💰 Finanzen & Anlegen', Wirtschaft:'📈 Wirtschaft', Weltnews:'🌍 Weltnews', Reddit:'👽 Reddit' };\nconst CAT_ORDER = ['AI','Tech','Finanzen','Wirtschaft','Weltnews','Reddit'];\n\nconst articles = $('Build LLM Input').first().json.articles || [];\nconst byId = {};\nfor (const a of articles) byId[a.id] = a;\n\nlet raw = $json.text || $json.output || $json.response || '';\nif (typeof raw !== 'string') raw = JSON.stringify(raw);\nlet parsed = { items: [] };\ntry {\n  const s = raw.indexOf('{'); const e = raw.lastIndexOf('}');\n  parsed = JSON.parse(s>=0 ? raw.slice(s, e+1) : raw);\n} catch (e) { parsed = { items: [] }; }\n\nconst picks = Array.isArray(parsed.items) ? parsed.items : [];\nconst grouped = {};\nconst persist = [];\nconst today = new Date().toISOString().slice(0,10);\nfor (const p of picks) {\n  const base = byId[p.id];\n  if (!base) continue;\n  const cat = p.category || base.category;\n  (grouped[cat] = grouped[cat] || []).push({\n    headline: p.headline || base.title,\n    summary: p.summary || '',\n    link: base.link,\n    publisher: base.publisher || base.source,\n    rank: p.rank || 999,\n  });\n  persist.push({ article_link: base.link, title_norm: (base.title||'').toLowerCase().replace(/[^a-z0-9 ]/g,'').replace(/\\s+/g,' ').trim(), category: cat, sent_date: today });\n}\nfor (const k of Object.keys(grouped)) grouped[k].sort((a,b)=> a.rank-b.rank);\n\nconst dateLabel = new Date().toLocaleDateString('de-CH', { weekday:'long', year:'numeric', month:'long', day:'numeric' });\n\nlet html = '<div style=\"font-family:-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif;max-width:680px;margin:0 auto;color:#1a1a1a;\">';\nhtml += '<p style=\"color:#666;margin:0 0 24px;font-size:14px;\">'+dateLabel+'</p>';\n\nlet total = 0;\nfor (const cat of CAT_ORDER) {\n  const list = grouped[cat];\n  if (!list || !list.length) continue;\n  html += '<h2 style=\"font-size:18px;border-bottom:2px solid #eee;padding-bottom:6px;margin:28px 0 12px;\">'+(CAT_LABEL[cat]||cat)+'</h2>';\n  for (const a of list) {\n    total++;\n    html += '<div style=\"margin:0 0 16px;\">';\n    html += '<a href=\"'+a.link+'\" style=\"font-size:16px;font-weight:600;color:#0b5cad;text-decoration:none;\">'+a.headline+'</a>';\n    if (a.summary) html += '<p style=\"margin:4px 0 2px;font-size:14px;color:#333;line-height:1.45;\">'+a.summary+'</p>';\n    html += '<p style=\"margin:0;font-size:12px;color:#999;\">'+a.publisher+' · <a href=\"'+a.link+'\" style=\"color:#999;\">Artikel öffnen</a></p>';\n    html += '</div>';\n  }\n}\nif (total === 0) html += '<p>Heute keine neuen Artikel gefunden.</p>';\nhtml += '<hr style=\"border:none;border-top:1px solid #eee;margin:24px 0;\"><p style=\"font-size:11px;color:#aaa;\">Automatisch generiert · keine Wiederholung bereits gesendeter Artikel.</p></div>';\n\nreturn [{ json: { subject: '📰 News-Digest · '+dateLabel+' ('+total+' Artikel)', html, total, persist } }];\n"
      },
      "id": "35e704d2-0014-4669-b50d-06c5d4e7f131",
      "name": "Assemble Email",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        3664,
        96
      ],
      "executeOnce": true,
      "alwaysOutputData": true
    },
    {
      "parameters": {
        "subject": "={{ $json.subject }}",
        "bodyContent": "={{ $json.html }}",
        "additionalFields": {
          "bodyContentType": "html"
        }
      },
      "id": "17715b7c-8180-4e86-a436-fa8ab9fb3c35",
      "name": "Send Digest Email",
      "type": "n8n-nodes-base.microsoftOutlook",
      "typeVersion": 2,
      "position": [
        3888,
        96
      ],
      "webhookId": "0d3d7f0d-2d7d-4166-818b-dacc89add245",
      "credentials": {
        "microsoftOutlookOAuth2Api": {
          "id": "LDhP9oyPM6OwBrgq",
          "name": "Microsoft Outlook DIGITAL.io GmbH"
        }
      }
    },
    {
      "parameters": {
        "jsCode": "\nconst rows = ($('Assemble Email').first().json.persist) || [];\nreturn rows.map(r => ({ json: r }));\n"
      },
      "id": "f692daab-d20b-4f3f-ba5e-99e93e32dca1",
      "name": "Explode To Store",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        4112,
        96
      ]
    },
    {
      "parameters": {
        "dataTableId": {
          "__rl": true,
          "value": "P7tTI8S3iuDlgBpx",
          "mode": "list",
          "cachedResultName": "NEWS",
          "cachedResultUrl": "/projects/6Srcl5jmPgT9620y/datatables/P7tTI8S3iuDlgBpx"
        },
        "columns": {
          "mappingMode": "defineBelow",
          "value": {
            "article_link": "={{ $json.article_link }}",
            "title_norm": "={{ $json.title_norm }}",
            "category": "={{ $json.category }}",
            "sent_date": "={{ $json.sent_date }}"
          },
          "schema": [
            {
              "id": "article_link",
              "displayName": "article_link",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "title_norm",
              "displayName": "title_norm",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "category",
              "displayName": "category",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "sent_date",
              "displayName": "sent_date",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            }
          ]
        },
        "options": {}
      },
      "id": "f9c66536-9f0e-427e-b60a-da12d991a96b",
      "name": "Store Sent Articles",
      "type": "n8n-nodes-base.dataTable",
      "typeVersion": 1.1,
      "position": [
        4336,
        96
      ]
    },
    {
      "parameters": {
        "modelName": "models/gemini-3.5-flash",
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "typeVersion": 1.1,
      "position": [
        3280,
        288
      ],
      "id": "6560379e-7d47-4b05-9952-75a2fffbf02e",
      "name": "Google Gemini Chat Model",
      "credentials": {
        "googlePalmApi": {
          "id": "KdaKzBB6h9NqazD9",
          "name": "Google Gemini(PaLM) Api account"
        }
      }
    },
    {
      "parameters": {
        "url": "https://techcrunch.com/category/artificial-intelligence/feed/",
        "options": {}
      },
      "id": "8b403869-a3c1-47cf-a47e-0b8e58d32b19",
      "name": "techcrunch",
      "type": "n8n-nodes-base.rssFeedRead",
      "typeVersion": 1.2,
      "position": [
        0,
        0
      ],
      "executeOnce": true,
      "retryOnFail": true,
      "alwaysOutputData": true,
      "onError": "continueRegularOutput"
    },
    {
      "parameters": {
        "url": "https://venturebeat.com/category/ai/feed/",
        "options": {}
      },
      "id": "35402d99-c41c-48d5-a1e5-ba6a5e7c7a59",
      "name": "venturebeat",
      "type": "n8n-nodes-base.rssFeedRead",
      "typeVersion": 1.2,
      "position": [
        224,
        0
      ],
      "executeOnce": true,
      "retryOnFail": true,
      "alwaysOutputData": true,
      "onError": "continueRegularOutput"
    },
    {
      "parameters": {
        "url": "http://feeds.arstechnica.com/arstechnica/index",
        "options": {}
      },
      "type": "n8n-nodes-base.rssFeedRead",
      "typeVersion": 1.2,
      "position": [
        448,
        0
      ],
      "id": "1af61a8e-e22c-43ea-8569-007b266f8f39",
      "name": "arstechnica"
    },
    {
      "parameters": {
        "url": "https://www.cnbc.com/id/10000664/device/rss/rss.html",
        "options": {}
      },
      "id": "c03f8a10-375e-48cf-b5ad-c914565ed477",
      "name": "cnbcFinance",
      "type": "n8n-nodes-base.rssFeedRead",
      "typeVersion": 1.2,
      "position": [
        1056,
        0
      ],
      "executeOnce": true,
      "retryOnFail": true,
      "alwaysOutputData": true,
      "onError": "continueRegularOutput"
    },
    {
      "parameters": {
        "url": "https://feeds.bbci.co.uk/news/world/rss.xml",
        "options": {}
      },
      "id": "0a74bcea-25a4-473e-a493-e372dfc028d6",
      "name": "bbcWorld",
      "type": "n8n-nodes-base.rssFeedRead",
      "typeVersion": 1.2,
      "position": [
        1888,
        0
      ],
      "executeOnce": true,
      "retryOnFail": true,
      "alwaysOutputData": true,
      "onError": "continueRegularOutput"
    },
    {
      "parameters": {
        "url": "https://www.tagesschau.de/xml/rss2/",
        "options": {}
      },
      "type": "n8n-nodes-base.rssFeedRead",
      "typeVersion": 1.2,
      "position": [
        1712,
        0
      ],
      "id": "2c830fa8-bef4-4088-be0c-e1316a077575",
      "name": "tagesschau",
      "alwaysOutputData": true,
      "executeOnce": true,
      "retryOnFail": true,
      "onError": "continueRegularOutput"
    },
    {
      "parameters": {
        "url": "https://www.theguardian.com/uk/business/rss",
        "options": {}
      },
      "id": "4e05b6f5-2d35-426e-8750-a9813baa549f",
      "name": "theguardian",
      "type": "n8n-nodes-base.rssFeedRead",
      "typeVersion": 1.2,
      "position": [
        1280,
        0
      ],
      "executeOnce": true,
      "retryOnFail": true,
      "alwaysOutputData": true,
      "onError": "continueRegularOutput"
    },
    {
      "parameters": {
        "url": "http://feeds.bbci.co.uk/news/business/rss.xml",
        "options": {}
      },
      "id": "4f241f82-db24-4547-850d-5e656a224e84",
      "name": "bbcBusiness",
      "type": "n8n-nodes-base.rssFeedRead",
      "typeVersion": 1.2,
      "position": [
        1440,
        0
      ],
      "executeOnce": true,
      "retryOnFail": true,
      "alwaysOutputData": true,
      "onError": "continueRegularOutput"
    },
    {
      "parameters": {
        "url": "https://www.investing.com/rss/news.rss",
        "options": {}
      },
      "type": "n8n-nodes-base.rssFeedRead",
      "typeVersion": 1.2,
      "position": [
        864,
        0
      ],
      "id": "0b74290b-653e-4b72-916d-56e27b6a2851",
      "name": "investingcom",
      "alwaysOutputData": true,
      "executeOnce": true,
      "retryOnFail": true,
      "onError": "continueRegularOutput"
    },
    {
      "parameters": {
        "url": "https://www.reddit.com/r/artificialintelligence+investing+technology+programming+vibecoding/.rss",
        "options": {}
      },
      "type": "n8n-nodes-base.rssFeedRead",
      "typeVersion": 1.2,
      "position": [
        32,
        480
      ],
      "id": "44530361-f35e-4568-92dc-9f85a5caeb6e",
      "name": "./subreddits",
      "alwaysOutputData": true,
      "executeOnce": true,
      "retryOnFail": true,
      "onError": "continueRegularOutput"
    }
  ],
  "pinData": {},
  "connections": {
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "techcrunch",
            "type": "main",
            "index": 0
          },
          {
            "node": "./subreddits",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "theverge": {
      "main": [
        [
          {
            "node": "investingcom",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Collect Feeds": {
      "main": [
        [
          {
            "node": "Normalize & Tag",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Normalize & Tag": {
      "main": [
        [
          {
            "node": "Get Sent Articles",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Sent Articles": {
      "main": [
        [
          {
            "node": "Filter New & Cap",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter New & Cap": {
      "main": [
        [
          {
            "node": "Build LLM Input",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Build LLM Input": {
      "main": [
        [
          {
            "node": "Rank & Select",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Rank & Select": {
      "main": [
        [
          {
            "node": "Assemble Email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Assemble Email": {
      "main": [
        [
          {
            "node": "Send Digest Email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send Digest Email": {
      "main": [
        [
          {
            "node": "Explode To Store",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Explode To Store": {
      "main": [
        [
          {
            "node": "Store Sent Articles",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Gemini Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "Rank & Select",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "techcrunch": {
      "main": [
        [
          {
            "node": "venturebeat",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "venturebeat": {
      "main": [
        [
          {
            "node": "arstechnica",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "arstechnica": {
      "main": [
        [
          {
            "node": "theverge",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "cnbcFinance": {
      "main": [
        [
          {
            "node": "theguardian",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "bbcWorld": {
      "main": [
        [
          {
            "node": "Collect Feeds",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "tagesschau": {
      "main": [
        [
          {
            "node": "bbcWorld",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "theguardian": {
      "main": [
        [
          {
            "node": "bbcBusiness",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "bbcBusiness": {
      "main": [
        [
          {
            "node": "tagesschau",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "investingcom": {
      "main": [
        [
          {
            "node": "cnbcFinance",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "./subreddits": {
      "main": [
        [
          {
            "node": "Collect Feeds",
            "type": "main",
            "index": 1
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1",
    "binaryMode": "separate",
    "availableInMCP": false
  },
  "versionId": "291b3d12-e17e-43b0-bf64-fc4e481749c8",
  "meta": {
    "templateCredsSetupCompleted": true,
    "instanceId": "8436291f5f134fa2f9cb47c2af70cfe95ac475cb04e445ec917cfe9d45b017d5"
  },
  "nodeGroups": [
    {
      "id": "311fd6d4-a507-4fca-847d-f08af8333565",
      "name": "AI",
      "nodeIds": [
        "8b403869-a3c1-47cf-a47e-0b8e58d32b19",
        "35402d99-c41c-48d5-a1e5-ba6a5e7c7a59"
      ]
    },
    {
      "id": "a151dea0-a674-4ec8-9c21-9ae4194f87be",
      "name": "Tech",
      "nodeIds": [
        "0c287a8a-8437-4ef8-bf11-4e102f2756e1",
        "1af61a8e-e22c-43ea-8569-007b266f8f39"
      ]
    },
    {
      "id": "ada033cc-3c2e-4e0d-a808-00b132314ba7",
      "name": "Economy",
      "nodeIds": [
        "4e05b6f5-2d35-426e-8750-a9813baa549f",
        "4f241f82-db24-4547-850d-5e656a224e84"
      ]
    },
    {
      "id": "8ce0ef69-c16b-4355-8605-1c7b0656aafc",
      "name": "Finance",
      "nodeIds": [
        "c03f8a10-375e-48cf-b5ad-c914565ed477",
        "0b74290b-653e-4b72-916d-56e27b6a2851"
      ]
    },
    {
      "id": "5ee5f76e-bb31-4f31-a309-8ce306ab4394",
      "name": "Weltnews",
      "nodeIds": [
        "0a74bcea-25a4-473e-a493-e372dfc028d6",
        "2c830fa8-bef4-4088-be0c-e1316a077575"
      ]
    },
    {
      "id": "61a7c440-b618-4655-b74b-73d591b9101c",
      "name": "Reddit",
      "nodeIds": [
        "44530361-f35e-4568-92dc-9f85a5caeb6e"
      ]
    }
  ],
  "id": "DjyE1rhw2MJToJgs",
  "tags": []
}