Automatisierung des Kandidatenscreenings mit Mistral OCR und Gemini AI-Bewerbungsanalyse

Experte

Dies ist ein HR, Multimodal AI-Bereich Automatisierungsworkflow mit 18 Nodes. Hauptsächlich werden MistralAi, FormTrigger, GoogleSheets, ManualTrigger, ChainLlm und andere Nodes verwendet. Kandidatenscreening mit Mistral OCR und Gemini AI-Lebenslaufanalyse automatisieren

Voraussetzungen
  • Google Sheets API-Anmeldedaten
  • Google Gemini API Key
Workflow-Vorschau
Visualisierung der Node-Verbindungen, mit Zoom und Pan
Workflow exportieren
Kopieren Sie die folgende JSON-Konfiguration und importieren Sie sie in n8n
{
  "meta": {
    "instanceId": "e409ea34548a2afe2dffba31130cd1cf2e98ebe2afaeed2a63caf2a0582d1da0"
  },
  "nodes": [
    {
      "id": "821d52da-591f-44db-b218-ee3974855a05",
      "cid": "Ikx1Y2FzIFBleXJpbiI",
      "name": "Notizzettel - Tabelle erstellen1",
      "type": "n8n-nodes-base.stickyNote",
      "notes": "© 2025 Lucas Peyrin",
      "creator": "Lucas Peyrin",
      "position": [
        -1408,
        608
      ],
      "parameters": {
        "color": 7,
        "width": 272,
        "height": 272,
        "content": "Initializes a new Google Sheet with columns for applicant data. Can be replaced with Airtable, Notion, etc."
      },
      "typeVersion": 1
    },
    {
      "id": "72c7af0e-d8f8-4498-a849-b95c323a6cd6",
      "cid": "Ikx1Y2FzIFBleXJpbiI",
      "name": "Notizzettel - Zeile anhängen1",
      "type": "n8n-nodes-base.stickyNote",
      "notes": "© 2025 Lucas Peyrin",
      "creator": "Lucas Peyrin",
      "position": [
        -720,
        256
      ],
      "parameters": {
        "color": 7,
        "width": 320,
        "height": 288,
        "content": "Adds the applicant's name and email to the Google Sheet right after they submit the form to have it logged even if the workflow fails."
      },
      "typeVersion": 1
    },
    {
      "id": "b8076a35-fb6e-481d-9d92-3a95e9c3c732",
      "cid": "Ikx1Y2FzIFBleXJpbiI",
      "name": "Notizzettel - Text extrahieren1",
      "type": "n8n-nodes-base.stickyNote",
      "notes": "© 2025 Lucas Peyrin",
      "creator": "Lucas Peyrin",
      "position": [
        -704,
        576
      ],
      "parameters": {
        "color": 7,
        "width": 224,
        "height": 304,
        "content": "This uses **[Mistral OCR](https://mistral.ai/fr/news/mistral-ocr)**, it extracts the text perfectly from a candidate's CV (PDF).\n\n**[Get your Mistral API key here](https://console.mistral.ai/api-keys)**"
      },
      "typeVersion": 1
    },
    {
      "id": "f7d1f44f-2d84-4a97-adad-2923f6ba1736",
      "cid": "Ikx1Y2FzIFBleXJpbiI",
      "name": "Notizzettel - LLM Chain1",
      "type": "n8n-nodes-base.stickyNote",
      "notes": "© 2025 Lucas Peyrin",
      "creator": "Lucas Peyrin",
      "position": [
        -464,
        608
      ],
      "parameters": {
        "color": 6,
        "width": 320,
        "height": 248,
        "content": "Adapt the `job requirements` in the prompt to **your position & criteria**."
      },
      "typeVersion": 1
    },
    {
      "id": "a1e153ae-1a1b-4a4f-b901-b999c31b4059",
      "cid": "Ikx1Y2FzIFBleXJpbiI",
      "name": "Notizzettel - Output Parser1",
      "type": "n8n-nodes-base.stickyNote",
      "notes": "© 2025 Lucas Peyrin",
      "creator": "Lucas Peyrin",
      "position": [
        -320,
        912
      ],
      "parameters": {
        "color": 7,
        "width": 368,
        "height": 256,
        "content": "\n\n\n\n\n\n\n\n\n\n\n\n\nEnsures the AI's response is perfectly structured as JSON (e.g., `qualificationRate`, `explanation`), making the data reliable and easy to use."
      },
      "typeVersion": 1
    },
    {
      "id": "641d597c-400b-4d6c-a21c-5fc28099c9be",
      "cid": "Ikx1Y2FzIFBleXJpbiI",
      "name": "Notizzettel - Zeile aktualisieren1",
      "type": "n8n-nodes-base.stickyNote",
      "notes": "© 2025 Lucas Peyrin",
      "creator": "Lucas Peyrin",
      "position": [
        -128,
        608
      ],
      "parameters": {
        "color": 7,
        "width": 272,
        "height": 256,
        "content": "Check your Google Sheets! You now have the analysis of the candidate."
      },
      "typeVersion": 1
    },
    {
      "id": "704e43dd-ee85-4514-8a41-cb3daaf71eee",
      "cid": "Ikx1Y2FzIFBleXJpbiI",
      "name": "Notizzettel - Workflow-Ziel1",
      "type": "n8n-nodes-base.stickyNote",
      "notes": "© 2025 Lucas Peyrin",
      "creator": "Lucas Peyrin",
      "position": [
        -1872,
        288
      ],
      "parameters": {
        "width": 448,
        "height": 592,
        "content": "## Automated CV Scanner\n\nThis workflow automates your hiring pipeline:\n1.  **Collects** applications via a web form.\n2.  **Extracts** text from the CV (PDF).\n3.  **Analyzes** the CV with AI against your job description.\n4.  **Stores** the candidate's score and a detailed explanation in Google Sheets.\n\n\n### Questions or Feedback?\nFor feedback, coaching, built-for-you workflows, or any questions, use my unified AI-powered contact form.\n\n➡️ **[Get in Touch Here](https://api.ia2s.app/form/templates/academy)**\n\n*Happy Automating! —Lucas Peyrin*"
      },
      "typeVersion": 1
    },
    {
      "id": "cb5ef831-79f7-4129-9642-6ece79a3603e",
      "cid": "Ikx1Y2FzIFBleXJpbiI",
      "name": "Anmeldeformular",
      "type": "n8n-nodes-base.formTrigger",
      "notes": "© 2025 Lucas Peyrin",
      "creator": "Lucas Peyrin",
      "position": [
        -928,
        704
      ],
      "webhookId": "230e09f7-33df-4266-917d-ce3398cae141",
      "parameters": {
        "options": {
          "path": "230e09f7-33df-4266-917d-ce3398cae141",
          "customCss": "/* --- ROOT VARIABLES (Dark Professional Theme) --- */\n:root {\n\t/* --- FONT MAPPING --- */\n\t--font-family: 'Inter', sans-serif;\n\t--font-weight-normal: 400;\n\t--font-weight-bold: 600;\n\t--font-size-body: 14px;\n\t--font-size-label: 14px;\n\t--font-size-input: 14px;\n\t--font-size-header: 24px;\n\t--line-height-base: 1.6;\n\n\t/* --- COLOR MAPPING (Dark Slate/Purple Theme) --- */\n\t--color-page-bg: #111827; /* Dark Slate */\n\t--color-card-bg-glass: rgba(29, 39, 53, 0.65); /* Darker, less transparent glass */\n\t--color-card-border-glass: rgba(255, 255, 255, 0.1); /* Subtle light border */\n\t--color-input-bg: #1F2937; /* Slightly lighter than page bg */\n\t--color-header: #F9FAFB; /* Off-white for high contrast */\n\t--color-label: #9CA3AF; /* Light gray for secondary text */\n\t--color-input-text: #F9FAFB;\n\t--color-input-border: #4B5563; /* Mid-gray border */\n\t--color-focus-border: #8B5CF6; /* Vibrant Purple */\n\t--color-link: #8B5CF6;\n\t--color-submit-btn-bg: #8B5CF6;\n\t--color-submit-btn-hover-bg: #7C3AED; /* Darker Purple */\n\t--color-submit-btn-text: #FFFFFF;\n\t--color-error: #F43F5E; /* Vibrant Rose for errors */\n\t--color-required: #F43F5E;\n\n\t/* --- DIMENSIONS & SPACING --- */\n\t--container-width: 550px;\n\t--border-radius-card: 16px;\n\t--border-radius-input: 8px;\n\t--padding-card: 32px;\n\t--padding-form-input: 14px;\n\t--submit-btn-height: 48px;\n\t--checkbox-size: 20px;\n\n\t/* --- EFFECTS & ANIMATIONS --- */\n\t--box-shadow-card: 0 16px 50px rgba(0, 0, 0, 0.3); /* Deeper shadow for dark mode */\n\t--transition-speed: 0.25s;\n\t--animation-speed-fast: 0.2s;\n\t--animation-speed-normal: 0.4s;\n}\n\n/* === KEYFRAME ANIMATIONS === */\n@keyframes fadeInSlideUp {\n    from {\n        opacity: 0;\n        transform: translateY(20px);\n    }\n    to {\n        opacity: 1;\n        transform: translateY(0);\n    }\n}\n\n@keyframes backgroundPan {\n\t0% { background-position: 0% 50%; }\n\t50% { background-position: 100% 50%; }\n\t100% { background-position: 0% 50%; }\n}\n\n/* === GLOBAL LAYOUT & STYLES === */\nbody {\n    /* Dynamic animated aurora gradient background */\n    background-color: var(--color-page-bg);\n    background-image:\n        radial-gradient(at 20% 100%, hsla(278, 60%, 45%, 0.2) 0px, transparent 50%),\n        radial-gradient(at 80% 0%, hsla(215, 60%, 40%, 0.2) 0px, transparent 50%),\n        radial-gradient(at 50% 50%, hsla(259, 70%, 55%, 0.1) 0px, transparent 50%);\n    background-size: 200% 200%;\n    animation: backgroundPan 15s ease-in-out infinite;\n\n    line-height: var(--line-height-base);\n    font-size: var(--font-size-body);\n    color: var(--color-label); /* Set default text color for body */\n\n    /* Flexbox properties for true centering */\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    min-height: 100vh;\n    margin: 0;\n    overflow-x: hidden; /* Prevent horizontal scroll from large gradients */\n}\n\n.form-container {\n    padding: 2rem 1rem;\n}\n\n/* === THE GLASSMORPHISM CARD === */\n.card {\n    background: var(--color-card-bg-glass);\n    backdrop-filter: blur(16px) saturate(150%);\n    -webkit-backdrop-filter: blur(16px) saturate(150%);\n    border-radius: var(--border-radius-card);\n    border: 1px solid var(--color-card-border-glass);\n    box-shadow: var(--box-shadow-card);\n    transition: box-shadow var(--animation-speed-normal) ease;\n\n    /* Card Load-in Animation */\n    animation: fadeInSlideUp 0.6s ease-out forwards;\n}\n.card:hover {\n    box-shadow: 0 0 50px rgba(139, 92, 246, 0.15); /* Subtle purple glow on hover */\n}\n\n/* === FORM ELEMENT STYLING === */\n.form-input {\n    border-radius: var(--border-radius-input);\n    transition: border-color var(--transition-speed) ease, box-shadow var(--transition-speed) ease;\n    background-color: var(--color-input-bg);\n    border: 1px solid var(--color-input-border);\n    color: var(--color-input-text);\n}\n.form-input::placeholder {\n    color: var(--color-label);\n    opacity: 0.7;\n}\n.form-input:focus {\n    /* Glow effect on focus */\n    box-shadow: 0 0 0 3px rgba(139, 92, 246, 0.25);\n    border-color: var(--color-focus-border);\n    outline: none; /* Remove default outline */\n}\n\ntextarea.form-input {\n    min-height: 150px;\n    resize: vertical;\n}\n\n/* Submit Button */\nbutton.submit-btn {\n    transition: all var(--transition-speed) ease-in-out;\n    font-family: var(--font-family);\n    font-weight: var(--font-weight-bold);\n    color: var(--color-submit-btn-text);\n    background-color: var(--color-submit-btn-bg);\n    border-radius: var(--border-radius-input);\n    border: none;\n    cursor: pointer;\n}\nbutton.submit-btn:hover {\n    background-color: var(--color-submit-btn-hover-bg);\n    /* Add a lift and glow effect on hover */\n    transform: translateY(-3px);\n    box-shadow: 0 8px 25px rgba(139, 92, 246, 0.3);\n}\n\n/* === MODERN CHECKBOX STYLING === */\nlabel.multiselect-label {\n    display: flex;\n    align-items: center;\n    cursor: pointer;\n    position: relative;\n    padding: 8px 0;\n}\nlabel.multiselect-label span {\n    padding-left: 12px;\n    color: var(--color-label);\n    transition: color var(--transition-speed) ease;\n}\nlabel.multiselect-label:hover span {\n    color: var(--color-input-text); /* Lighten label text on hover */\n}\nlabel.multiselect-label input[type=\"checkbox\"] {\n    position: absolute;\n    opacity: 0;\n    cursor: pointer;\n    height: 0;\n    width: 0;\n}\nlabel.multiselect-label span::before {\n    content: '';\n    position: absolute;\n    left: 0;\n    top: 50%;\n    transform: translateY(-50%);\n    width: var(--checkbox-size);\n    height: var(--checkbox-size);\n    background-color: var(--color-input-bg);\n    border: 1px solid var(--color-input-border);\n    border-radius: 6px;\n    transition: all var(--animation-speed-fast) ease-in-out;\n}\nlabel.multiselect-label input[type=\"checkbox\"]:checked + span::before {\n    background-color: var(--color-focus-border);\n    border-color: var(--color-focus-border);\n    background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='white'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e\");\n    background-position: center;\n    background-repeat: no-repeat;\n    /* Animation for the checkmark appearing */\n    transform: translateY(-50%) scale(1.05);\n}\nlabel.multiselect-label input[type=\"checkbox\"]:focus-visible + span::before {\n    /* Use a glow for focus instead of a harsh outline */\n    box-shadow: 0 0 0 3px rgba(139, 92, 246, 0.3);\n}",
          "buttonLabel": "Submit Application",
          "appendAttribution": false
        },
        "formTitle": "Submit Your Application",
        "formFields": {
          "values": [
            {
              "fieldLabel": "Full Name",
              "placeholder": "e.g., Jane Doe",
              "requiredField": true
            },
            {
              "fieldLabel": "Email",
              "placeholder": "e.g., jane.doe@example.com",
              "requiredField": true
            },
            {
              "fieldType": "file",
              "fieldLabel": "Upload CV",
              "requiredField": true,
              "acceptFileTypes": ".pdf"
            }
          ]
        },
        "responseMode": "lastNode",
        "formDescription": "Please fill out the form below and upload your CV to apply."
      },
      "typeVersion": 2.2
    },
    {
      "id": "8af8707e-de1b-4687-8d7a-c853dfec2b31",
      "cid": "Ikx1Y2FzIFBleXJpbiI",
      "name": "Start hier",
      "type": "n8n-nodes-base.manualTrigger",
      "notes": "© 2025 Lucas Peyrin",
      "creator": "Lucas Peyrin",
      "position": [
        -1648,
        704
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "3b04b67b-d4dc-44e6-90e1-d239dbbc40d1",
      "cid": "Ikx1Y2FzIFBleXJpbiI",
      "name": "CV-Text extrahieren",
      "type": "n8n-nodes-base.mistralAi",
      "notes": "© 2025 Lucas Peyrin",
      "creator": "Lucas Peyrin",
      "position": [
        -640,
        704
      ],
      "parameters": {
        "options": {},
        "binaryProperty": "={{ $('Application Form').last().binary.keys()[0] }}"
      },
      "credentials": {
        "mistralCloudApi": {
          "id": "CVHf7SBQRl2FcHwb",
          "name": "Mistral Template Key"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "483377db-ede2-4dcb-8ce0-a77b9f9d1b09",
      "cid": "Ikx1Y2FzIFBleXJpbiI",
      "name": "Kandidateneinreichung protokollieren",
      "type": "n8n-nodes-base.googleSheets",
      "notes": "© 2025 Lucas Peyrin",
      "creator": "Lucas Peyrin",
      "position": [
        -624,
        368
      ],
      "parameters": {
        "columns": {
          "value": {
            "Email": "={{ $json.Email }}",
            "FullName": "={{ $json[\"Full Name\"] }}"
          },
          "schema": [
            {
              "id": "FullName",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "FullName",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Email",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "QualificationRate",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "QualificationRate",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "QualificationDescription",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "QualificationDescription",
              "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/1PSiIF84BsVrnePIfgdNEVqYnWlWxW5ok8wh3cPDUYxg/edit#gid=0",
          "cachedResultName": "Feuille 1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1PSiIF84BsVrnePIfgdNEVqYnWlWxW5ok8wh3cPDUYxg",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1PSiIF84BsVrnePIfgdNEVqYnWlWxW5ok8wh3cPDUYxg/edit?usp=drivesdk",
          "cachedResultName": "CVs"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "csiCs0Ukgbs3jYYk",
          "name": "Calvin"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "d4aa8091-6577-44b5-9541-c0cc87f83e93",
      "cid": "Ikx1Y2FzIFBleXJpbiI",
      "name": "CV-Analyse hinzufügen",
      "type": "n8n-nodes-base.googleSheets",
      "notes": "© 2025 Lucas Peyrin",
      "creator": "Lucas Peyrin",
      "position": [
        -64,
        704
      ],
      "parameters": {
        "columns": {
          "value": {
            "Email": "={{ $('Application Form').last().json.Email }}",
            "QualificationRate": "={{ $json.output.qualificationRate }}",
            "QualificationDescription": "={{ $json.output.explanation }}"
          },
          "schema": [
            {
              "id": "FullName",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "FullName",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Email",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "QualificationRate",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "QualificationRate",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "QualificationDescription",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "QualificationDescription",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "row_number",
              "type": "number",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "row_number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "Email"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "update",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1PSiIF84BsVrnePIfgdNEVqYnWlWxW5ok8wh3cPDUYxg/edit#gid=0",
          "cachedResultName": "Feuille 1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1PSiIF84BsVrnePIfgdNEVqYnWlWxW5ok8wh3cPDUYxg",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1PSiIF84BsVrnePIfgdNEVqYnWlWxW5ok8wh3cPDUYxg/edit?usp=drivesdk",
          "cachedResultName": "CVs"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "csiCs0Ukgbs3jYYk",
          "name": "Calvin"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "05672977-b212-4dc6-9315-9d2c191c43a6",
      "cid": "Ikx1Y2FzIFBleXJpbiI",
      "name": "JSON Output Parser",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "notes": "© 2025 Lucas Peyrin",
      "creator": "Lucas Peyrin",
      "position": [
        -176,
        960
      ],
      "parameters": {
        "schemaType": "manual",
        "inputSchema": "{\n  \"type\": \"object\",\n  \"properties\": {\n    \"qualificationRate\": {\n      \"type\": \"number\",\n      \"description\": \"The qualification rate, typically a number between 0 and 1 or a percentage.\"\n    },\n    \"explanation\": {\n      \"type\": \"string\",\n      \"description\": \"A textual explanation or description of the qualification rate.\"\n    }\n  },\n  \"required\": [\n    \"qualificationRate\",\n    \"explanation\"\n  ],\n  \"additionalProperties\": false\n}"
      },
      "typeVersion": 1.3
    },
    {
      "id": "e94d6fac-a882-4573-a52d-11a90b15302f",
      "cid": "Ikx1Y2FzIFBleXJpbiI",
      "name": "Gemini 2.5 Flash Lite",
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "notes": "© 2025 Lucas Peyrin",
      "creator": "Lucas Peyrin",
      "position": [
        -512,
        944
      ],
      "parameters": {
        "options": {
          "temperature": 0.4
        },
        "modelName": "models/gemini-2.5-flash-lite"
      },
      "credentials": {
        "googlePalmApi": {
          "id": "Tfw18hAjsu3IwEqi",
          "name": "Google Gemini(PaLM) Api account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "7f185e06-146b-4949-a2b9-c840f1fbf556",
      "cid": "Ikx1Y2FzIFBleXJpbiI",
      "name": "'CVs'-Tabelle erstellen",
      "type": "n8n-nodes-base.googleSheets",
      "notes": "© 2025 Lucas Peyrin",
      "creator": "Lucas Peyrin",
      "position": [
        -1328,
        704
      ],
      "parameters": {
        "title": "CVs",
        "options": {},
        "resource": "spreadsheet",
        "sheetsUi": {
          "sheetValues": [
            {
              "title": "FullName"
            },
            {
              "title": "Email"
            },
            {
              "title": "QualificationRate"
            },
            {
              "title": "QualificationDescription"
            }
          ]
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "csiCs0Ukgbs3jYYk",
          "name": "Calvin"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "21587944-8fd4-4583-8697-a7bf04441850",
      "cid": "Ikx1Y2FzIFBleXJpbiI",
      "name": "Notizzettel12",
      "type": "n8n-nodes-base.stickyNote",
      "notes": "© 2025 Lucas Peyrin",
      "creator": "Lucas Peyrin",
      "position": [
        -1024,
        608
      ],
      "parameters": {
        "color": 7,
        "width": 300,
        "height": 268,
        "content": "💡 Later, activate this workflow and share the public form URL to let candidates share their CV!"
      },
      "typeVersion": 1
    },
    {
      "id": "f7e475cb-a354-4e10-9bc1-662cc81d13df",
      "cid": "Ikx1Y2FzIFBleXJpbiI",
      "name": "Notizzettel",
      "type": "n8n-nodes-base.stickyNote",
      "notes": "© 2025 Lucas Peyrin",
      "creator": "Lucas Peyrin",
      "position": [
        -624,
        912
      ],
      "parameters": {
        "color": 7,
        "width": 294,
        "height": 316,
        "content": "\n\n\n\n\n\n\n\n\n\n\n\n1. [In Google AI Studio](https://aistudio.google.com/app/apikey) click **“Create API key in new project”** and copy it.\n\n2. Open the ```Connect Gemini``` node:\n   * **Select Credential → Create New**\n   * Paste into **API Key** and **Save**\n"
      },
      "typeVersion": 1
    },
    {
      "id": "d75d53de-6040-4620-b102-0621829c0666",
      "cid": "Ikx1Y2FzIFBleXJpbiI",
      "name": "AI-Qualifikation",
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "notes": "© 2025 Lucas Peyrin",
      "creator": "Lucas Peyrin",
      "position": [
        -416,
        704
      ],
      "parameters": {
        "text": "=<goal>\nYour primary goal is to evaluate a candidate's CV against the provided job requirements for the Senior Frontend Developer position. You must determine if the prospect is qualified and produce a raw JSON output containing a qualification score and a detailed, evidence-based explanation for that score.\n</goal>\n\n<context>\n<job_requirements>\n\n# Position Profile: Senior Frontend Developer\n\nJob Title: Senior Frontend Developer\nLocation: Remote (US-based)\n\nAbout the Role:\nWe are looking for an experienced and passionate Senior Frontend Developer to join our core product team. You will be responsible for building and maintaining the user-facing components of our flagship SaaS platform, ensuring a seamless, responsive, and high-performance user experience. You will collaborate closely with UI/UX designers, product managers, and backend engineers to bring new features to life and mentor other developers on the team.\n\nKey Responsibilities:\n- Develop, test, and deploy high-quality, scalable, and user-friendly web applications using React and TypeScript.\n- Collaborate with cross-functional teams to define, design, and ship new features.\n- Mentor junior and mid-level developers through code reviews, pair programming, and technical guidance.\n- Optimize applications for maximum speed, scalability, and accessibility.\n- Ensure the technical feasibility of UI/UX designs and maintain a high standard of code quality.\n- Stay up-to-date with emerging technologies and advocate for their adoption where it makes sense.\n\n# EVALUATION CRITERIA\n\n## Core Requirements (Must-Haves)\n\n- Experience: 5+ years of professional experience in frontend development.\n- Project Leadership: Proven experience leading frontend projects from conception to completion.\n- JavaScript/TypeScript: Expert-level proficiency in modern JavaScript (ES6+) and TypeScript.\n- Framework Expertise: Deep, hands-on experience with React.\n- State Management: Strong experience with state management libraries such as Redux, Zustand, or React Query.\n- Styling: Proficiency in modern CSS, including CSS-in-JS (e.g., Styled Components) or utility-first CSS (e.g., Tailwind CSS).\n- API Integration: Extensive experience consuming RESTful or GraphQL APIs.\n- Testing: Solid experience with frontend testing frameworks like Jest and React Testing Library.\n- Version Control: Mastery of Git and collaborative workflows (e.g., GitFlow).\n- Communication: Excellent written and verbal communication skills (assessed through the clarity and professionalism of the CV).\n\n## Preferred Qualifications (Nice-to-Haves)\n\n- Meta-Frameworks: Experience with Next.js or a similar framework.\n- Backend Knowledge: Familiarity with Node.js and server-side development.\n- CI/CD: Experience setting up and maintaining CI/CD pipelines (e.g., GitHub Actions, Vercel).\n- Design Acumen: A strong eye for UI/UX design.\n- Performance Tuning: Experience with web performance optimization tools like Lighthouse.\n\n</job_requirements>\n\n<qualifiaction>\n# How I Evaluate\nI operate based on a strict set of evaluation criteria provided for a specific role. My analysis is broken down into two main categories: \"Core Requirements\" (which are non-negotiable) and \"Preferred Qualifications\" (which act as bonuses). My final output is a qualification score and a detailed justification, citing specific evidence from the candidate's CV.\n\n# Evaluation Logic\n- The `qualificationRate` is a score from 0.0 to 1.0.\n- **Core Requirements** are critical. A candidate missing one or more core requirements cannot score above 0.6. A candidate meeting all core requirements should score at least 0.75.\n- **Preferred Qualifications** are bonuses. Each met preferred qualification adds to the score, pushing it closer to 1.0.\n- The `explanation` must be a detailed, point-by-point analysis, justifying the score by citing evidence (or lack thereof) from the CV for each requirement.\n</qualifiaction>\n</context>\n\n<output_format>\nYou must produce a single, raw JSON object. Do not add any conversational text, greetings, or explanations outside of the JSON structure. The JSON object must strictly adhere to the following format:\n```json\n{\n  \"explanation\": \"<string>\",\n  \"qualificationRate\": <number>\n}\n```\n</output_format>\n</instructions>",
        "batching": {},
        "messages": {
          "messageValues": [
            {
              "message": "You are the AI Hiring Assistant, a specialized AI agent designed to meticulously analyze and evaluate candidate CVs against specific job requirements. Your personality is professional, objective, and detail-oriented. You provide clear, evidence-based assessments to support hiring decisions."
            }
          ]
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 1.7
    }
  ],
  "pinData": {},
  "connections": {
    "8af8707e-de1b-4687-8d7a-c853dfec2b31": {
      "main": [
        [
          {
            "node": "7f185e06-146b-4949-a2b9-c840f1fbf556",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "3b04b67b-d4dc-44e6-90e1-d239dbbc40d1": {
      "main": [
        [
          {
            "node": "d75d53de-6040-4620-b102-0621829c0666",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "d75d53de-6040-4620-b102-0621829c0666": {
      "main": [
        [
          {
            "node": "d4aa8091-6577-44b5-9541-c0cc87f83e93",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "cb5ef831-79f7-4129-9642-6ece79a3603e": {
      "main": [
        [
          {
            "node": "3b04b67b-d4dc-44e6-90e1-d239dbbc40d1",
            "type": "main",
            "index": 0
          },
          {
            "node": "483377db-ede2-4dcb-8ce0-a77b9f9d1b09",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "05672977-b212-4dc6-9315-9d2c191c43a6": {
      "ai_outputParser": [
        [
          {
            "node": "d75d53de-6040-4620-b102-0621829c0666",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "e94d6fac-a882-4573-a52d-11a90b15302f": {
      "ai_languageModel": [
        [
          {
            "node": "d75d53de-6040-4620-b102-0621829c0666",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    }
  }
}
Häufig gestellte Fragen

Wie verwende ich diesen Workflow?

Kopieren Sie den obigen JSON-Code, erstellen Sie einen neuen Workflow in Ihrer n8n-Instanz und wählen Sie "Aus JSON importieren". Fügen Sie die Konfiguration ein und passen Sie die Anmeldedaten nach Bedarf an.

Für welche Szenarien ist dieser Workflow geeignet?

Experte - Personalwesen, Multimodales KI

Ist es kostenpflichtig?

Dieser Workflow ist völlig kostenlos. Beachten Sie jedoch, dass Drittanbieterdienste (wie OpenAI API), die im Workflow verwendet werden, möglicherweise kostenpflichtig sind.

Workflow-Informationen
Schwierigkeitsgrad
Experte
Anzahl der Nodes18
Kategorie2
Node-Typen8
Schwierigkeitsbeschreibung

Für fortgeschrittene Benutzer, komplexe Workflows mit 16+ Nodes

Autor
Lucas Peyrin

Lucas Peyrin

@lucaspeyrin

Innovative builder with a passion for crafting automation solutions that solve real-world challenges. From streamlining workflows to driving efficiency, my work empowers teams and individuals to achieve more with less effort. Experienced in developing scalable tools and strategies that deliver results with n8n, supabase and cline.

Externe Links
Auf n8n.io ansehen

Diesen Workflow teilen

Kategorien

Kategorien: 34