{
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "bdf7d44b-b13e-4bfc-bbb5-0fabe8abd40a",
      "name": "Send Acknowledgement Email",
      "type": "n8n-nodes-base.gmail",
      "position": [
        -20,
        1140
      ],
      "parameters": {
        "sendTo": "={{ $json.contact_info.email }}",
        "message": "We will get in touch shortly.",
        "options": {
          "senderName": "VLM Run",
          "appendAttribution": false
        },
        "subject": "Thanks for Your Interest"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "72290874-1493-4980-a445-ac5d5f752ebd",
      "name": "\ud83d\udd0d GitHub Analysis Documentation3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1460,
        100
      ],
      "parameters": {
        "color": 7,
        "width": 1260,
        "height": 640,
        "content": "## \ud83d\udd0d GitHub Intelligence Engine\n\n**Deep analysis of candidate's GitHub profile and repositories.**\n\n**Profile Analysis:**\n- Account age & experience\n- Follower/following metrics\n- Public repository count\n- Bio and company info\n\n**Repository Intelligence:**\n- Language distribution\n- Framework detection (30+)\n- Total stars & forks\n- Recent activity tracking\n\n**Technology Detection:**\n- Frontend: React, Vue, Angular\n- Backend: Express, Django, Flask\n- Mobile: React Native, Flutter\n- DevOps: Docker, AWS, Kubernetes\n\n**Smart Features:**\n- Handles missing profiles gracefully\n- Calculates experience automatically\n- Ranks technologies by usage\n- Identifies trending skills"
      },
      "typeVersion": 1
    },
    {
      "id": "2cc059ed-deb1-4cd6-bc35-a840e7e3fb9f",
      "name": "\ud83e\udd16 AI Processing Documentation1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1860,
        100
      ],
      "parameters": {
        "color": 3,
        "width": 380,
        "height": 880,
        "content": "## \ud83e\udd16 AI Resume Analysis\n\n**VLM Run processes resumes to extract structured candidate data.**\n\n**Features:**\n- Contact information extraction\n- Skills identification\n- Experience parsing\n- Education details\n- Social profile detection\n\n**Advanced Extraction:**\n- Name, email, phone\n- GitHub & LinkedIn URLs\n- Work history\n- Technical skills\n- Certifications\n\n**Output:**\n- Structured JSON data\n- Normalized fields\n- Ready for analysis\n\n**Benefits:**\n- Eliminates manual data entry\n- Consistent formatting\n- Accurate extraction\n- Scalable processing"
      },
      "typeVersion": 1
    },
    {
      "id": "92d64d61-d690-4d68-8ee7-ebb0f231c02c",
      "name": "\ud83d\udce7 Intake Documentation1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2260,
        100
      ],
      "parameters": {
        "color": 7,
        "width": 380,
        "height": 880,
        "content": "## \ud83d\udce7 Resume Intake Processing\n\n**Monitors Gmail for incoming resume submissions and automatically triggers processing.**\n\n**Process:**\n1. Watches inbox every minute\n2. Detects emails with attachments\n3. Auto-triggers on new resumes\n4. Downloads PDF attachments\n\n**Supported Formats:**\n- PDF resumes\n- DOC/DOCX files\n- Various layouts\n- Multi-page documents\n\n**Trigger Conditions:**\n- New email received\n- Contains attachments\n- Attachment download enabled\n- Real-time processing"
      },
      "typeVersion": 1
    },
    {
      "id": "a6a81e04-0f29-44c6-aa81-0b642517b7bb",
      "name": "\ud83d\udccb Workflow Overview1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2740,
        100
      ],
      "parameters": {
        "color": 7,
        "width": 460,
        "height": 880,
        "content": "## \ud83d\udccb AI Resume Processing & GitHub Analysis\n\n**Overview:**\nAutomatically processes resumes received via email and generates comprehensive candidate profiles with AI-powered resume parsing and GitHub analysis.\n\n**Workflow:**\n1. \ud83d\udce7 Monitor Gmail for resume submissions\n2. \ud83e\udd16 Parse resume with AI extraction\n3. \ud83d\udd0d Analyze GitHub profile (if available)\n4. \ud83d\udcca Create comprehensive candidate profile\n5. \ud83d\udcac Notify team via Slack + save to Sheets\n6. \u2709\ufe0f Send acknowledgment to candidate\n\n**Perfect for:**\n- HR departments\n- Technical recruiting\n- Talent acquisition teams\n- Startup hiring\n- Developer assessment\n\n**Requirements:**\n- VLM Run API access\n- Gmail OAuth2\n- Google Sheets access\n- Slack webhook\n- GitHub API (optional authentication)"
      },
      "typeVersion": 1
    },
    {
      "id": "3d3a320b-b63d-4248-a01e-6f75fb77b716",
      "name": "\ud83d\udcca Output Documentation1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -180,
        100
      ],
      "parameters": {
        "color": 7,
        "width": 420,
        "height": 1240,
        "content": "## \ud83d\udcca Multi-Channel Output\n\n**Delivers comprehensive candidate data across multiple platforms.**\n\n**Google Sheets Integration:**\n- Structured candidate database\n- 20+ data columns\n- Searchable & filterable\n- Historical tracking\n\n**Slack Notifications:**\n- Instant team alerts\n- Rich candidate summaries\n- GitHub profile highlights\n- Technology breakdown\n\n**Email Automation:**\n- Professional acknowledgments\n- Personalized messages\n- GitHub profile mentions\n- Builds candidate experience\n\n**Benefits:**\n- Centralized data storage\n- Real-time team updates\n- Professional communication\n- Streamlined hiring process"
      },
      "typeVersion": 1
    },
    {
      "id": "4c4d9503-4b4a-4a95-bf64-67d4e0acc7b2",
      "name": "Monitor Gmail for Resumes",
      "type": "n8n-nodes-base.gmailTrigger",
      "position": [
        -2160,
        760
      ],
      "parameters": {
        "simple": false,
        "filters": {},
        "options": {
          "downloadAttachments": true
        },
        "pollTimes": {
          "item": [
            {
              "mode": "everyMinute"
            }
          ]
        }
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "a888c038-d826-4cd0-aefc-f9aca346a7f2",
      "name": "Parse Resume with VLM Run",
      "type": "@vlm-run/n8n-nodes-vlmrun.vlmRun",
      "position": [
        -1720,
        760
      ],
      "parameters": {
        "file": "attachment_0",
        "domain": "document.resume"
      },
      "credentials": {
        "vlmRunApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "1134c82c-77e6-438d-8fbc-77807837db17",
      "name": "Check for Github Profile",
      "type": "n8n-nodes-base.if",
      "position": [
        -1360,
        760
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "e28a7d82-d42c-4ce0-9a7d-7f9ef94090c2",
              "operator": {
                "type": "string",
                "operation": "exists",
                "singleValue": true
              },
              "leftValue": "={{ $json.response.contact_info.github }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "29ef7e94-6c03-4e0c-98e6-3720b6e078cb",
      "name": "Extract GitHub Username",
      "type": "n8n-nodes-base.code",
      "position": [
        -1080,
        540
      ],
      "parameters": {
        "jsCode": "const url = $input.first().json.response.contact_info.github\nconst username = url.split('github.com/')[1].split('/')[0];\nreturn [{ json: { username } }];"
      },
      "typeVersion": 2
    },
    {
      "id": "2c851eda-2501-4b8a-a855-9ac5cb750d3c",
      "name": "Fetch GitHub Profile",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -840,
        340
      ],
      "parameters": {
        "url": "=https://api.github.com/users/{{ $json.username }}",
        "options": {}
      },
      "typeVersion": 4.2
    },
    {
      "id": "19528631-4eab-420b-9601-25d96e65b9c8",
      "name": "Fetch GitHub Repositories",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -840,
        540
      ],
      "parameters": {
        "url": "=https://api.github.com/users/{{ $json.username }}/repos",
        "options": {}
      },
      "typeVersion": 4.2
    },
    {
      "id": "7ac5cbc4-828c-42d1-addf-162458ac6fda",
      "name": "Process Profile Data",
      "type": "n8n-nodes-base.code",
      "position": [
        -620,
        340
      ],
      "parameters": {
        "jsCode": "const user = items[0].json;\n\n// Parse creation and update dates\nconst created = new Date(user.created_at);\nconst updated = new Date(user.updated_at);\n\n// Calculate difference in milliseconds\nconst diffTime = Math.abs(updated - created);\n\n// Convert milliseconds to years\nconst years = diffTime / (1000 * 60 * 60 * 24 * 365.25);\n\n// Round to nearest whole number\nconst experience = `~${Math.round(years)}`;\n\n// Return desired output\nreturn [\n  {\n    json: {\n      login: user.login,\n      public_repos: user.public_repos,\n      followers: user.followers,\n      experience\n    }\n  }\n];"
      },
      "typeVersion": 2
    },
    {
      "id": "1b32ce5f-3213-43b0-a604-be204c1ae476",
      "name": "Analyze Repository Data",
      "type": "n8n-nodes-base.code",
      "position": [
        -600,
        540
      ],
      "parameters": {
        "jsCode": "// Initialize counts\nlet languageCount = {};\nlet frameworkCount = {};\nlet totalStars = 0;\nlet totalForks = 0;\n\n// Full list of frameworks, libraries, and tools\nconst knownFrameworks = [\n  \"React\", \"Angular\", \"Vue\", \"Bootstrap\", \"Tailwind\", \"jQuery\",\n  \"Node\", \"Express\", \"Django\", \"Flask\", \"Spring Boot\", \"Laravel\", \"Rails\",\n  \"React Native\", \"Flutter\", \"Ionic\",\n  \"MongoDB\", \"MySQL\", \"PostgreSQL\", \"Firebase\",\n  \"Docker\", \"Jenkins\", \"GitHub\", \"GitLab\", \"AWS\", \"Azure\", \"Netlify\", \"Vercel\",\n  \"Jest\", \"Mocha\", \"Cypress\", \"Selenium\",\n  \"FastAPI\", \"Redux\", \"Redux Toolkit\"\n];\n\n// Helper function to extract frameworks\nfunction extractFrameworks(text) {\n  if (!text) return [];\n\n  const matches = new Set();\n  const lowerText = text.toLowerCase();\n\n  for (const fw of knownFrameworks) {\n    if (lowerText.includes(fw.toLowerCase())) {\n      matches.add(fw);\n    }\n  }\n\n  return Array.from(matches);\n}\n\n// Loop through repositories\nfor (const item of items) {\n  const repo = item.json;\n\n  // Count languages\n  const lang = repo.language;\n  if (lang) {\n    languageCount[lang] = (languageCount[lang] || 0) + 1;\n  }\n\n  // Count frameworks from description and topics\n  const descFrameworks = extractFrameworks(repo.description);\n  const topicFrameworks = extractFrameworks((repo.topics || []).join(\" \"));\n  const allFrameworks = new Set([...descFrameworks, ...topicFrameworks]);\n\n  for (const fw of allFrameworks) {\n    frameworkCount[fw] = (frameworkCount[fw] || 0) + 1;\n  }\n\n  // Add stars and forks\n  totalStars += repo.stargazers_count || 0;\n  totalForks += repo.forks_count || 0;\n}\n\n// Return combined result\nreturn [\n  {\n    json: {\n      languageCount,\n      frameworkCount,\n      totalStars,\n      totalForks\n    }\n  }\n];"
      },
      "typeVersion": 2
    },
    {
      "id": "7f58201c-7656-4aae-9423-52680aa37b82",
      "name": "Combine GitHub Data",
      "type": "n8n-nodes-base.merge",
      "position": [
        -360,
        540
      ],
      "parameters": {
        "numberInputs": 3
      },
      "typeVersion": 3.1
    },
    {
      "id": "09f1229a-4638-44b2-8244-139b9b9022de",
      "name": "Flatten Response",
      "type": "n8n-nodes-base.code",
      "position": [
        -500,
        780
      ],
      "parameters": {
        "jsCode": "const allItems = $input.all();\n\n// Defensive checks to ensure indexes exist\nconst resumeData = allItems[0]?.json?.response || {};\nconst githubData = allItems[1]?.json || {};\nconst repoData = allItems[2]?.json || {};\n\n// Merge into one object\nconst mergedData = {\n  ...githubData,\n  ...resumeData,\n  ...repoData\n};\n\n// Return as single item array\nreturn [\n  {\n    json: mergedData\n  }\n];"
      },
      "typeVersion": 2
    },
    {
      "id": "e8f89ee8-2bcd-464a-8ec8-2be11bf1c2b2",
      "name": "Save to Google Sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -20,
        780
      ],
      "parameters": {
        "columns": {
          "value": {
            "Name": "={{ $json.contact_info.full_name }}",
            "Email": "={{ $json.contact_info.email }}",
            "Phone no.": "={{ $json.contact_info.phone }}",
            "Github URL": "={{ $json.contact_info.github }}",
            "C++ Projects": "={{ $json.languageCount?.cpp || null }}",
            "LinkedIn URL": "={{ $json.contact_info.linkedin }}",
            "Java Projects": "={{ $json.languageCount?.Java || null }}",
            "React Projects": "={{ $json.languageCount?.React || null }}",
            "Python Projects": "={{ $json.languageCount?.Python || null }}",
            "GitHub Experience": "={{ $json.expeience || null }}",
            "GitHub Fork Count": "={{ $json.totalForks || null}}",
            "GitHub Star Count": "={{ $json.totalStars || null }}",
            "Github Repo Count": "={{ $json.public_repos || null }}",
            "Javascript Projects": "={{ $json.languageCount?.JavaScript || null }}",
            "TypeScript Projects": "={{ $json.languageCount?.TypeScript || null }}",
            "Github follower count": "={{ $json.followers || null }}"
          },
          "schema": [
            {
              "id": "Name",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Email",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Phone no.",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Phone no.",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Github URL",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Github URL",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "LinkedIn URL",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "LinkedIn URL",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "GitHub Experience",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "GitHub Experience",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Github follower count",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Github follower count",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Github Repo Count",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Github Repo Count",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "GitHub Star Count",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "GitHub Star Count",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "GitHub Fork Count",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "GitHub Fork Count",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Javascript Projects",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Javascript Projects",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "TypeScript Projects",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "TypeScript Projects",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Python Projects",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Python Projects",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "C++ Projects",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "C++ Projects",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Java Projects",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Java Projects",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "React Projects",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "React Projects",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "Name"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1q-272l0Ha8qz981Y0rGI8jXu-6zja5DSwiFZmHahQe8/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1q-272l0Ha8qz981Y0rGI8jXu-6zja5DSwiFZmHahQe8",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1q-272l0Ha8qz981Y0rGI8jXu-6zja5DSwiFZmHahQe8/edit?usp=drivesdk",
          "cachedResultName": "Candidate VLM Run n8n"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.5
    },
    {
      "id": "4f4fd7ca-fc02-44c1-a617-02eec8aedbdb",
      "name": "Send Slack Notification",
      "type": "n8n-nodes-base.slack",
      "position": [
        -20,
        960
      ],
      "parameters": {
        "text": "=\ud83d\udea8 *New Job Application Received!*\n\n\ud83d\udce8 *Candidate Name:* {{ $json.contact_info.full_name }}\n\ud83d\udce7 *Email:* <mailto:{{ $json.contact_info.email }}|{{ $json.contact_info.email }}>\n\n\ud83d\udcdd A new application has just been submitted. Check <https://docs.google.com/spreadsheets/d/1DWi8rZy6LPHFe7JDzPXuIh_VO027P20C3Om9Owf--1g/edit?gid=0#gid=0/|here> for full details.",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "list",
          "value": "C08S3SR2LUW",
          "cachedResultName": "workflow-testing"
        },
        "otherOptions": {
          "mrkdwn": true
        }
      },
      "credentials": {
        "slackApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.3
    }
  ],
  "connections": {
    "Flatten Response": {
      "main": [
        [
          {
            "node": "Send Slack Notification",
            "type": "main",
            "index": 0
          },
          {
            "node": "Send Acknowledgement Email",
            "type": "main",
            "index": 0
          },
          {
            "node": "Save to Google Sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Combine GitHub Data": {
      "main": [
        [
          {
            "node": "Flatten Response",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch GitHub Profile": {
      "main": [
        [
          {
            "node": "Process Profile Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Process Profile Data": {
      "main": [
        [
          {
            "node": "Combine GitHub Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Analyze Repository Data": {
      "main": [
        [
          {
            "node": "Combine GitHub Data",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Extract GitHub Username": {
      "main": [
        [
          {
            "node": "Fetch GitHub Profile",
            "type": "main",
            "index": 0
          },
          {
            "node": "Fetch GitHub Repositories",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check for Github Profile": {
      "main": [
        [
          {
            "node": "Extract GitHub Username",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Flatten Response",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch GitHub Repositories": {
      "main": [
        [
          {
            "node": "Analyze Repository Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Monitor Gmail for Resumes": {
      "main": [
        [
          {
            "node": "Parse Resume with VLM Run",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Parse Resume with VLM Run": {
      "main": [
        [
          {
            "node": "Check for Github Profile",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}