{
  "name": "Workshop certificate generator with Google Drive, Gmail & QR verification",
  "nodes": [
    {
      "id": "a2586676-cca1-4676-ad90-6f3243da7088",
      "name": "Webhook Registration",
      "type": "n8n-nodes-base.webhook",
      "position": [
        -1776,
        544
      ]
    },
    {
      "id": "0d746971-e056-44b2-bd10-b8823792a053",
      "name": "Validate Required Fields",
      "type": "n8n-nodes-base.if",
      "position": [
        -1568,
        544
      ]
    },
    {
      "id": "9380542c-e324-4f7d-a0e3-2e78cefe7966",
      "name": "Check Email Valid",
      "type": "n8n-nodes-base.if",
      "position": [
        -1216,
        528
      ]
    },
    {
      "id": "890bcef3-ed4e-4431-a25a-75ace96edbc4",
      "name": "Generate Certificate ID & QR",
      "type": "n8n-nodes-base.code",
      "position": [
        -928,
        352
      ]
    },
    {
      "id": "27056e8f-f086-4e98-93b1-fde7682767cc",
      "name": "Prepare Certificate HTML",
      "type": "n8n-nodes-base.set",
      "position": [
        -688,
        352
      ]
    },
    {
      "id": "7c21fec7-59c3-43fb-990c-e7a0d492262c",
      "name": "Upload to Google Drive",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        -32,
        352
      ]
    },
    {
      "id": "01a08ef3-6bf9-4c27-aa9f-061f82c0c4b8",
      "name": "Send Certificate Email",
      "type": "n8n-nodes-base.gmail",
      "position": [
        208,
        352
      ]
    },
    {
      "id": "6db9df06-df3a-4b5b-86eb-708e96f4f367",
      "name": "Log to Google Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        480,
        352
      ]
    },
    {
      "id": "2491e515-84f9-42db-be2c-bd67368bbeca",
      "name": "Notify Slack Channel",
      "type": "n8n-nodes-base.slack",
      "position": [
        656,
        352
      ]
    },
    {
      "id": "f451dfce-f51d-487e-9144-f6e86623ddfb",
      "name": "Success Response",
      "type": "n8n-nodes-base.respondToWebhook",
      "position": [
        848,
        352
      ]
    },
    {
      "id": "7d616ee2-887d-4b35-930c-5ba1204bf56a",
      "name": "Validation Error Response",
      "type": "n8n-nodes-base.respondToWebhook",
      "position": [
        -1376,
        704
      ]
    },
    {
      "id": "f31f8470-0746-4f88-aa9c-4da6a56c8dfb",
      "name": "Email Verification Error",
      "type": "n8n-nodes-base.respondToWebhook",
      "position": [
        -912,
        640
      ]
    },
    {
      "id": "d50f4202-32b0-43f1-80af-a40dbf6d012d",
      "name": "Verifi Email",
      "type": "n8n-nodes-verifiemail.verifiEmail",
      "position": [
        -1376,
        528
      ]
    },
    {
      "id": "5487d115-1006-4681-b552-534ce4ba8830",
      "name": "HTML/CSS to Image",
      "type": "n8n-nodes-htmlcsstoimage.htmlCssToImage",
      "position": [
        -512,
        352
      ]
    },
    {
      "id": "47674dfd-22ce-4b74-9a48-d7b5bd95e04c",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1824,
        -16
      ],
      "parameters": {
        "width": 528,
        "height": 400,
        "content": "## How it Works\nThis workflow automates issuing pre-registration workshop certificates. When a participant submits the registration form via webhook, their data is validated and their email is checked"
      }
    },
    {
      "id": "136c210a-18d9-4b7a-a43c-e351b4a98283",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1824,
        416
      ],
      "parameters": {
        "width": 752,
        "height": 256,
        "content": "## Validation\nWebhook receives form data.  \nNode checks if name, email, and event are present.  \nIf missing → return validation error.  \nEmail is then verified using VerifiEmail.\n"
      }
    },
    {
      "id": "3c74feda-8878-492a-a004-4d6137216a7d",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -992,
        256
      ],
      "parameters": {
        "width": 640,
        "height": 256,
        "content": "## Certificate Generation\nGenerates unique Certificate ID + QR code, inserts attendee/event details into the HTML template, and converts it into PNG using HTMLCSStoImage.\n"
      }
    },
    {
      "id": "b3d70d79-c91f-4752-8103-eec93843ae22",
      "name": "Download Binary File",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -304,
        352
      ]
    },
    {
      "id": "ec8095fb-8c53-4a7f-b8f2-e86ca70db8e1",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -336,
        240
      ],
      "parameters": {
        "width": 448,
        "height": 256,
        "content": "## Storage\nCertificate PNG is downloaded and uploaded to Google Drive.  \nMetadata (event, certificate ID, attendee) is saved for easy lookup.\n"
      }
    },
    {
      "id": "ec7cf677-a693-4a2f-91d5-686ddd672148",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        128,
        240
      ],
      "parameters": {
        "width": 288,
        "height": 272,
        "content": "## Email Delivery\nSends participant an HTML email including event info, QR code, and the certificate image/download link.\n"
      }
    },
    {
      "id": "c6c05e22-62c7-439d-bc16-58d8d2858439",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        432,
        208
      ],
      "parameters": {
        "width": 352,
        "height": 320,
        "content": "## Logging & Alerts\nRegistration + certificate details are logged in Google Sheets.  \nSlack message notifies organizers of new registration.\n"
      }
    },
    {
      "id": "50eabd16-52a2-4610-8aa9-c6f70796a7a9",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        816,
        256
      ],
      "parameters": {
        "width": 304,
        "height": 224,
        "content": "## Response\nReturns JSON with success message, certificateId, and verification URL.\n"
      }
    }
  ],
  "connections": {
    "Verifi Email": {
      "main": [
        [
          {
            "node": "Check Email Valid",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check Email Valid": {
      "main": [
        [
          {
            "node": "Generate Certificate ID & QR",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Email Verification Error",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTML/CSS to Image": {
      "main": [
        [
          {
            "node": "Download Binary File",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Download Binary File": {
      "main": [
        [
          {
            "node": "Upload to Google Drive",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Log to Google Sheets": {
      "main": [
        [
          {
            "node": "Notify Slack Channel",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Notify Slack Channel": {
      "main": [
        [
          {
            "node": "Success Response",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Webhook Registration": {
      "main": [
        [
          {
            "node": "Validate Required Fields",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send Certificate Email": {
      "main": [
        [
          {
            "node": "Log to Google Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Upload to Google Drive": {
      "main": [
        [
          {
            "node": "Send Certificate Email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare Certificate HTML": {
      "main": [
        [
          {
            "node": "HTML/CSS to Image",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Validate Required Fields": {
      "main": [
        [
          {
            "node": "Verifi Email",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Validation Error Response",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate Certificate ID & QR": {
      "main": [
        [
          {
            "node": "Prepare Certificate HTML",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}