{
  "id": "MJAQXQZIbhboIVGG",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Tensai Resume Pro (Template)",
  "tags": [],
  "nodes": [
    {
      "id": "c1f79b83-7d82-4e45-b162-d1a2ee9446a0",
      "name": "On form submission",
      "type": "n8n-nodes-base.formTrigger",
      "position": [
        -2112,
        720
      ],
      "parameters": {
        "options": {
          "appendAttribution": false,
          "respondWithOptions": {
            "values": {
              "formSubmittedText": "\u2705 Your response has been recorded. Please check your inbox for the generated resume."
            }
          }
        },
        "formTitle": "ATS Optimised Resume Modifier",
        "formFields": {
          "values": [
            {
              "fieldLabel": "Company Name",
              "placeholder": "Enter Company Name",
              "requiredField": true
            },
            {
              "fieldType": "textarea",
              "fieldLabel": "Job Desription",
              "placeholder": "Enter Job Description here",
              "requiredField": true
            },
            {
              "fieldType": "checkbox",
              "fieldLabel": "Generate cover letter",
              "fieldOptions": {
                "values": [
                  {
                    "option": "Required"
                  }
                ]
              }
            },
            {
              "fieldType": "dropdown",
              "fieldLabel": "ATS Type",
              "defaultValue": "Global ATS",
              "fieldOptions": {
                "values": [
                  {
                    "option": "Global ATS \ud83c\udf0d"
                  },
                  {
                    "option": "German ATS \ud83c\udde9\ud83c\uddea"
                  },
                  {
                    "option": "Japanese ATS \ud83c\uddef\ud83c\uddf5"
                  }
                ]
              },
              "requiredField": true
            }
          ]
        },
        "formDescription": "Tool designed to help users create resumes that are highly compatible with Applicant Tracking Systems (ATS). It automatically analyzes, optimizes, and formats your resume to ensure it passes automated screening"
      },
      "typeVersion": 2.3
    },
    {
      "id": "03e80df1-1c82-4887-994f-be212fe44176",
      "name": "Get PDF Data Only",
      "type": "n8n-nodes-base.set",
      "position": [
        -896,
        720
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "ccd95b23-ca0d-4e0a-a2af-c0e4fc9aae4e",
              "name": "text",
              "type": "string",
              "value": "={{ $json.text }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "c3e96009-3b80-4e4a-bf0e-d769caabe557",
      "name": "Get PDF Files/File",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        -1504,
        720
      ],
      "parameters": {
        "filter": {
          "folderId": {
            "__rl": true,
            "mode": "list",
            "value": "",
            "cachedResultUrl": "",
            "cachedResultName": ""
          },
          "whatToSearch": "files"
        },
        "options": {
          "fields": [
            "id",
            "name"
          ]
        },
        "resource": "fileFolder",
        "returnAll": true,
        "queryString": "*.pdf"
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "5cf1ea83-3db6-4477-8d90-f7eee673b44a",
      "name": "Download Retrieval Files/File",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        -1312,
        720
      ],
      "parameters": {
        "fileId": {
          "__rl": true,
          "mode": "id",
          "value": "",
          "cachedResultUrl": "",
          "cachedResultName": ""
        },
        "options": {
          "googleFileConversion": {
            "conversion": {
              "docsToFormat": "text/plain"
            }
          }
        },
        "operation": "download"
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "339aa4f3-2793-4d6f-8650-0fd83701edcb",
      "name": "Extract Files/File's Data",
      "type": "n8n-nodes-base.extractFromFile",
      "position": [
        -1088,
        720
      ],
      "parameters": {
        "options": {},
        "operation": "pdf"
      },
      "typeVersion": 1
    },
    {
      "id": "b721b70e-ea9d-4133-af02-e670c4022083",
      "name": "Data Parser & Cleaner",
      "type": "n8n-nodes-base.code",
      "position": [
        -720,
        720
      ],
      "parameters": {
        "jsCode": "// Get the text from the previous node\nconst inputText = $input.first()?.json?.text ?? \"\";\n\n// Clean the text:\n// - Replace Windows and Unix line breaks\n// - Collapse multiple spaces into one\n// - Trim leading/trailing whitespace\nconst cleanedText = inputText\n  .replace(/\\r?\\n/g, \" \")\n  .replace(/\\s+/g, \" \")\n  .trim();\n\n// Return the cleaned text\nreturn [\n  {\n    json: {\n      cleanedText,\n    },\n  },\n];"
      },
      "typeVersion": 2
    },
    {
      "id": "14fc8009-02b6-4726-9f36-a1750982d657",
      "name": "HTML to PDF",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        64,
        720
      ],
      "parameters": {
        "url": "https://api.pdf.co/v1/pdf/convert/from/html",
        "method": "POST",
        "options": {
          "response": {
            "response": {
              "responseFormat": "json"
            }
          }
        },
        "sendBody": true,
        "sendHeaders": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "html",
              "value": "={{ $json.content.parts[0].text }}"
            },
            {
              "name": "async",
              "value": "false"
            }
          ]
        },
        "headerParameters": {
          "parameters": [
            {
              "name": "x-api-key",
              "value": "YOUR API KEY HERE"
            },
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "072003d6-4bc0-4257-b6b9-5e47c98c8ae9",
      "name": "Send a message",
      "type": "n8n-nodes-base.gmail",
      "position": [
        2416,
        704
      ],
      "parameters": {
        "sendTo": "user@example.com",
        "message": "=<!DOCTYPE html>\n<html>\n<head>\n<meta charset=\"UTF-8\">\n<title>Your ATS Resume is Ready</title>\n\n<style>\nbody{\n    margin:0;\n    padding:30px;\n    background:#f3f6fb;\n    font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,Arial,sans-serif;\n    color:#1f2937;\n}\n\n.email{\n    max-width:700px;\n    margin:auto;\n    background:#ffffff;\n    border-radius:16px;\n    overflow:hidden;\n    box-shadow:0 15px 45px rgba(0,0,0,.08);\n}\n\n.header{\n    background:linear-gradient(135deg,#2563eb,#1d4ed8);\n    padding:35px;\n    text-align:center;\n    color:#fff;\n}\n\n.header h1{\n    margin:0;\n    font-size:28px;\n    font-weight:700;\n}\n\n.content{\n    padding:35px;\n}\n\n.section-title{\n    font-size:17px;\n    font-weight:700;\n    color:#111827;\n    margin-bottom:12px;\n}\n\n.company{\n    color:#2563eb;\n    font-weight:700;\n}\n\n.card{\n    background:#f8fafc;\n    border:1px solid #e5e7eb;\n    border-radius:12px;\n    padding:20px;\n    margin-top:18px;\n}\n\n.download-btn{\n    display:inline-block;\n    margin-top:18px;\n    padding:14px 28px;\n    background:#2563eb;\n    color:#ffffff !important;\n    text-decoration:none;\n    border-radius:10px;\n    font-weight:600;\n    font-size:15px;\n}\n\n.download-btn:hover{\n    background:#1d4ed8;\n}\n\n.cover-letter{\n    margin-top:15px;\n    background:#fafafa;\n    border-left:5px solid #2563eb;\n    border:1px solid #e5e7eb;\n    border-radius:10px;\n    padding:18px;\n    white-space:pre-wrap;\n    line-height:1.75;\n    font-size:14px;\n}\n\n.warning{\n    margin-top:30px;\n    background:#fff7ed;\n    border:1px solid #fed7aa;\n    border-radius:10px;\n    padding:18px;\n    color:#92400e;\n    font-size:14px;\n}\n\n.divider{\n    height:1px;\n    background:#e5e7eb;\n    margin:30px 0;\n}\n\n.footer{\n    margin-top:35px;\n    background:#f9fafb;\n    text-align:center;\n    padding:25px;\n    font-size:13px;\n    color:#6b7280;\n}\n\n.footer a{\n    color:#2563eb;\n    text-decoration:none;\n    font-weight:600;\n}\n\n.footer a:hover{\n    text-decoration:underline;\n}\n</style>\n\n</head>\n\n<body>\n\n<div class=\"email\">\n\n<div class=\"header\">\n<h1>Your ATS Resume is Ready!</h1>\n</div>\n\n<div class=\"content\">\n\n<p>Hello,</p>\n\n<p>\nYour resume has been successfully optimized for\n<strong class=\"company\">\n{{ $('On form submission').item.json['Company Name'] }}\n</strong>.\n</p>\n\n<p>\nYour ATS-ready resume is now available for download.\n</p>\n\n<div class=\"card\">\n\n<div class=\"section-title\">\n\ud83d\udcc4 Optimized Resume\n</div>\n\n<p>\nClick the button below to download your optimized resume.\n</p>\n\n<a class=\"download-btn\"\nhref=\"{{ $('HTML to PDF').first().json.url }}\"\ntarget=\"_blank\">\n\nDownload Resume\n\n</a>\n\n</div>\n\n<div class=\"divider\"></div>\n\n<div class=\"section-title\">\nCover Letter\n</div>\n\n<div class=\"cover-letter\">\n{{ $json.content.parts[0].text }}\n</div>\n\n<div class=\"warning\">\n\n<strong>Important</strong><br><br>\n\n\u2022 Your download link will expire in <strong>30 minutes</strong>.<br>\n\n\u2022 AI-generated documents should always be reviewed before submitting them to employers.<br>\n\n\u2022 Please verify names, dates, contact information, and formatting before applying.\n\n</div>\n\n</div>\n\n<div class=\"footer\">\n\nGenerated with \u2764\ufe0f using <strong>Tensai Resume Pro</strong><br><br>\n\n<a href=\"https://n8n.io/creators/hellopaul/\" target=\"_blank\">\nn8n.io/creators/hellopaul\n</a>\n\n</div>\n\n</div>\n\n</body>\n</html>",
        "options": {
          "appendAttribution": false
        },
        "subject": "=ATS optimised Resume for {{ $('On form submission').item.json[\"Company Name\"] }}"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "150e26f0-6829-439d-84ec-06829a6eb9de",
      "name": "Merge",
      "type": "n8n-nodes-base.merge",
      "position": [
        2176,
        704
      ],
      "parameters": {
        "mode": "combine",
        "options": {},
        "combineBy": "combineAll"
      },
      "typeVersion": 3.2,
      "alwaysOutputData": true
    },
    {
      "id": "30a28f24-1ec7-4d60-bbf7-8f1e08607ac4",
      "name": "Switch",
      "type": "n8n-nodes-base.switch",
      "position": [
        -1520,
        160
      ],
      "parameters": {
        "rules": {
          "values": [
            {
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "2f49e5bc-ef73-43a4-b8b2-824cccb9d915",
                    "operator": {
                      "type": "string",
                      "operation": "exists",
                      "singleValue": true
                    },
                    "leftValue": "={{ $json[\"Generate cover letter\"][0] }}",
                    "rightValue": "={{ $json[\"Generate cover letter\"][0] }}"
                  }
                ]
              }
            }
          ]
        },
        "options": {}
      },
      "typeVersion": 3.3,
      "alwaysOutputData": true
    },
    {
      "id": "5f07cbb8-e99d-4ff1-98ee-7e42ec7d6c02",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1536,
        352
      ],
      "parameters": {
        "color": 3,
        "width": 368,
        "height": 528,
        "content": "## File Input\n**Fetches uploaded PDF(s) from the form submission for further processing.**\n**Converts uploaded PDF(s) into readable text data.**\n\n**Make Insure to create a Folder with resume as .pdf in google drive and update in the respective fields.**  "
      },
      "typeVersion": 1
    },
    {
      "id": "3747d864-706f-4693-9ab5-e85c3c650e7f",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1136,
        352
      ],
      "parameters": {
        "color": 7,
        "width": 560,
        "height": 528,
        "content": "## Text Extractor \n**Cleans and extracts plain text content from uploaded resumes or job descriptions.**\n\n## Data Filter\n**Keeps only resume text for ATS optimization and removes unwanted data.**\n\n## Data Cleaner\n**Polishes extracted text for clear, structured AI input.**"
      },
      "typeVersion": 1
    },
    {
      "id": "cb9433fd-b13d-4d89-a760-a84cf2175dd2",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -416,
        416
      ],
      "parameters": {
        "color": 3,
        "width": 608,
        "height": 496,
        "content": "## AI Resume Optimizer\n**Enhances the resume for ATS compliance and keyword relevance.**\n\n## PDF Convertor\n**Converts the AI Agents output to .pdf format**\n\nInsert the Gemini API Key in the Agent credential node.\nInsert the pdf.co API key in the value parameter of header section.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "f82951a7-a21c-4e6c-9163-7314d7221537",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1536,
        32
      ],
      "parameters": {
        "color": 7,
        "width": 368,
        "height": 288,
        "content": "## Logic Switch\n**Checks which inputs are available and routes workflow accordingly.**"
      },
      "typeVersion": 1
    },
    {
      "id": "c45b7b18-3d1f-410e-9f19-113883e7915e",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        0,
        -112
      ],
      "parameters": {
        "color": 3,
        "width": 384,
        "height": 448,
        "content": "## AI Cover Letter Writer\n**Creates a personalized, ATS-friendly cover letter.**\n\n**Insert the Gemini API key in Agent credential node.**"
      },
      "typeVersion": 1
    },
    {
      "id": "199b00ae-4f6f-481d-b904-0b7d29c557f6",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2304,
        496
      ],
      "parameters": {
        "color": 3,
        "width": 352,
        "height": 384,
        "content": "## Email Sender\n**Delivers the generated documents to the user\u2019s email inbox.** \n\n**Connect Your Gmail credentials with n8n and set the email receiver address in the field**\n"
      },
      "typeVersion": 1
    },
    {
      "id": "9156f278-329b-4eb2-a2df-0883ab1d2f55",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2176,
        512
      ],
      "parameters": {
        "color": 7,
        "width": 304,
        "height": 384,
        "content": "## Trigger Node \n**Starts the workflow when a user submits the form with Name of the company, Job Description and optional cover letter.**"
      },
      "typeVersion": 1
    },
    {
      "id": "b81afba7-5856-4fe9-8379-dca289edc42f",
      "name": "Create a database page",
      "type": "n8n-nodes-base.notion",
      "position": [
        1712,
        720
      ],
      "parameters": {
        "options": {},
        "resource": "databasePage",
        "databaseId": {
          "__rl": true,
          "mode": "list",
          "value": "",
          "cachedResultUrl": "",
          "cachedResultName": ""
        },
        "propertiesUi": {
          "propertyValues": [
            {},
            {},
            {}
          ]
        }
      },
      "credentials": {
        "notionApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "fa6f7e36-f30f-4425-83af-43f9e1606323",
      "name": "Get many database pages",
      "type": "n8n-nodes-base.notion",
      "position": [
        976,
        720
      ],
      "parameters": {
        "simple": false,
        "options": {},
        "resource": "databasePage",
        "operation": "getAll",
        "returnAll": true,
        "databaseId": {
          "__rl": true,
          "mode": "list",
          "value": "",
          "cachedResultUrl": "",
          "cachedResultName": ""
        }
      },
      "credentials": {
        "notionApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "e2d3bfe3-00e3-4890-93cd-610b2cf8baa6",
      "name": "Generate Serial Number",
      "type": "n8n-nodes-base.set",
      "position": [
        1488,
        720
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "426b148b-d85c-46a6-bf13-e3d4862c2203",
              "name": "property_sl_no",
              "type": "number",
              "value": "={{ $node[\"Code in JavaScript\"].json[\"total_count\"] + 1 }}\n"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "d7b0bec1-7218-4847-abdc-46cc764b9de2",
      "name": "Upload file",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        736,
        720
      ],
      "parameters": {
        "name": "={{ $json.name }}",
        "driveId": {
          "__rl": true,
          "mode": "list",
          "value": "",
          "cachedResultUrl": "",
          "cachedResultName": ""
        },
        "options": {},
        "folderId": {
          "__rl": true,
          "mode": "list",
          "value": "",
          "cachedResultUrl": "",
          "cachedResultName": ""
        }
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "0268415c-b218-4352-9e81-d88af12c3f63",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        704,
        544
      ],
      "parameters": {
        "color": 3,
        "width": 1168,
        "height": 352,
        "content": "## Optional\nConnect your Notion Credential to log all modified resumes into a database.\n \n"
      },
      "typeVersion": 1
    },
    {
      "id": "a95753f0-a03d-48c7-a279-91ab60d27698",
      "name": "Code in JavaScript",
      "type": "n8n-nodes-base.code",
      "position": [
        1216,
        720
      ],
      "parameters": {
        "jsCode": "const count = $items(\"Get many database pages\").length;\nreturn [{ json: { total_count: count, next_sl_no: count + 1 } }];\n\n"
      },
      "typeVersion": 2
    },
    {
      "id": "9aa96948-ba72-44eb-9e84-3be4aa64ae94",
      "name": "Global ATS AI",
      "type": "@n8n/n8n-nodes-langchain.googleGemini",
      "position": [
        -272,
        720
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "",
          "cachedResultUrl": "",
          "cachedResultName": ""
        },
        "options": {},
        "messages": {
          "values": [
            {
              "content": "=You are an ATS Resume Optimizer AI Agent. \nTake resume data {{ $json.cleanedText }} and job description {{ $('On form submission').item.json['Job Desription'] }} as input. \n\nAnalyze the job description and optimize the resume to increase its ATS compatibility by emphasizing relevant skills, keywords, and experiences. \n\nReturn the optimized resume as **pure HTML**, not inside any Markdown code block.  \nDo not include ```html or ``` anywhere in the output.\n\nFormatting requirements:\n- The candidate\u2019s **name** should appear at the top, bold and large.\n- **Email, phone number, and location** should be centered directly below the name.\n- Use clear headings for *Skills*, *Experience*, *Education*, etc.\n- Keep the entire resume strictly **one page**.\n- Do **not** include a summary section.\n- Use clean spacing, professional fonts, and simple HTML (no CSS frameworks).\n- Output must contain **only raw HTML code** \u2014 no Markdown, no explanations, no extra text.\n"
            }
          ]
        },
        "builtInTools": {}
      },
      "credentials": {
        "googlePalmApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "fb367c3d-4f44-4ed4-8003-c50e73a0f0cb",
      "name": "German ATS AI",
      "type": "@n8n/n8n-nodes-langchain.googleGemini",
      "position": [
        -256,
        1200
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "",
          "cachedResultUrl": "",
          "cachedResultName": ""
        },
        "options": {},
        "messages": {
          "values": [
            {
              "content": "=You are a German Resume (Lebenslauf) AI Agent.\n\nTake resume data {{ $json.cleanedText }} and job description {{ $('On form submission').item.json['Job Desription'] }} as input.\n\nAnalyze the job description and convert the resume into a professional German-style Lebenslauf while preserving factual accuracy. Optimize the resume to align with German hiring expectations and ATS systems.\n\nFollow German hiring conventions:\n- Use a structured reverse chronological format.\n- Emphasize measurable achievements and relevant experience.\n- Keep descriptions concise and professional.\n- Include sections for Personal Information, Professional Experience, Education, Skills, Certifications, Languages, and Technical Skills.\n- Do not include a career summary or objective unless explicitly present in the original resume.\n- Do not invent information.\n- Keep the resume concise and limited to one page whenever possible.\n- Use professional European resume formatting.\n\nReturn the resume as **pure HTML**, not inside any Markdown code block.\nDo not include ```html or ``` anywhere in the output.\n\nFormatting requirements:\n- Candidate name should appear prominently at the top.\n- Email, phone number, and location should appear directly below the name.\n- Use clear headings for each section.\n- Maintain professional spacing and alignment.\n- Use only simple HTML.\n- Do not use CSS frameworks.\n- Output must contain only raw HTML code with no explanations or Markdown."
            }
          ]
        },
        "builtInTools": {}
      },
      "credentials": {
        "googlePalmApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "8a048ff2-97b4-43fc-90b6-a156bc11bcc4",
      "name": "Japanese Rirekisho ATS",
      "type": "@n8n/n8n-nodes-langchain.googleGemini",
      "position": [
        -240,
        1632
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "",
          "cachedResultUrl": "",
          "cachedResultName": ""
        },
        "options": {},
        "messages": {
          "values": [
            {
              "content": "=You are a Japanese Resume (Rirekisho) AI Agent.\n\nTake resume data {{ $json.cleanedText }} and job description {{ $('On form submission').item.json['Job Desription'] }} as input.\n\nAnalyze the job description and convert the resume into a professional Japanese-style Rirekisho while preserving factual accuracy. Adapt the candidate's experience, skills, and achievements to maximize relevance for the target position.\n\nFollow Japanese hiring conventions:\n- Use a clean and structured Rirekisho layout.\n- Prioritize chronological work history.\n- Keep descriptions concise and factual.\n- Avoid exaggerated claims or marketing language.\n- Use professional, modest wording suitable for Japanese employers.\n- Include sections for Personal Information, Education, Employment History, Skills, Certifications, Languages, and Qualifications.\n- Do not invent information.\n- If information required by a traditional Rirekisho is unavailable, omit the section instead of fabricating data.\n- Keep the document strictly one page.\n\nReturn the resume as **pure HTML**, not inside any Markdown code block.\nDo not include ```html or ``` anywhere in the output.\n\nFormatting requirements:\n- Candidate name should appear prominently at the top.\n- Email, phone number, and location should appear below the name.\n- Use clear headings.\n- Maintain generous spacing and excellent readability.\n- Use only simple HTML.\n- Do not use CSS frameworks.\n- Output must contain only raw HTML code with no explanations or Markdown."
            }
          ]
        },
        "builtInTools": {}
      },
      "credentials": {
        "googlePalmApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "1ee8873e-ba5b-4cd6-8b50-07c8394d47d0",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -416,
        976
      ],
      "parameters": {
        "color": 3,
        "width": 608,
        "height": 400,
        "content": "## German Resume Generator\nConverts the resume into a professional German **Lebenslauf**\n\n### User Action Required\nInput Gemini API credential inside the node"
      },
      "typeVersion": 1
    },
    {
      "id": "176413b7-b7c8-4db4-ac7f-06fb2fde5ba5",
      "name": "Sticky Note9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -416,
        1408
      ],
      "parameters": {
        "color": 3,
        "width": 608,
        "height": 400,
        "content": "## Japanese Resume Generator\nConverts the resume into a traditional Japanese **Rirekisho** \n\n### User Action Required\nInput Gemini API credential inside the node"
      },
      "typeVersion": 1
    },
    {
      "id": "15b5a67b-9430-4f76-a9bd-81a4f5519687",
      "name": "Switch1",
      "type": "n8n-nodes-base.switch",
      "position": [
        -544,
        704
      ],
      "parameters": {
        "rules": {
          "values": [
            {
              "conditions": {
                "options": {
                  "version": 3,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "01ae9baf-cbf1-4651-96bc-6f334de21052",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $('On form submission').item.json['ATS Type'] }}",
                    "rightValue": "Global ATS \ud83c\udf0d"
                  }
                ]
              }
            },
            {
              "conditions": {
                "options": {
                  "version": 3,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "251ac08e-add6-49c3-b488-fb36b8f480d3",
                    "operator": {
                      "name": "filter.operator.equals",
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $('On form submission').item.json['ATS Type'] }}",
                    "rightValue": "German ATS \ud83c\udde9\ud83c\uddea"
                  }
                ]
              }
            },
            {
              "conditions": {
                "options": {
                  "version": 3,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "f97ce078-3d92-46df-a647-cc7b460ff647",
                    "operator": {
                      "name": "filter.operator.equals",
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $('On form submission').item.json['ATS Type'] }}",
                    "rightValue": "Japanese ATS \ud83c\uddef\ud83c\uddf5"
                  }
                ]
              }
            }
          ]
        },
        "options": {}
      },
      "typeVersion": 3.4
    },
    {
      "id": "ec344e1e-90d4-41d6-8b7b-72e932a63c54",
      "name": "Sticky Note10",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -3552,
        336
      ],
      "parameters": {
        "width": 928,
        "height": 576,
        "content": "# \ud83d\ude80 Tensai Resume Pro\n\nTensai Resume Pro is an AI-powered resume optimization workflow that transforms resumes into **ATS-compliant, recruiter-ready documents** tailored to a specific job description. It supports **Global ATS**, **German ATS**, and **Japanese Rirekisho** resume standards, with an optional AI-generated cover letter localized for the selected region.\n\n## \u2728 Features\n\n- \ud83d\udcc4 Extracts text from uploaded PDF resumes\n- \ud83e\udd16 Optimizes resumes using AI based on the target job description\n- \ud83c\udf0d Supports **Global ATS**, **German ATS**, and **Japanese Rirekisho** resume formats\n- \u2709\ufe0f Generates localized AI cover letters (optional)\n- \ud83d\udcd1 Converts AI-generated HTML into professional PDF resumes\n- \u2601\ufe0f Uploads generated resumes to Google Drive\n- \ud83d\uddc3\ufe0f Logs generated resumes to Notion (optional)\n- \ud83d\udce7 Emails the optimized resume and cover letter directly to the user\n\n## \ud83d\udcdd Workflow Notes\n\n- \ud83d\udd34 **Red sections** contain nodes that require **user configuration**, such as API keys, credentials, or external service setup.\n\n- \u2705 Compatible with both **n8n Cloud** and **Self-Hosted** deployments."
      },
      "typeVersion": 1
    },
    {
      "id": "92ce3db5-2e61-42de-9ecc-e571f8158411",
      "name": "Cover Letter Agent",
      "type": "@n8n/n8n-nodes-langchain.googleGemini",
      "position": [
        64,
        144
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "",
          "cachedResultUrl": "",
          "cachedResultName": ""
        },
        "options": {},
        "messages": {
          "values": [
            {
              "content": "=You are an expert international career coach and professional cover letter writer.\n\nJob Description:\n{{ $('On form submission').item.json['Job Desription'] }}\n\nCompany:\n{{ $('On form submission').item.json['Company Name'] }}\n\nThe applicant selected the following resume standard:\n\n{{ $('On form submission').item.json['ATS Type'] }}\n\nGenerate the cover letter according to these rules.\n\n------------------------------------\nIf ATS Type = \"Global ATS \ud83c\udf0d\"\n\n- Write the cover letter in English.\n- Follow international ATS standards.\n- Keep it between 250\u2013350 words.\n- Use a modern business tone.\n- Highlight measurable achievements.\n- Include ATS keywords naturally.\n- Finish with a professional call to action.\n\n------------------------------------\nIf ATS Type = \"German ATS \ud83c\udde9\ud83c\uddea\"\n\n- Write the entire cover letter in German.\n- Follow the traditional German Bewerbung style.\n- Use a formal tone (\"Sehr geehrte Damen und Herren\" if no recruiter is known).\n- Structure the letter according to German business conventions.\n- Emphasize qualifications, reliability and relevant experience.\n- End with a formal German closing such as \"Mit freundlichen Gr\u00fc\u00dfen\".\n\n------------------------------------\nIf ATS Type = \"Japanese ATS \ud83c\uddef\ud83c\uddf5\"\n\n- Write the entire cover letter in Japanese.\n- Follow Japanese Shokumu-keirekisho / Japanese cover letter conventions.\n- Use highly respectful and formal Japanese business language.\n- Maintain humility and professionalism.\n- Focus on contribution to the company rather than self-promotion.\n- End using an appropriate Japanese business closing.\n\n------------------------------------\n\nGeneral Rules\n\n- Never invent experience.\n- Tailor the letter specifically to the job description.\n- Mention the company naturally.\n- Return ONLY the cover letter as plain text.\n- No Markdown.\n- No explanations."
            }
          ]
        },
        "builtInTools": {}
      },
      "credentials": {
        "googlePalmApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "3a8b8292-acb5-4348-9422-8807b698a0af",
      "name": "Download as PDF",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        416,
        720
      ],
      "parameters": {
        "url": "={{ $json.url }}",
        "options": {}
      },
      "typeVersion": 4.2
    },
    {
      "id": "07b5361c-dfce-4c0a-8799-426b83ea930f",
      "name": "If user request Cover Letter",
      "type": "n8n-nodes-base.if",
      "position": [
        -1312,
        160
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "270a48d0-e4b5-4166-85fe-b415d39db4b9",
              "operator": {
                "type": "string",
                "operation": "exists",
                "singleValue": true
              },
              "leftValue": "={{ $json[\"Generate cover letter\"][0] }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.2
    }
  ],
  "active": false,
  "settings": {
    "binaryMode": "separate",
    "availableInMCP": false,
    "executionOrder": "v1"
  },
  "versionId": "caea55d9-130f-435f-a778-dfb983b48db8",
  "nodeGroups": [],
  "connections": {
    "Merge": {
      "main": [
        [
          {
            "node": "Send a message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Switch": {
      "main": [
        [
          {
            "node": "If user request Cover Letter",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Switch1": {
      "main": [
        [
          {
            "node": "Global ATS AI",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "German ATS AI",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Japanese Rirekisho ATS",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTML to PDF": {
      "main": [
        [
          {
            "node": "Download as PDF",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Upload file": {
      "main": [
        [
          {
            "node": "Get many database pages",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "German ATS AI": {
      "main": [
        [
          {
            "node": "HTML to PDF",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Global ATS AI": {
      "main": [
        [
          {
            "node": "HTML to PDF",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Download as PDF": {
      "main": [
        [
          {
            "node": "Upload file",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get PDF Data Only": {
      "main": [
        [
          {
            "node": "Data Parser & Cleaner",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Code in JavaScript": {
      "main": [
        [
          {
            "node": "Generate Serial Number",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Cover Letter Agent": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get PDF Files/File": {
      "main": [
        [
          {
            "node": "Download Retrieval Files/File",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "On form submission": {
      "main": [
        [
          {
            "node": "Get PDF Files/File",
            "type": "main",
            "index": 0
          },
          {
            "node": "Switch",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Data Parser & Cleaner": {
      "main": [
        [
          {
            "node": "Switch1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create a database page": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Generate Serial Number": {
      "main": [
        [
          {
            "node": "Create a database page",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Japanese Rirekisho ATS": {
      "main": [
        [
          {
            "node": "HTML to PDF",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get many database pages": {
      "main": [
        [
          {
            "node": "Code in JavaScript",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract Files/File's Data": {
      "main": [
        [
          {
            "node": "Get PDF Data Only",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "If user request Cover Letter": {
      "main": [
        [
          {
            "node": "Cover Letter Agent",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Download Retrieval Files/File": {
      "main": [
        [
          {
            "node": "Extract Files/File's Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}