{
  "name": "Hackathon CP1 - Sheets Only",
  "nodes": [
    {
      "parameters": {},
      "id": "9bb930d0-500e-4708-b7ed-24ce44f535a8",
      "name": "When Tested",
      "type": "n8n-nodes-base.manualTrigger",
      "typeVersion": 1,
      "position": [
        0,
        80
      ]
    },
    {
      "parameters": {
        "documentId": {
          "__rl": true,
          "value": "1onDtz4TeM0SmJD7-QCV_QzCJXyQptbt4YnAAbwJaew4",
          "mode": "list",
          "cachedResultName": "Sample Data for Pre-Hackathon n8n session MAY 2026",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1onDtz4TeM0SmJD7-QCV_QzCJXyQptbt4YnAAbwJaew4/edit?usp=drivesdk"
        },
        "sheetName": {
          "__rl": true,
          "value": 921304816,
          "mode": "list",
          "cachedResultName": "jobs",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1onDtz4TeM0SmJD7-QCV_QzCJXyQptbt4YnAAbwJaew4/edit#gid=921304816"
        },
        "options": {}
      },
      "id": "5610b39c-505f-4dff-bc10-b2528dd7223f",
      "name": "Read Jobs from Sheet",
      "type": "n8n-nodes-base.googleSheets",
      "typeVersion": 4.7,
      "position": [
        224,
        80
      ],
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "VYAbWly7Itlm3Nj9",
          "name": "Google Sheets account 9"
        }
      }
    },
    {
      "parameters": {
        "maxItems": 3
      },
      "id": "7542c262-3d1c-45f0-8ce0-b843251cfa98",
      "name": "Limit to First 3 (Demo Cap)",
      "type": "n8n-nodes-base.limit",
      "typeVersion": 1,
      "position": [
        448,
        80
      ]
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "a1",
              "name": "Job Title",
              "type": "string",
              "value": "={{ $json['Job Title'] }}"
            },
            {
              "id": "a2",
              "name": "AI Note",
              "type": "string",
              "value": "=Pending AI review for {{ $json['Job Title'] }} at {{ $json.Company }}."
            }
          ]
        },
        "options": {}
      },
      "id": "dfaeb75a-91ca-4244-b369-c853843a2869",
      "name": "Compose Placeholder Note",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        896,
        0
      ]
    },
    {
      "parameters": {
        "operation": "update",
        "documentId": {
          "__rl": true,
          "value": "1onDtz4TeM0SmJD7-QCV_QzCJXyQptbt4YnAAbwJaew4",
          "mode": "list",
          "cachedResultName": "Sample Data for Pre-Hackathon n8n session MAY 2026",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1onDtz4TeM0SmJD7-QCV_QzCJXyQptbt4YnAAbwJaew4/edit?usp=drivesdk"
        },
        "sheetName": {
          "__rl": true,
          "value": 921304816,
          "mode": "list",
          "cachedResultName": "jobs",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1onDtz4TeM0SmJD7-QCV_QzCJXyQptbt4YnAAbwJaew4/edit#gid=921304816"
        },
        "columns": {
          "mappingMode": "defineBelow",
          "value": {
            "row_number": "={{ $('Loop Over Jobs').item.json.row_number }}",
            "AI Notes": "={{ $json[\"AI Note\"] }}"
          },
          "matchingColumns": [
            "row_number"
          ],
          "schema": [
            {
              "id": "Job Title",
              "displayName": "Job Title",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": true
            },
            {
              "id": "Location",
              "displayName": "Location",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": true
            },
            {
              "id": "Company",
              "displayName": "Company",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": true
            },
            {
              "id": "Pay Range",
              "displayName": "Pay Range",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": true
            },
            {
              "id": "Job Description",
              "displayName": "Job Description",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": true
            },
            {
              "id": "AI Notes",
              "displayName": "AI Notes",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "row_number",
              "displayName": "row_number",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "number",
              "canBeUsedToMatch": true,
              "readOnly": true,
              "removed": false
            }
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {}
      },
      "id": "1b17290e-a0b3-48ef-b71d-1cef5d1a6e77",
      "name": "Write Note Back to Sheet",
      "type": "n8n-nodes-base.googleSheets",
      "typeVersion": 4.7,
      "position": [
        1120,
        80
      ],
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "VYAbWly7Itlm3Nj9",
          "name": "Google Sheets account 9"
        }
      }
    },
    {
      "parameters": {
        "options": {}
      },
      "id": "cb44e7b5-ba08-4bd8-8161-7c897428bd8b",
      "name": "Loop Over Jobs",
      "type": "n8n-nodes-base.splitInBatches",
      "typeVersion": 3,
      "position": [
        672,
        80
      ]
    },
    {
      "parameters": {
        "content": "## Checkpoint 1: Sheets Only\n\n**Goal:** read jobs from a Google Sheet, loop one row at a time, write a placeholder note back to each row.\n\n*No AI yet.* The placeholder uses an **expression** so each row gets a different note. This proves the loop is iterating and gets you used to `{{ $json.field }}` syntax before we add the LLM in checkpoint 2.",
        "height": 200,
        "width": 1320,
        "color": 5
      },
      "id": "f634013e-1060-47ef-9dcc-a86df1c9ec29",
      "name": "Sticky - Overview",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -48,
        -256
      ]
    },
    {
      "parameters": {
        "content": "**Manual Trigger**\n\nClick *Test workflow* to run.",
        "height": 140,
        "width": 220,
        "color": 3
      },
      "id": "1b850bfa-b06f-41d9-8dcf-f81b7e5c95fd",
      "name": "Sticky - Trigger",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -32,
        320
      ]
    },
    {
      "parameters": {
        "content": "**Read Jobs**\n\nReads every row from your copy of the jobs sheet. Authorize Google with OAuth2.",
        "width": 220,
        "color": 6
      },
      "id": "548d1ed0-2f0f-4fdb-aaa1-ce9b3b0936fc",
      "name": "Sticky - Read Jobs",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        208,
        320
      ]
    },
    {
      "parameters": {
        "content": "**Limit (Demo Cap)**\n\nKeeps only the first **3** rows so the demo finishes quickly.",
        "height": 140,
        "width": 220,
        "color": 4
      },
      "id": "b9283c01-d5f2-4e30-bb02-ec9a096260b2",
      "name": "Sticky - Limit",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        448,
        320
      ]
    },
    {
      "parameters": {
        "content": "**Loop Over Items**\n\nProcesses one row at a time (batch size 1).\n\nEach row -> Set -> Sheet update -> next row.",
        "height": 180,
        "width": 220,
        "color": 3
      },
      "id": "36056e3a-498a-40ce-b5d6-722ed6bd4bd3",
      "name": "Sticky - Loop",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        688,
        320
      ]
    },
    {
      "parameters": {
        "content": "**Two outputs!**\n\n- *loop* -> the per-row branch we wire today\n- *done* -> fires once after every row is processed. Empty for now.\n\nWe will wire *done* to a Slack summary in **Checkpoint 3**.",
        "height": 200,
        "width": 224
      },
      "id": "37197c7b-683e-40aa-bac8-51e7a892bff6",
      "name": "Sticky - Loop Outputs",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        688,
        512
      ]
    },
    {
      "parameters": {
        "content": "**Set (Compose Placeholder)**\n\nThe placeholder embeds the job title and company using expressions like `{{ $json['Job Title'] }}`.\n\nThis is the syntax we will use later for the LLM prompt.",
        "height": 200,
        "color": 3
      },
      "id": "5016ceb0-c12a-405c-8071-c533df53ed87",
      "name": "Sticky - Set",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        928,
        320
      ]
    },
    {
      "parameters": {
        "content": "**Write Note Back**\n\nMatches rows by **Job Title** and writes the placeholder into the **AI Note** column.\n\nMake sure the column exists in your sheet, exactly named `AI Note`.",
        "height": 200,
        "width": 220,
        "color": 6
      },
      "id": "0a48d22b-ad84-433a-b721-83547365d0a2",
      "name": "Sticky - Write Back",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        1184,
        320
      ]
    }
  ],
  "pinData": {},
  "connections": {
    "When Tested": {
      "main": [
        [
          {
            "node": "Read Jobs from Sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Read Jobs from Sheet": {
      "main": [
        [
          {
            "node": "Limit to First 3 (Demo Cap)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Limit to First 3 (Demo Cap)": {
      "main": [
        [
          {
            "node": "Loop Over Jobs",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Compose Placeholder Note": {
      "main": [
        [
          {
            "node": "Write Note Back to Sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Write Note Back to Sheet": {
      "main": [
        [
          {
            "node": "Loop Over Jobs",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Jobs": {
      "main": [
        [],
        [
          {
            "node": "Compose Placeholder Note",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1",
    "binaryMode": "separate",
    "availableInMCP": true
  },
  "versionId": "fe54ca90-f0ac-4bf9-a589-667be1e11484",
  "meta": {
    "aiBuilderAssisted": true,
    "builderVariant": "mcp",
    "instanceId": "61d1ceb8b60d551b2bd6cb318774870200f11403fbfe4e124bc9e07f08b20486"
  },
  "id": "MeaqIPMPNp5W1dBL",
  "tags": [
    {
      "updatedAt": "2026-05-03T08:51:16.018Z",
      "createdAt": "2026-05-03T08:51:16.018Z",
      "id": "FUFolilclluqXrmj",
      "name": "Indeed Hackathon"
    }
  ]
}