{
  "name": "Mini Deep Thought \u2014 Autonomous AI Content Pipeline",
  "nodes": [
    {
      "id": "ad012790-3798-430e-ac69-573c306a0c72",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -368,
        -80
      ],
      "parameters": {
        "width": 480,
        "height": 880,
        "content": "## \ud83e\udde0 Mini Deep Thought \u2014 Autonomous AI Content Pipeline\n\nRuns on a daily schedule, reads an RSS feed, takes the **top 3** articles, and pushes each through a **multi-stage AI pipeline** (insight extraction \u2192 brand-voice synthesis), gates the result, then publishes to **LinkedIn, X and Bluesky**.\n\n### Setup\n- **Schedule** \u2014 set run time / timezone in the trigger.\n- **RSS** \u2014 set the feed URL and confirm fields map in `Set Article Attributes`.\n- **OpenAI** \u2014 add your credential to **both** OpenAI HTTP nodes (set once, reuse).\n- **LinkedIn / X** \u2014 connect OAuth2 credentials.\n- **Bluesky** \u2014 in `Login to Bluesky API` set your handle + an **app password** (never your main password).\n\n### \u26a0\ufe0f Test before going live\nThe publish nodes post for real. Disable them, run once, and inspect `Format Content`. Tune the AI system prompts until the voice sounds like you \u2014 then re-enable and activate.\n\n### Customize\nArticle limit, RSS source, prompts, voice, quality rules, and target platforms are all adjustable."
      },
      "typeVersion": 1
    },
    {
      "id": "4323fbce-6989-47c6-83a7-6988fa13e39b",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        192,
        160
      ],
      "parameters": {
        "color": 7,
        "width": 848,
        "height": 320,
        "content": "## 1\ufe0f\u20e3 Collect source articles\n\nDaily schedule \u2192 read the RSS feed \u2192 keep the **top 3** items \u2192 normalize each into `title` / `content` / `link` for the AI stages.\n\n\ud83d\udc49 Change the feed URL in **Fetch RSS Feed**."
      },
      "typeVersion": 1
    },
    {
      "id": "f9a698e2-9493-468c-9591-a824deabf47c",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1072,
        144
      ],
      "parameters": {
        "color": 7,
        "width": 640,
        "height": 336,
        "content": "## 2\ufe0f\u20e3 Generate AI content\n\n**Insights** extracts the 3 most non-obvious points from each article. **Synthesis** rewrites them in your editorial voice and returns ready-to-post JSON per platform.\n\n\ud83d\udc49 Edit the system prompts to match your voice \u2014 that's the product."
      },
      "typeVersion": 1
    },
    {
      "id": "c3b6640c-10ba-47e8-af86-5e51d6ac8044",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1760,
        48
      ],
      "parameters": {
        "color": 7,
        "width": 240,
        "height": 432,
        "content": "## 3\ufe0f\u20e3 Validate & format\n\nParses the AI JSON, falls back gracefully on parse errors, and clamps each post to its platform character limit before distribution."
      },
      "typeVersion": 1
    },
    {
      "id": "8f6d36eb-8e05-4f96-a8ec-8946927355c6",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2032,
        -80
      ],
      "parameters": {
        "color": 7,
        "width": 416,
        "height": 768,
        "content": "## 4\ufe0f\u20e3 Publish across platforms\n\nFans out to **LinkedIn** and **X**, and logs in to **Bluesky** before posting.\n\n\u26a0\ufe0f These fire for real \u2014 keep them disabled until you've tested the output upstream."
      },
      "typeVersion": 1
    },
    {
      "id": "node-trigger",
      "name": "When 8 AM Every Day",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        240,
        320
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "days",
              "daysInterval": 1,
              "triggerAtHour": 8
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "node-rss",
      "name": "Fetch RSS Feed",
      "type": "n8n-nodes-base.rssFeedRead",
      "position": [
        460,
        320
      ],
      "parameters": {
        "url": "https://hnrss.org/frontpage",
        "options": {}
      },
      "typeVersion": 1.1
    },
    {
      "id": "node-limit",
      "name": "Limit to 3 Articles",
      "type": "n8n-nodes-base.limit",
      "position": [
        680,
        320
      ],
      "parameters": {
        "maxItems": 3
      },
      "typeVersion": 1
    },
    {
      "id": "node-prepare",
      "name": "Set Article Attributes",
      "type": "n8n-nodes-base.set",
      "position": [
        900,
        320
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "f1",
              "name": "title",
              "type": "string",
              "value": "={{ $json.title }}"
            },
            {
              "id": "f2",
              "name": "content",
              "type": "string",
              "value": "={{ $json.contentSnippet || $json.content || $json.description || '' }}"
            },
            {
              "id": "f3",
              "name": "link",
              "type": "string",
              "value": "={{ $json.link }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "node-extract",
      "name": "Post to OpenAI Insights",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1120,
        320
      ],
      "parameters": {
        "url": "https://api.openai.com/v1/chat/completions",
        "method": "POST",
        "options": {},
        "jsonBody": "={{ { model: 'gpt-4o-mini', temperature: 0.3, messages: [ { role: 'system', content: 'You are a sharp analyst. Extract the 3 most important, non-obvious insights from the article. No fluff, no restating the headline. Output as 3 short bullet points.' }, { role: 'user', content: 'TITLE: ' + $json.title + '\\n\\nCONTENT: ' + $json.content } ] } }}",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "predefinedCredentialType",
        "nodeCredentialType": "openAiApi"
      },
      "typeVersion": 4.2
    },
    {
      "id": "node-carry",
      "name": "Set Extracted Insights",
      "type": "n8n-nodes-base.set",
      "position": [
        1340,
        320
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "k1",
              "name": "insights",
              "type": "string",
              "value": "={{ $json.choices[0].message.content }}"
            },
            {
              "id": "k2",
              "name": "title",
              "type": "string",
              "value": "={{ $('Set Article Attributes').item.json.title }}"
            },
            {
              "id": "k3",
              "name": "link",
              "type": "string",
              "value": "={{ $('Set Article Attributes').item.json.link }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "node-synth",
      "name": "Post to OpenAI Synthesis",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1560,
        320
      ],
      "parameters": {
        "url": "https://api.openai.com/v1/chat/completions",
        "method": "POST",
        "options": {},
        "jsonBody": "={{ { model: 'gpt-4o-mini', temperature: 0.7, response_format: { type: 'json_object' }, messages: [ { role: 'system', content: 'You are the ghostwriter for a senior AI automation engineer with 25 years of experience. Voice: sharp, opinionated, practical, zero hype, no emoji spam. Turn the insights into original posts that add a clear point of view, not a summary. Return ONLY valid JSON with keys: linkedin (max 1200 chars, line breaks allowed), x (max 270 chars), bluesky (max 290 chars). Each post must stand alone and end naturally.' }, { role: 'user', content: 'TOPIC: ' + $json.title + '\\n\\nKEY INSIGHTS:\\n' + $json.insights + '\\n\\nSOURCE: ' + $json.link } ] } }}",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "predefinedCredentialType",
        "nodeCredentialType": "openAiApi"
      },
      "typeVersion": 4.2
    },
    {
      "id": "node-gate",
      "name": "Format Content",
      "type": "n8n-nodes-base.code",
      "position": [
        1808,
        320
      ],
      "parameters": {
        "mode": "runOnceForEachItem",
        "jsCode": "const raw = $json.choices[0].message.content;\nlet parsed;\ntry { parsed = JSON.parse(raw); } catch (e) { parsed = { linkedin: raw, x: raw.slice(0, 270), bluesky: raw.slice(0, 290) }; }\nconst clamp = (s, n) => (s || '').toString().trim().slice(0, n);\nreturn {\n  json: {\n    linkedin: clamp(parsed.linkedin, 1200),\n    x: clamp(parsed.x, 280),\n    bluesky: clamp(parsed.bluesky, 300),\n    source: $('Set Extracted Insights').item.json.link\n  }\n};"
      },
      "typeVersion": 2
    },
    {
      "id": "node-linkedin",
      "name": "Publish on LinkedIn",
      "type": "n8n-nodes-base.linkedIn",
      "position": [
        2080,
        128
      ],
      "parameters": {
        "text": "={{ $json.linkedin }}",
        "postAs": "person",
        "additionalFields": {},
        "shareMediaCategory": "NONE"
      },
      "typeVersion": 1
    },
    {
      "id": "node-x",
      "name": "Publish on Twitter",
      "type": "n8n-nodes-base.twitter",
      "position": [
        2080,
        320
      ],
      "parameters": {
        "text": "={{ $json.x }}",
        "resource": "tweet",
        "operation": "create",
        "additionalFields": {}
      },
      "typeVersion": 2
    },
    {
      "id": "node-bsky-login",
      "name": "Login to Bluesky API",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        2080,
        528
      ],
      "parameters": {
        "url": "https://bsky.social/xrpc/com.atproto.server.createSession",
        "method": "POST",
        "options": {},
        "jsonBody": "={{ { identifier: 'YOUR_HANDLE.bsky.social', password: 'YOUR_APP_PASSWORD' } }}",
        "sendBody": true,
        "specifyBody": "json"
      },
      "typeVersion": 4.2
    },
    {
      "id": "node-bsky-post",
      "name": "Publish on Bluesky",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        2288,
        528
      ],
      "parameters": {
        "url": "https://bsky.social/xrpc/com.atproto.repo.createRecord",
        "method": "POST",
        "options": {},
        "jsonBody": "={{ { repo: $('Login to Bluesky API').item.json.did, collection: 'app.bsky.feed.post', record: { '$type': 'app.bsky.feed.post', text: $('Format Content').item.json.bluesky, createdAt: $now.toISO() } } }}",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "=Bearer {{ $('Login to Bluesky API').item.json.accessJwt }}"
            }
          ]
        }
      },
      "typeVersion": 4.2
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "connections": {
    "Fetch RSS Feed": {
      "main": [
        [
          {
            "node": "Limit to 3 Articles",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Format Content": {
      "main": [
        [
          {
            "node": "Publish on LinkedIn",
            "type": "main",
            "index": 0
          },
          {
            "node": "Publish on Twitter",
            "type": "main",
            "index": 0
          },
          {
            "node": "Login to Bluesky API",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Limit to 3 Articles": {
      "main": [
        [
          {
            "node": "Set Article Attributes",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When 8 AM Every Day": {
      "main": [
        [
          {
            "node": "Fetch RSS Feed",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Login to Bluesky API": {
      "main": [
        [
          {
            "node": "Publish on Bluesky",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set Article Attributes": {
      "main": [
        [
          {
            "node": "Post to OpenAI Insights",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set Extracted Insights": {
      "main": [
        [
          {
            "node": "Post to OpenAI Synthesis",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Post to OpenAI Insights": {
      "main": [
        [
          {
            "node": "Set Extracted Insights",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Post to OpenAI Synthesis": {
      "main": [
        [
          {
            "node": "Format Content",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}