{
  "id": "",
  "meta": {
    "templateCredsSetupCompleted": false
  },
  "name": "Workshop Certificate Pre-Issuance System",
  "tags": [],
  "nodes": [
    {
      "id": "5e7bec79-8951-4388-890c-73e37a6ef8b2",
      "name": "IF - Email Valid?",
      "type": "n8n-nodes-base.if",
      "position": [
        560,
        560
      ],
      "parameters": {
        "conditions": {
          "boolean": [
            {
              "value1": "={{ $json.valid }}",
              "value2": "={{ true }}"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "1e9a2800-bab2-47f2-8fff-5f52f0d3e903",
      "name": "Prepare Certificate Data",
      "type": "n8n-nodes-base.code",
      "position": [
        880,
        368
      ],
      "parameters": {
        "jsCode": "// Get current item (merged data)\nconst data = $input.first().json;\n\n// Build full name\nconst fullName = `${data[\"Full Name\"].first} ${data[\"Full Name\"].last}`.trim();\n\n// Format date\nconst dateObj = data[\"Select Workshop Date\"];\nconst displayDate = new Date(`${dateObj.year}-${dateObj.month}-${dateObj.day}`).toLocaleDateString('en-US', {\n  year: 'numeric',\n  month: 'long',\n  day: 'numeric'\n});\n\n// QR Code URL\nconst verificationUrl = `https://your-domain.com/verify?email=${encodeURIComponent(data.Email)}&event=${encodeURIComponent(data[\"Select Workshop\"])}`;\n\n// Unique Certificate ID\nconst certificateId = `CERT-${Date.now().toString(36).toUpperCase()}-${Math.random().toString(36).substr(2, 5).toUpperCase()}`;\n\n// Return clean data for HTML\nreturn [\n  {\n    json: {\n      name: fullName,\n      email: data.Email,\n      event: data[\"Select Workshop\"],\n      date: displayDate,\n      qrCodeUrl: `https://api.qrserver.com/v1/create-qr-code/?data=${encodeURIComponent(verificationUrl)}&size=200x200&margin=10`,\n      verificationUrl: verificationUrl,\n      certificateId: certificateId,\n      verifiedAt: new Date().toISOString(),\n      emailProvider: data.details?.mx?.provider || \"Unknown\",\n      isValid: data.valid\n    }\n  }\n];"
      },
      "typeVersion": 2
    },
    {
      "id": "ff60e9dc-464e-4b54-8bbd-1e90874436d5",
      "name": "Download PDF File",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1536,
        368
      ],
      "parameters": {
        "url": "={{ $json.pdf_url }}",
        "options": {
          "response": {
            "response": {
              "responseFormat": "file",
              "outputPropertyName": "pdfData"
            }
          }
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "f8ec0f94-b7c6-43c8-8598-7cb5e324b523",
      "name": "Send Confirmation Email",
      "type": "n8n-nodes-base.gmail",
      "position": [
        2464,
        368
      ],
      "parameters": {
        "sendTo": "={{ $('Prepare Certificate Data').item.json.email }}",
        "message": "=<!DOCTYPE html>\n<html>\n<head>\n  <meta charset=\"utf-8\">\n  <style>\n    body { font-family: 'Segoe UI', Tahoma, sans-serif; background: #f4f4f9; color: #333; padding: 20px; }\n    .container { max-width: 600px; margin: auto; background: white; border-radius: 12px; overflow: hidden; box-shadow: 0 4px 12px rgba(0,0,0,0.1); }\n    .header { background: #1a5fb4; color: white; padding: 30px; text-align: center; }\n    .header h1 { margin: 0; font-size: 24px; }\n    .body { padding: 30px; line-height: 1.6; }\n    .highlight { background: #e3f2fd; padding: 15px; border-radius: 8px; margin: 20px 0; font-weight: bold; }\n    .qr { text-align: center; margin: 25px 0; }\n    .qr img { width: 140px; height: 140px; border: 1px solid #ddd; padding: 8px; border-radius: 8px; }\n    .footer { background: #f0f0f0; padding: 20px; text-align: center; font-size: 12px; color: #777; }\n    .btn { display: inline-block; background: #1a5fb4; color: white; padding: 12px 24px; text-decoration: none; border-radius: 6px; margin-top: 15px; font-weight: bold; }\n  </style>\n</head>\n<body>\n  <div class=\"container\">\n    <div class=\"header\">\n      <h1>Workshop Confirmation</h1>\n    </div>\n    <div class=\"body\">\n      <p>Hi <strong>{{ $json['Full Name'] }}</strong>,</p>\n      <p>Congratulations! Your registration for:</p>\n      <div class=\"highlight\">\n        <strong>{{ $json.Workshop }}</strong><br>\n        {{ $json.Date }}\n      </div>\n      <p>has been <strong>verified and confirmed</strong>.</p>\n\n      <div class=\"qr\">\n        <img src=\"{{ $json['QR Code URL'] }}\" alt=\"QR Code\">\n        <p><em>Scan on event day for instant check-in</em></p>\n      </div>\n\n      <p><strong>Certificate ID:</strong> <code>{{ $json['Certificate ID'] }}</code></p>\n      <p><strong>Verified Email:</strong> {{ $json.Email }}</p>\n\n      <p>Your official <strong>pre-issued certificate is attached</strong> as a PDF.</p>\n\n      <a href=\"{{ $json['PDF Link'] }}\" class=\"btn\" target=\"_blank\">\n        View Certificate Online\n      </a>\n    </div>\n    <div class=\"footer\">\n      Issued on {{ new Date().toLocaleDateString() }} \u2022 Powered by <strong>n8n Automation</strong>\n    </div>\n  </div>\n</body>\n</html>",
        "options": {},
        "subject": "=\ud83c\udf89 Your Workshop Seat is Confirmed - {{ $('Prepare Certificate Data').item.json.event }}"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "96b09356-225b-41dd-8684-b003df5b7f1c",
      "name": "Log to Google Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        2176,
        368
      ],
      "parameters": {
        "columns": {
          "value": {
            "Date": "={{ $('Prepare Certificate Data').item.json.date }}",
            "Email": "={{ $('Prepare Certificate Data').item.json.email }}",
            "PDF Link": "={{ $json.webViewLink }}",
            "Workshop": "={{ $('Prepare Certificate Data').item.json.event }}",
            "Full Name": "={{ $('Prepare Certificate Data').item.json.name }}",
            "Timestamp": "={{ new Date().toISOString() }}",
            "QR Code URL": "={{ $('Prepare Certificate Data').item.json.qrCodeUrl }}",
            "Verified At": "={{ $json.createdTime }}",
            "Certificate ID": "={{ $('Prepare Certificate Data').item.json.certificateId }}"
          },
          "schema": [
            {
              "id": "Timestamp",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Timestamp",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Full Name",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Full Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Email",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Workshop",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Workshop",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Date",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Date",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Certificate ID",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Certificate ID",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "QR Code URL",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "QR Code URL",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "PDF Link",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "PDF Link",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Verified At",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Verified At",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "Email"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/YOUR_GOOGLE_SHEETS_DOCUMENT_ID/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "YOUR_GOOGLE_SHEETS_DOCUMENT_ID",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/YOUR_GOOGLE_SHEETS_DOCUMENT_ID/edit?usp=drivesdk",
          "cachedResultName": "Workshop Registrations & Certificates"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.4
    },
    {
      "id": "4c34e01e-c47f-4879-a79b-f358b4e774e6",
      "name": "Log Failed Registrations",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        880,
        736
      ],
      "parameters": {
        "columns": {
          "value": {
            "Date": "={{ new Date(\n  $json[\"Select Workshop Date\"].year + '-' +\n  String($json[\"Select Workshop Date\"].month).padStart(2, '0') + '-' +\n  String($json[\"Select Workshop Date\"].day).padStart(2, '0')\n).toLocaleDateString('en-US', { year: 'numeric', month: 'long', day: 'numeric' }) }}",
            "Email": "={{ $json.Email }}",
            "Status": "Invalid Email",
            "PDF Link": "Invalid Email",
            "Workshop": "={{ $json[\"Select Workshop\"] }}",
            "Full Name": "={{ $json['Full Name'].first + ' ' + $json['Full Name'].last }}",
            "Timestamp": "={{ $now }}",
            "QR Code URL": "Invalid Email",
            "Verified At": "Invalid Email",
            "Certificate ID": "Invalid Email"
          },
          "schema": [
            {
              "id": "Timestamp",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Timestamp",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Full Name",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Full Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Email",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Workshop",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Workshop",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Date",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Date",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Certificate ID",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Certificate ID",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "QR Code URL",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "QR Code URL",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "PDF Link",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "PDF Link",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Status",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Status",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Verified At",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Verified At",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/YOUR_GOOGLE_SHEETS_DOCUMENT_ID/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "YOUR_GOOGLE_SHEETS_DOCUMENT_ID",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/YOUR_GOOGLE_SHEETS_DOCUMENT_ID/edit?usp=drivesdk",
          "cachedResultName": "Workshop Registrations & Certificates"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.4
    },
    {
      "id": "0d26d3cd-509b-4f95-b188-00d41bb17e3c",
      "name": "JotForm Trigger",
      "type": "n8n-nodes-base.jotFormTrigger",
      "position": [
        -224,
        544
      ],
      "parameters": {
        "form": "YOUR_JOTFORM_FORM_ID"
      },
      "credentials": {
        "jotFormApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "de18b560-5a30-4b26-998f-a701590b4e9d",
      "name": "Verifi Email",
      "type": "n8n-nodes-verifiemail.verifiEmail",
      "position": [
        0,
        752
      ],
      "parameters": {
        "email": "={{ $json.Email }}"
      },
      "credentials": {
        "verifiEmailApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "1eb2b648-b557-42f1-aed5-d6b3f5b6419e",
      "name": "Merge",
      "type": "n8n-nodes-base.merge",
      "position": [
        288,
        560
      ],
      "parameters": {
        "mode": "combine",
        "options": {},
        "combineBy": "combineByPosition"
      },
      "typeVersion": 3.2
    },
    {
      "id": "5b63e21f-3504-4081-8422-800bda3803b5",
      "name": "HTML to PDF",
      "type": "n8n-nodes-htmlcsstopdf.htmlcsstopdf",
      "position": [
        1200,
        368
      ],
      "parameters": {
        "html_content": "=<div style=\"font-family: 'Georgia', serif; text-align: center; padding: 40px; border: 8px double #1a5fb4; background: #f9f9fb; max-width: 600px; margin: auto; color: #1a1a1a;\">\n  <h1 style=\"color: #1a5fb4; margin-bottom: 10px;\">Certificate of Confirmation</h1>\n  <p style=\"font-size: 18px; color: #555;\">This certifies that</p>\n  \n  <h2 style=\"font-size: 28px; margin: 15px 0; color: #1a5fb4;\">{{ $json.name }}</h2>\n  \n  <p style=\"font-size: 18px; color: #555;\">has successfully registered for</p>\n  <h3 style=\"font-size: 22px; color: #000;\">{{ $json.event }}</h3>\n  \n  <p style=\"font-size: 16px; margin: 10px 0;\"><strong>Date:</strong> {{ $json.date }}</p>\n  \n  <div style=\"margin: 30px 0;\">\n    <img src=\"{{ $json.qrCodeUrl }}\" alt=\"QR Code\" style=\"width: 150px; height: 150px;\" />\n  </div>\n  \n  <p style=\"font-size: 14px; color: #666;\">\n    <strong>Certificate ID:</strong> {{ $json.certificateId }}<br>\n    <strong>Verified Email:</strong> {{ $json.email }} ({{ $json.emailProvider }})<br>\n    <em>Scan QR code on event day for instant check-in</em>\n  </p>\n  \n  <hr style=\"border: 1px dashed #ccc; margin: 30px 0;\">\n  <p style=\"font-size: 12px; color: #999;\">\n    Issued: {{ new Date().toLocaleDateString() }} \u2022 Powered by n8n Automation\n  </p>\n</div>"
      },
      "credentials": {
        "htmlcsstopdfApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "d7504f9f-ee7e-41b0-8ec3-28acf6b139be",
      "name": "Upload file",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        1856,
        368
      ],
      "parameters": {
        "name": "=Confirmed_Attendee_{{ $('Prepare Certificate Data').item.json.name }}_{{ $('Prepare Certificate Data').item.json.date }}.pdf",
        "driveId": {
          "__rl": true,
          "mode": "list",
          "value": "My Drive",
          "cachedResultUrl": "https://drive.google.com/drive/my-drive",
          "cachedResultName": "My Drive"
        },
        "options": {},
        "folderId": {
          "__rl": true,
          "mode": "list",
          "value": "YOUR_GOOGLE_DRIVE_FOLDER_ID",
          "cachedResultUrl": "https://drive.google.com/drive/folders/YOUR_GOOGLE_DRIVE_FOLDER_ID",
          "cachedResultName": "Attendee Data"
        },
        "inputDataFieldName": "pdfData"
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "cfe08577-ff68-4961-af0a-20ad40a7393b",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -928,
        -32
      ],
      "parameters": {
        "width": 368,
        "height": 336,
        "content": "## \ud83c\udfaf WORKFLOW OVERVIEW\n\n**Purpose:** Automated Pre-Issued Workshop Certificate System\n\n**What This Workflow Does:**\n1. \u2705 Captures workshop registrations from Jotform\n2. \u2705 Verifies email validity using VerifiEmail\n3. \u2705 Generates professional PDF certificates\n4. \u2705 Saves certificates to Google Drive\n5. \u2705 Sends confirmation email with certificate\n6. \u2705 Logs all registrations to Google Sheets\n7. \u2705 Handles invalid email addresses gracefully\n"
      },
      "typeVersion": 1
    },
    {
      "id": "3bc160b5-b5f3-4b6d-82cc-85a70e6f7beb",
      "name": "Sticky Note - Step 3 Merge",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        176,
        336
      ],
      "parameters": {
        "color": 5,
        "width": 300,
        "height": 381,
        "content": "## \ud83d\udd00 STEP 3: Data Merge\n\n**What It Does:**\n- Combines Jotform data with email verification results\n- Merges by position (1st submission + 1st verification)\n- Creates unified data object for downstream nodes\n"
      },
      "typeVersion": 1
    },
    {
      "id": "343482c5-6df5-41c2-9954-5047ff76d18f",
      "name": "Sticky Note - Step 5 Data Prep",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        784,
        160
      ],
      "parameters": {
        "color": 5,
        "width": 348,
        "height": 343,
        "content": "## \ud83e\udde0 STEP 5: Data Preparation\n\n**What It Does:**\n- Formats and cleans data for certificate\n- Builds full name from first + last\n- Formats date in readable format\n- Generates unique Certificate ID\n- Creates QR code URL for verification"
      },
      "typeVersion": 1
    },
    {
      "id": "66a19ac2-10fb-465d-b54c-08593974aae0",
      "name": "Sticky Note - Step 6 PDF Generation",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1136,
        112
      ],
      "parameters": {
        "color": 5,
        "width": 316,
        "height": 405,
        "content": "## \ud83c\udfa8 STEP 6: PDF Certificate Generation\n\n**Certificate Design Features:**\n\u2728 Professional Georgia serif font\n\u2728 Blue theme (#1a5fb4) with double border\n\u2728 Centered layout\n\u2728 QR code for instant check-in\n\u2728 Certificate ID & verification details\n\u2728 Timestamp footer\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "7e7c6eda-9d79-4cc2-97a4-3c70a1c42f5b",
      "name": "Sticky Note - Step 7 Download PDF",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1456,
        128
      ],
      "parameters": {
        "color": 5,
        "width": 316,
        "height": 377,
        "content": "## \u2b07\ufe0f STEP 7: Download PDF File\n\n**What It Does:**\n- Downloads PDF from generated URL\n- Converts to binary data\n- Prepares for Google Drive upload\n- Makes PDF available for email attachment\n\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "556585b6-08ee-43c7-9ba0-2d770495b442",
      "name": "Sticky Note - Step 8 Google Drive",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1776,
        112
      ],
      "parameters": {
        "color": 5,
        "width": 300,
        "height": 407,
        "content": "## \u2601\ufe0f STEP 8: Save to Google Drive\n\n**What It Does:**\n- Uploads PDF certificate to Google Drive\n- Organizes in \"Attendee Data\" folder\n- Generates shareable web view link\n- Creates permanent backup of all certificates\n\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "b236ab7c-1343-401b-809a-46da6da52e78",
      "name": "Sticky Note - Step 9 Google Sheets",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2080,
        -80
      ],
      "parameters": {
        "color": 5,
        "width": 316,
        "height": 601,
        "content": "## \ud83d\udcca STEP 9: Log to Google Sheets\n\n**Google Sheet:**\n\"Workshop Registrations & Certificates\"\n\n**Logged Fields:**\n\n| Columns | \n|--------|\n- Timestamp \n- Full Name \n- Email \n- Workshop  \n- Date \n- Certificate ID \n- QR Code URL \n- PDF Link \n- Status\n- Verification time \n"
      },
      "typeVersion": 1
    },
    {
      "id": "92f23ba3-991c-478f-a73a-6066d71c81c9",
      "name": "Sticky Note - Step 10 Gmail",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2400,
        0
      ],
      "parameters": {
        "color": 5,
        "width": 380,
        "height": 519,
        "content": "## \ud83d\udce7 STEP 10: Send Confirmation Email\n\n**What It Does:**\n- Sends beautiful HTML confirmation email\n- Includes event details & QR code\n- Provides Drive link to certificate\n- Professional branded template\n\n**Email Features:**\n\u2728 Mobile responsive\n\u2728 Professional styling\n\u2728 Blue color theme (#1a5fb4)\n\u2728 Clean typography\n\u2728 Embedded QR code\n\u2728 Direct Drive link\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "e52d6ffe-cd32-410f-bc4a-6df2188e3159",
      "name": "Sticky Note - False Branch",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        800,
        720
      ],
      "parameters": {
        "color": 3,
        "width": 380,
        "height": 409,
        "content": "\n\n\n\n\n\n\n\n\n\n\n\n## \u274c FALSE BRANCH: Invalid Email Path\n\n**Common Failure Reasons:**\n\u274c Invalid email format\n\u274c Disposable/temporary email\n\u274c Domain doesn't exist\n\u274c Mailbox doesn't exist\n\u274c SMTP verification failed\n\u274c Role-based email blocked\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "c28f87a3-365f-4fba-aec5-3f9db0f0a571",
      "name": "Sticky Note - Credentials Status",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -928,
        336
      ],
      "parameters": {
        "color": 4,
        "width": 327,
        "height": 339,
        "content": "## \ud83d\udd10 CREDENTIALS SETUP CHECKLIST\n\n**Required Credentials (All Configured \u2705):**\n\n1. **\u2705 Jotform API**\n2. **\u2705 VerifiEmail API**\n3. **\u2705 Google Drive OAuth2**\n   - Folder: Attendee Data\n4. **\u2705 Gmail OAuth2**\n5. **\u2705 Google Sheets OAuth2**\n   - Sheet: Workshop Registrations\n6. **\u2705 HTML to PDF API**\n"
      },
      "typeVersion": 1
    },
    {
      "id": "8a808aa3-96eb-40c8-b2e1-e46258d936e4",
      "name": "Sticky Note - Step 1 Jotform",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -464,
        336
      ],
      "parameters": {
        "color": 5,
        "width": 364,
        "height": 347,
        "content": "## \ud83d\udcdd STEP 1: Registration Form Trigger\n\n**What It Does:**\n- Listens for new workshop registrations\n- Captures form data in real-time\n- Starts the automation workflow\n\n**Captured Fields:**\n- Full Name (First + Last)\n- Email Address\n- Workshop Selection\n- Workshop Date\n"
      },
      "typeVersion": 1
    },
    {
      "id": "9e18f646-f00f-4a08-a22d-866d735cba3b",
      "name": "Sticky Note - Step 2 Email Verification",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -128,
        736
      ],
      "parameters": {
        "color": 5,
        "width": 364,
        "height": 367,
        "content": "\n\n\n\n\n\n\n\n\n\n\n\n## \u2709\ufe0f STEP 2: Email Verification\n\n**What It Does:**\n- Validates email deliverability in real-time\n- Checks for disposable/temporary emails\n- Verifies email format and DNS records\n- Detects role-based emails (info@, admin@)\n"
      },
      "typeVersion": 1
    },
    {
      "id": "f59bfa08-733e-46d2-925a-97f717ee8162",
      "name": "Sticky Note - Step 4 IF Condition",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        480,
        288
      ],
      "parameters": {
        "color": 5,
        "width": 300,
        "height": 417,
        "content": "## \ud83d\udd00 STEP 4: Conditional Split\n\n**What It Does:**\n- Routes workflow based on email validation\n- Splits into two branches: SUCCESS & FAILURE\n\n**Condition:**\n`{{ $json.valid }} === true`\n\n"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "",
  "connections": {
    "Merge": {
      "main": [
        [
          {
            "node": "IF - Email Valid?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTML to PDF": {
      "main": [
        [
          {
            "node": "Download PDF File",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Upload file": {
      "main": [
        [
          {
            "node": "Log to Google Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Verifi Email": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "JotForm Trigger": {
      "main": [
        [
          {
            "node": "Verifi Email",
            "type": "main",
            "index": 0
          },
          {
            "node": "Merge",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Download PDF File": {
      "main": [
        [
          {
            "node": "Upload file",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "IF - Email Valid?": {
      "main": [
        [
          {
            "node": "Prepare Certificate Data",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Log Failed Registrations",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Log to Google Sheets": {
      "main": [
        [
          {
            "node": "Send Confirmation Email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send Confirmation Email": {
      "main": [
        []
      ]
    },
    "Prepare Certificate Data": {
      "main": [
        [
          {
            "node": "HTML to PDF",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}