AutomationFlowsGeneral › jump-section: Planning Pipeline

jump-section: Planning Pipeline

jump-section: Planning Pipeline. Uses scheduleTrigger, httpRequest. Scheduled trigger; 9 nodes.

Cron / scheduled trigger★★★★☆ complexity9 nodesHttp Request
General Trigger: Cron / scheduled Nodes: 9 Complexity: ★★★★☆

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "name": "jump-section: Planning Pipeline",
  "nodes": [
    {
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "weeks",
              "weeksInterval": 1,
              "triggerAtDay": [
                1
              ],
              "triggerAtHour": 9,
              "triggerAtMinute": 0
            }
          ]
        }
      },
      "id": "schedule-trigger",
      "name": "Schedule (\ub9e4\uc8fc \uc6d4\uc694\uc77c 09:00)",
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1.1,
      "position": [
        240,
        300
      ]
    },
    {
      "parameters": {
        "method": "GET",
        "url": "https://api.github.com/repos/bae080311/jump-section/issues",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Accept",
              "value": "application/vnd.github+json"
            },
            {
              "name": "X-GitHub-Api-Version",
              "value": "2022-11-28"
            },
            {
              "name": "Authorization",
              "value": "=Bearer {{ $env.GITHUB_TOKEN }}"
            }
          ]
        },
        "sendQuery": true,
        "queryParameters": {
          "parameters": [
            {
              "name": "state",
              "value": "open"
            },
            {
              "name": "per_page",
              "value": "20"
            }
          ]
        },
        "options": {}
      },
      "id": "get-open-issues",
      "name": "GitHub: Open Issues \uc870\ud68c",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        460,
        300
      ]
    },
    {
      "parameters": {
        "method": "GET",
        "url": "https://api.github.com/repos/bae080311/jump-section/commits",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Accept",
              "value": "application/vnd.github+json"
            },
            {
              "name": "X-GitHub-Api-Version",
              "value": "2022-11-28"
            },
            {
              "name": "Authorization",
              "value": "=Bearer {{ $env.GITHUB_TOKEN }}"
            }
          ]
        },
        "sendQuery": true,
        "queryParameters": {
          "parameters": [
            {
              "name": "since",
              "value": "={{ new Date(Date.now() - 7 * 24 * 60 * 60 * 1000).toISOString() }}"
            },
            {
              "name": "per_page",
              "value": "20"
            }
          ]
        },
        "options": {}
      },
      "id": "get-recent-commits",
      "name": "GitHub: \ucd5c\uadfc \ucee4\ubc0b \uc870\ud68c",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        680,
        300
      ]
    },
    {
      "parameters": {
        "jsCode": "const issues = $('GitHub: Open Issues \uc870\ud68c').all().map(i => i.json);\nconst commits = $('GitHub: \ucd5c\uadfc \ucee4\ubc0b \uc870\ud68c').all().map(c => c.json);\n\nconst issuesSummary = issues\n  .slice(0, 10)\n  .map(i => `#${i.number}: ${i.title} [${(i.labels || []).map(l => l.name).join(', ')}]`)\n  .join('\\n') || '\uc5c6\uc74c';\n\nconst commitsSummary = commits\n  .slice(0, 10)\n  .map(c => `- ${c.commit.message.split('\\n')[0]}`)\n  .join('\\n') || '\uc5c6\uc74c';\n\nconst userPrompt = `## \ud504\ub85c\uc81d\ud2b8: jump-section\\n- \uc124\uba85: IntersectionObserver \uae30\ubc18 \uc139\uc158 \uc2a4\ud06c\ub864 \uad00\ub9ac \ub77c\uc774\ube0c\ub7ec\ub9ac\\n- \ud328\ud0a4\uc9c0: @jump-section/core, /react, /vue, /svelte\\n\\n## \ud604\uc7ac Open Issues\\n${issuesSummary}\\n\\n## \uc9c0\ub09c 7\uc77c \ucee4\ubc0b\\n${commitsSummary}\\n\\n\ub2e4\uc74c JSON \ubc30\uc5f4 \ud615\uc2dd\uc73c\ub85c\ub9cc \uac1c\uc120 \uc544\uc774\ub514\uc5b4 5\uac1c\ub97c \uc81c\uc548\ud558\uc138\uc694:\\n[\\n  {\\n    \"title\": \"\uc774\uc288 \uc81c\ubaa9 (\uc601\uc5b4, 50\uc790 \uc774\ub0b4)\",\\n    \"body\": \"## Summary\\\\n\\\\n\uc124\uba85\\\\n\\\\n## Proposed Solution\\\\n\\\\n\uad6c\ud604 \ubc29\ud5a5\\\\n\\\\n## Acceptance Criteria\\\\n\\\\n- [ ] \uc870\uac74\",\\n    \"labels\": [\"enhancement\", \"ai-proposal\", \"gemini\"]\\n  }\\n]`;\n\nconst geminiPayload = {\n  system_instruction: {\n    parts: [{ text: '\ub2f9\uc2e0\uc740 \uc624\ud508\uc18c\uc2a4 JavaScript \ub77c\uc774\ube0c\ub7ec\ub9ac\uc758 \uae30\uc220 \uae30\ud68d\uc790\uc785\ub2c8\ub2e4. \ubc18\ub4dc\uc2dc JSON \ubc30\uc5f4\ub9cc \uc751\ub2f5\ud558\uc138\uc694. \ub9c8\ud06c\ub2e4\uc6b4 \ucf54\ub4dc\ube14\ub85d \uc5c6\uc774 \uc21c\uc218 JSON\ub9cc \ucd9c\ub825\ud558\uc138\uc694.' }]\n  },\n  contents: [{ role: 'user', parts: [{ text: userPrompt }] }],\n  generationConfig: { maxOutputTokens: 4096, responseMimeType: 'application/json' }\n};\n\nreturn [{ json: { geminiPayload } }];"
      },
      "id": "prepare-context",
      "name": "\ucee8\ud14d\uc2a4\ud2b8 \uc900\ube44",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        900,
        300
      ]
    },
    {
      "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,
        "specifyBody": "json",
        "jsonBody": "={{ $json.geminiPayload }}",
        "options": {}
      },
      "id": "gemini-planning",
      "name": "Gemini: \uae30\ud68d \uc544\uc774\ub514\uc5b4",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        1120,
        300
      ]
    },
    {
      "parameters": {
        "jsCode": "const geminiResponse = $('Gemini: \uae30\ud68d \uc544\uc774\ub514\uc5b4').first().json;\nconst geminiText = geminiResponse.candidates[0].content.parts[0].text.trim();\n\nfunction parseIdeas(text) {\n  try {\n    return JSON.parse(text);\n  } catch (e) {\n    const match = text.match(/\\[([\\s\\S]*?)\\]/);\n    if (!match) return [];\n    try { return JSON.parse('[' + match[1] + ']'); } catch(e2) { return []; }\n  }\n}\n\nconst ideas = parseIdeas(geminiText);\nif (ideas.length === 0) throw new Error('Gemini \uc544\uc774\ub514\uc5b4 \ud30c\uc2f1 \uc2e4\ud328. \uc751\ub2f5: ' + geminiText.slice(0, 300));\n\nreturn ideas.map(idea => ({ json: { ...idea, _source: 'Gemini' } }));"
      },
      "id": "parse-ideas",
      "name": "\uc544\uc774\ub514\uc5b4 \ud30c\uc2f1",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        1340,
        300
      ]
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://api.github.com/repos/bae080311/jump-section/issues",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Accept",
              "value": "application/vnd.github+json"
            },
            {
              "name": "X-GitHub-Api-Version",
              "value": "2022-11-28"
            },
            {
              "name": "Content-Type",
              "value": "application/json"
            },
            {
              "name": "Authorization",
              "value": "=Bearer {{ $env.GITHUB_TOKEN }}"
            }
          ]
        },
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={{ { title: $json.title, body: $json.body + '\\n\\n---\\n*\ud83e\udd16 ' + $json._source + ' AI\uac00 \uc790\ub3d9 \uc0dd\uc131\ud55c \uae30\ud68d \uc774\uc288\uc785\ub2c8\ub2e4. \uad6c\ud604\ud558\ub824\uba74 `ai-implement` \ub77c\ubca8\uc744 \ucd94\uac00\ud558\uc138\uc694.*', labels: $json.labels } }}",
        "options": {}
      },
      "id": "create-issue",
      "name": "GitHub: Issue \uc0dd\uc131",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        1560,
        300
      ]
    },
    {
      "parameters": {
        "jsCode": "const allItems = $('GitHub: Issue \uc0dd\uc131').all();\nconst issues = allItems.map(item => ({\n  number: item.json.number,\n  title: item.json.title,\n  url: item.json.html_url\n}));\n\nconst lines = issues.map(i => `\u2022 [#${i.number}](${i.url}) ${i.title}`).join('\\n');\n\nreturn [{ json: { issueCount: issues.length, issueLines: lines } }];"
      },
      "id": "aggregate-issues",
      "name": "\uc774\uc288 \uc9d1\uacc4",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        1780,
        300
      ]
    },
    {
      "parameters": {
        "method": "POST",
        "url": "={{ $env.DISCORD_WEBHOOK_URL }}",
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={{ { embeds: [{ title: '\ud83d\uddd3\ufe0f \uc8fc\uac04 \uae30\ud68d \uc644\ub8cc', description: 'Gemini AI\uac00 \uc774\ubc88 \uc8fc **' + $json.issueCount + '\uac1c**\uc758 \uac1c\uc120 \uc774\uc288\ub97c \uc0dd\uc131\ud588\uc2b5\ub2c8\ub2e4.', color: 5814783, fields: [{ name: '\uc0dd\uc131\ub41c \uc774\uc288', value: $json.issueLines, inline: false }], footer: { text: 'jump-section AI Pipeline \u2022 Gemini' }, timestamp: new Date().toISOString() }] } }}",
        "options": {}
      },
      "id": "discord-planning",
      "name": "Discord: \uae30\ud68d \uc644\ub8cc \uc54c\ub9bc",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        2000,
        300
      ]
    }
  ],
  "connections": {
    "Schedule (\ub9e4\uc8fc \uc6d4\uc694\uc77c 09:00)": {
      "main": [
        [
          {
            "node": "GitHub: Open Issues \uc870\ud68c",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "GitHub: Open Issues \uc870\ud68c": {
      "main": [
        [
          {
            "node": "GitHub: \ucd5c\uadfc \ucee4\ubc0b \uc870\ud68c",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "GitHub: \ucd5c\uadfc \ucee4\ubc0b \uc870\ud68c": {
      "main": [
        [
          {
            "node": "\ucee8\ud14d\uc2a4\ud2b8 \uc900\ube44",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\ucee8\ud14d\uc2a4\ud2b8 \uc900\ube44": {
      "main": [
        [
          {
            "node": "Gemini: \uae30\ud68d \uc544\uc774\ub514\uc5b4",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Gemini: \uae30\ud68d \uc544\uc774\ub514\uc5b4": {
      "main": [
        [
          {
            "node": "\uc544\uc774\ub514\uc5b4 \ud30c\uc2f1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\uc544\uc774\ub514\uc5b4 \ud30c\uc2f1": {
      "main": [
        [
          {
            "node": "GitHub: Issue \uc0dd\uc131",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "GitHub: Issue \uc0dd\uc131": {
      "main": [
        [
          {
            "node": "\uc774\uc288 \uc9d1\uacc4",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\uc774\uc288 \uc9d1\uacc4": {
      "main": [
        [
          {
            "node": "Discord: \uae30\ud68d \uc644\ub8cc \uc54c\ub9bc",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "tags": [
    {
      "name": "jump-section"
    },
    {
      "name": "planning"
    }
  ]
}

About this workflow

jump-section: Planning Pipeline. Uses scheduleTrigger, httpRequest. Scheduled trigger; 9 nodes.

Source: https://github.com/bae080311/jump-section/blob/c566471882fa8b8f0e4d00704693b7c92d62c519/.n8n/workflows/planning-pipeline.json — original creator credit. Request a take-down →

More General workflows → · Browse all categories →