{
  "name": "30_360_DEEP_INSIGHTS",
  "nodes": [
    {
      "parameters": {
        "rule": {
          "interval": [
            {
              "triggerAtHour": 11,
              "triggerAtMinute": 0
            }
          ]
        },
        "cronExpression": "0 11 * * 3"
      },
      "id": "schedule-trigger",
      "name": "Mittwoch 11:00",
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1.2,
      "position": [
        240,
        300
      ]
    },
    {
      "parameters": {},
      "id": "manual-trigger",
      "name": "Manuell starten",
      "type": "n8n-nodes-base.manualTrigger",
      "typeVersion": 1,
      "position": [
        240,
        480
      ]
    },
    {
      "parameters": {
        "method": "GET",
        "url": "https://directus.automation-plus-ki.de/items/320_content_opportunities?limit=1&sort=-created_at&filter[recommendation][_eq]=Produce Now",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "Bearer ={{ $env.DIRECTUS_TOKEN }}"
            }
          ]
        }
      },
      "id": "fetch-top-opportunity",
      "name": "Beste Opportunity laden",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        460,
        380
      ]
    },
    {
      "parameters": {
        "jsCode": "const res = $input.first().json;\nconst items = res.data ?? [];\n\n// Fallback: neueste Opportunity nehmen wenn kein 'Produce Now' vorhanden\nif (!items.length) {\n  return [{ json: {\n    opp_id: null,\n    topic: 'KI-Agenten in der Praxis 2026',\n    category: 'KI-Tools',\n    context: 'Allgemeiner \u00dcberblick \u00fcber KI-Agenten'\n  } }];\n}\n\nconst opp = items[0];\nreturn [{ json: {\n  opp_id:   opp.Id,\n  topic:    opp.topic ?? opp.title ?? opp.keyword ?? '',\n  category: opp.category ?? 'KI-Tools',\n  context:  opp.summary ?? opp.description ?? opp.niche_analysis ?? ''\n} }];"
      },
      "id": "extract-topic",
      "name": "Topic extrahieren",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        680,
        380
      ]
    },
    {
      "parameters": {
        "jsCode": "const { topic, category, context } = $input.first().json;\n\nconst prompt = `Du bist ein Senior Research Analyst mit Expertise in KI-Technologie und dem deutschsprachigen Markt.\n\nF\u00fchre eine tiefe Recherche durch f\u00fcr das Thema: \"${topic}\"\nKategorie: ${category}\n${context ? `Hintergrund: ${context}\\n` : ''}\n## DEINE AUFGABEN\n\n1. FAKTEN & ENTWICKLUNGEN\n   - Aktueller Stand der Technologie/des Themas (2024-2026)\n   - Wichtige Zahlen, Statistiken, Benchmarks\n   - Wer sind die wichtigsten Player?\n\n2. CHANCEN & RISIKEN\n   - Top 3 Chancen\n   - Top 3 Risiken/Kritikpunkte\n\n3. COMMUNITY-PERSPEKTIVE\n   - Was denkt die deutschsprachige KI-Community dar\u00fcber?\n   - H\u00e4ufige Missverst\u00e4ndnisse oder Fehlannahmen\n\n4. SCHLUSSFOLGERUNGEN\n   - Was bedeutet das f\u00fcr Content Creator und KI-Nutzer?\n   - Klare These/Standpunkt (sei direkt!)\n\n5. FORECAST\n   - Wie entwickelt sich das Thema in den n\u00e4chsten 6-12 Monaten?\n   - Was wird der n\u00e4chste gro\u00dfe Schritt sein?\n\nLiefere NUR valides JSON:\n{\n  \"executive_summary\": \"3-4 S\u00e4tze Kernaussage\",\n  \"key_facts\": [\"Fakt 1\", \"Fakt 2\", \"Fakt 3\", \"Fakt 4\"],\n  \"key_statistic\": \"Die eine wichtigste Zahl/Statistik\",\n  \"opportunities\": [\"Chance 1\", \"Chance 2\", \"Chance 3\"],\n  \"risks\": [\"Risiko 1\", \"Risiko 2\"],\n  \"common_misconceptions\": [\"Missverst\u00e4ndnis 1\", \"Missverst\u00e4ndnis 2\"],\n  \"main_thesis\": \"Die zentrale These in einem klaren Satz\",\n  \"surprising_insight\": \"Das \u00fcberraschendste Finding\",\n  \"forecast_6_months\": \"Was in 6 Monaten passieren wird\",\n  \"forecast_12_months\": \"Was in 12 Monaten passieren wird\",\n  \"content_angle\": \"Der beste Blickwinkel f\u00fcr einen Artikel\",\n  \"hook_ideas\": [\"M\u00f6glicher Einstieg 1\", \"M\u00f6glicher Einstieg 2\"],\n  \"must_include\": [\"Punkt1 der unbedingt erw\u00e4hnt werden muss\", \"Punkt2\"],\n  \"seo_keywords\": \"keyword1, keyword2, keyword3, keyword4, keyword5\"\n}`;\n\nreturn [{ json: { prompt, topic, category, opp_id: $input.first().json.opp_id } }];"
      },
      "id": "build-research-prompt",
      "name": "Research-Prompt bauen",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        900,
        380
      ]
    },
    {
      "parameters": {
        "method": "POST",
        "url": "=https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent?key={{ $env.GEMINI_API_KEY }}",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        },
        "sendBody": true,
        "contentType": "json",
        "body": "={ \"contents\": [{ \"role\": \"user\", \"parts\": [{ \"text\": \"{{ $json.prompt }}\" }] }], \"generationConfig\": { \"temperature\": 0.5, \"maxOutputTokens\": 4096 } }"
      },
      "id": "gemini-deep",
      "name": "Gemini: Tiefenrecherche",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        1120,
        380
      ]
    },
    {
      "parameters": {
        "jsCode": "const gemRes  = $input.first().json;\nconst rawText = gemRes.candidates?.[0]?.content?.parts?.[0]?.text ?? '{}';\nconst topic   = $('Research-Prompt bauen').item.json.topic;\nconst category = $('Research-Prompt bauen').item.json.category;\nconst oppId   = $('Research-Prompt bauen').item.json.opp_id;\n\nlet brief = {};\ntry {\n  const match = rawText.match(/\\{[\\s\\S]*\\}/);\n  if (match) brief = JSON.parse(match[0]);\n} catch(_) {\n  brief = { executive_summary: rawText.substring(0, 500) };\n}\n\nconst pieceId = `research-${Date.now()}`;\n\nreturn [{ json: {\n  piece_id:        pieceId,\n  opp_id:          oppId,\n  topic,\n  category,\n  title:           `Research Brief: ${topic}`,\n  excerpt:         brief.executive_summary ?? '',\n  content_text:    JSON.stringify(brief, null, 2),\n  seo_keywords:    brief.seo_keywords ?? '',\n  main_thesis:     brief.main_thesis ?? '',\n  forecast:        `6M: ${brief.forecast_6_months ?? ''} | 12M: ${brief.forecast_12_months ?? ''}`\n} }];"
      },
      "id": "parse-brief",
      "name": "Brief parsen",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        1340,
        380
      ]
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://directus.automation-plus-ki.de/items/330_knowledge_items",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "Bearer ={{ $env.DIRECTUS_TOKEN }}"
            }
          ]
        },
        "sendBody": true,
        "contentType": "json",
        "body": "={ \"piece_id\": \"{{ $json.piece_id }}\", \"title\": \"{{ $json.title }}\", \"topic\": \"{{ $json.topic }}\", \"category\": \"{{ $json.category }}\", \"status\": \"research\", \"excerpt\": \"{{ $json.excerpt }}\", \"content_text\": \"{{ $json.content_text }}\", \"seo_keywords\": \"{{ $json.seo_keywords }}\" }"
      },
      "id": "create-research-piece",
      "name": "Research Piece anlegen",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        1560,
        380
      ]
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://directus.automation-plus-ki.de/items/audit_log",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "Bearer ={{ $env.DIRECTUS_TOKEN }}"
            }
          ]
        },
        "sendBody": true,
        "contentType": "json",
        "body": "={ \"ts\": \"{{ new Date().toISOString() }}\", \"actor\": \"30_360_DEEP_INSIGHTS\", \"action\": \"research.brief_created\", \"resource_type\": \"content_pieces\", \"resource_id\": \"{{ $('Brief parsen').item.json.piece_id }}\", \"result\": \"ok\" }"
      },
      "id": "audit-log",
      "name": "Audit Log",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        1780,
        380
      ]
    }
  ],
  "connections": {
    "Mittwoch 11:00": {
      "main": [
        [
          {
            "node": "Beste Opportunity laden",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Manuell starten": {
      "main": [
        [
          {
            "node": "Beste Opportunity laden",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Beste Opportunity laden": {
      "main": [
        [
          {
            "node": "Topic extrahieren",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Topic extrahieren": {
      "main": [
        [
          {
            "node": "Research-Prompt bauen",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Research-Prompt bauen": {
      "main": [
        [
          {
            "node": "Gemini: Tiefenrecherche",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Gemini: Tiefenrecherche": {
      "main": [
        [
          {
            "node": "Brief parsen",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Brief parsen": {
      "main": [
        [
          {
            "node": "Research Piece anlegen",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Research Piece anlegen": {
      "main": [
        [
          {
            "node": "Audit Log",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "tags": [
    "research",
    "insights",
    "forecast",
    "briefing"
  ]
}