{
  "name": "Send pre-meeting Slack briefings using Google Calendar, Notion, GitHub, and Jira",
  "nodes": [
    {
      "id": "1af00621-8093-41a5-8abd-c86ac5793f58",
      "name": "Format Calenda Event Payload",
      "type": "n8n-nodes-base.code",
      "position": [
        -32,
        -16
      ]
    },
    {
      "id": "70086689-cb3a-4267-8bfb-a503130ecc6f",
      "name": "Add 15 minute Early Time",
      "type": "n8n-nodes-base.code",
      "position": [
        1216,
        -16
      ]
    },
    {
      "id": "52bb6001-eb8a-4c06-a9ef-2e4ed470b0e5",
      "name": "Build Message for Slack",
      "type": "n8n-nodes-base.code",
      "position": [
        3696,
        -32
      ]
    },
    {
      "id": "0c8a3201-4f13-451f-aee7-8a0715a491d4",
      "name": "Capture New Google Calendar Event",
      "type": "n8n-nodes-base.googleCalendarTrigger",
      "position": [
        -256,
        -16
      ]
    },
    {
      "id": "d9d65695-2382-4d16-aa26-2cb332fb6ef6",
      "name": "Get Last Meeting Notes",
      "type": "n8n-nodes-base.notion",
      "position": [
        352,
        -16
      ]
    },
    {
      "id": "3381d343-86ae-476f-9bd0-31822b6eace3",
      "name": "Is Previous Meeting",
      "type": "n8n-nodes-base.filter",
      "position": [
        560,
        -16
      ]
    },
    {
      "id": "a4f9b4ee-6c71-4747-941c-d95944262df0",
      "name": "Wait for Time to Come",
      "type": "n8n-nodes-base.wait",
      "position": [
        1456,
        -16
      ]
    },
    {
      "id": "b92f9476-735a-4ddd-8e1d-7711dec75941",
      "name": "Get PRs from Repo",
      "type": "n8n-nodes-base.github",
      "position": [
        2272,
        -224
      ]
    },
    {
      "id": "21566834-55eb-4734-8cd9-6fad7e95e6b1",
      "name": "Get Jira Issues Related to Meeting",
      "type": "n8n-nodes-base.jira",
      "position": [
        2400,
        144
      ]
    },
    {
      "id": "42c73ce1-fc7f-4f4d-8091-b7b1f191a9f5",
      "name": "Filter PRs Related to Meeting",
      "type": "n8n-nodes-base.code",
      "position": [
        2496,
        -224
      ]
    },
    {
      "id": "2fa4b205-fdd5-4d37-ae58-9bb89c4bebda",
      "name": "Merge Jira Tickets and Github PR",
      "type": "n8n-nodes-base.merge",
      "position": [
        3024,
        -32
      ]
    },
    {
      "id": "1f8aa403-1b33-4db2-a934-30769efc0287",
      "name": "Normalize Attendees and Slack Message",
      "type": "n8n-nodes-base.set",
      "position": [
        3904,
        -32
      ]
    },
    {
      "id": "b6b1c532-e757-44d1-83e1-a467179756d9",
      "name": "Get User Slack Info from Email",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        4544,
        -32
      ]
    },
    {
      "id": "9664db2d-54d7-47e5-b7f5-1488f08ef33d",
      "name": "Check Slack User Found",
      "type": "n8n-nodes-base.if",
      "position": [
        4736,
        -32
      ]
    },
    {
      "id": "bc1d3827-66a7-43b1-bad9-3e2eb9deb6f8",
      "name": "Send Meeting Context in Slack DM",
      "type": "n8n-nodes-base.slack",
      "position": [
        5024,
        -112
      ]
    },
    {
      "id": "e464edbb-db6e-42e5-bc35-68a6150202b9",
      "name": "Normalize Calendar and Notion Payloads",
      "type": "n8n-nodes-base.set",
      "position": [
        768,
        -16
      ]
    },
    {
      "id": "c3533f40-f9ac-4699-afee-47ba53bee757",
      "name": "Extract Meeting Keywords",
      "type": "n8n-nodes-base.code",
      "position": [
        1680,
        -16
      ]
    },
    {
      "id": "5c25f9a8-5a19-40bf-b725-f6ca0756b1a9",
      "name": "Prepare PRs and Jira Ticket List",
      "type": "n8n-nodes-base.code",
      "position": [
        3248,
        -32
      ]
    },
    {
      "id": "4bf9a9f9-b2e2-4b5f-abe4-9a0be4922f14",
      "name": "Fan Out Attendees",
      "type": "n8n-nodes-base.code",
      "position": [
        4096,
        -32
      ]
    },
    {
      "id": "bf412bd2-8058-4b1a-9f6b-a00ece243aa6",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -320,
        -272
      ],
      "parameters": {
        "width": 432,
        "height": 448,
        "content": "## The Trigger\n\n- Triggers when a new Google Calendar event is created  \n- Captures essential meeting details (title, start time, attendees)  \n- Formats the event data for downstream processing"
      }
    },
    {
      "id": "5a0a23c2-bc87-487b-954f-661962bc4005",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        288,
        -272
      ],
      "parameters": {
        "width": 640,
        "height": 448,
        "content": "## Previous Meeting Context \n\n- Automatically pulls notes from the latest past meeting saved in Notion\n- Ensures only meetings that happened **before the current one** are considered \n- Cleans and org"
      }
    },
    {
      "id": "40f21dab-accf-423d-b1be-868d761832f9",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1104,
        -272
      ],
      "parameters": {
        "width": 768,
        "height": 448,
        "content": "## Meeting Preparation Timing\n\nThis step makes sure the context is prepared at the right moment by:\n\n- Setting a variable which consist reminder time **15 minutes before the meeting starts**\n- Waiting"
      }
    },
    {
      "id": "476573a9-d028-450f-94bd-db6d27ba496b",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2160,
        -544
      ],
      "parameters": {
        "width": 528,
        "height": 288,
        "content": "## Find Relevant Pull Requests\n\nThis step gathers development work related to the meeting by:\n\n- Fetching recent pull requests from the connected GitHub repository  \n- Filtering only the pull requests"
      }
    },
    {
      "id": "a169d2a5-6a32-40bc-ad5d-f09fc152bde0",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2176,
        336
      ],
      "parameters": {
        "width": 544,
        "height": 208,
        "content": "## Find Relevant Jira Tickets\n\nThis step brings in task and issue context for the meeting by:\n\n- Fetching Jira tickets related to the meeting topic  \n- Ensuring only relevant work items are included i"
      }
    },
    {
      "id": "dfc3ba31-7767-4cd4-ba40-924b12bdee53",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2944,
        -272
      ],
      "parameters": {
        "width": 480,
        "height": 416,
        "content": "## Prepare Meeting Work Items\n\nThis section builds the meeting agenda by:\n\n- Combining relevant GitHub pull requests and Jira tickets\n- Organizing them into a structured list for sharing"
      }
    },
    {
      "id": "0aff6e86-76c3-486a-a39d-6a5da2b4ae49",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3616,
        -272
      ],
      "parameters": {
        "width": 656,
        "height": 416,
        "content": "## Prepare and Send Slack Messages\n\nThis section prepares the meeting context message and delivers it to all attendees:\n\n- Builds a structured Slack message containing meeting details, topics, and pre"
      }
    },
    {
      "id": "6e4119b0-2967-4cb5-b1d2-152e7fc0d856",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        4464,
        -384
      ],
      "parameters": {
        "width": 800,
        "height": 544,
        "content": "## Send Meeting Context via Slack DM\n\nThis step ensures the meeting context is delivered directly to each attendee on Slack:\n\n- Looks up the Slack user using the attendee’s email address  \n- Verifies "
      }
    },
    {
      "id": "7dcc8e5d-4fe6-4943-8f8c-7a70abef64c9",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -992,
        -1104
      ],
      "parameters": {
        "width": 912,
        "height": 624,
        "content": "# 🧠 Pre-Meeting Context Automation\n\n## How it works\nThis workflow automatically prepares and sends relevant meeting context to attendees before a scheduled Google Calendar meeting.\nWhen a new meeting "
      }
    }
  ],
  "connections": {
    "Fan Out Attendees": {
      "main": [
        [
          {
            "node": "Get User Slack Info from Email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get PRs from Repo": {
      "main": [
        [
          {
            "node": "Filter PRs Related to Meeting",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Is Previous Meeting": {
      "main": [
        [
          {
            "node": "Normalize Calendar and Notion Payloads",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait for Time to Come": {
      "main": [
        [
          {
            "node": "Extract Meeting Keywords",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check Slack User Found": {
      "main": [
        [
          {
            "node": "Send Meeting Context in Slack DM",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Last Meeting Notes": {
      "main": [
        [
          {
            "node": "Is Previous Meeting",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Build Message for Slack": {
      "main": [
        [
          {
            "node": "Normalize Attendees and Slack Message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Add 15 minute Early Time": {
      "main": [
        [
          {
            "node": "Wait for Time to Come",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract Meeting Keywords": {
      "main": [
        [
          {
            "node": "Get Jira Issues Related to Meeting",
            "type": "main",
            "index": 0
          },
          {
            "node": "Get PRs from Repo",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Format Calenda Event Payload": {
      "main": [
        [
          {
            "node": "Get Last Meeting Notes",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter PRs Related to Meeting": {
      "main": [
        [
          {
            "node": "Merge Jira Tickets and Github PR",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get User Slack Info from Email": {
      "main": [
        [
          {
            "node": "Check Slack User Found",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Merge Jira Tickets and Github PR": {
      "main": [
        [
          {
            "node": "Prepare PRs and Jira Ticket List",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare PRs and Jira Ticket List": {
      "main": [
        [
          {
            "node": "Build Message for Slack",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Capture New Google Calendar Event": {
      "main": [
        [
          {
            "node": "Format Calenda Event Payload",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Jira Issues Related to Meeting": {
      "main": [
        [
          {
            "node": "Merge Jira Tickets and Github PR",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Normalize Attendees and Slack Message": {
      "main": [
        [
          {
            "node": "Fan Out Attendees",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Normalize Calendar and Notion Payloads": {
      "main": [
        [
          {
            "node": "Add 15 minute Early Time",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}