{
  "name": "Auto-hunt_feedback",
  "nodes": [
    {
      "parameters": {
        "operation": "get",
        "documentURL": "YOUR_CV_DOC_HERE"
      },
      "id": "0e1aa9f9-902d-4619-bc57-e0fe6b6af203",
      "name": "Reading Grand CV",
      "type": "n8n-nodes-base.googleDocs",
      "typeVersion": 2,
      "position": [
        160,
        432
      ],
      "credentials": {
        "googleDocsOAuth2Api": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "folderId": "=YOUR_FOLDER_NAME_HERE",
        "title": "=CV for {{ $('get job').item.json.job_title }}"
      },
      "id": "02496ab3-b141-447e-ac8f-3c0451b6ad30",
      "name": "Create a CV",
      "type": "n8n-nodes-base.googleDocs",
      "typeVersion": 2,
      "position": [
        512,
        256
      ],
      "credentials": {
        "googleDocsOAuth2Api": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "promptType": "define",
        "text": "=ROLE:\nAct as a Senior Recruiter and ATS optimization specialist with 15+ years of experience screening and tailoring CVs for health-tech roles.\n\nINPUTS:\nMy Grand CV:\n{{ $(\"Reading Grand CV\").item.json.content }}\n\nJob Title (The Job I Want):\n{{ $('get job').item.json.job_title }}\n\nJob Description:\n{{ $('get job').item.json.job_description }}\n\nPROCESS (think through these steps internally before producing the final CV):\n\nSTEP 1 \u2014 Extract JD requirements:\n- List the hard skills, tools, certifications, and technologies explicitly required or preferred.\n- List the soft skills and competencies emphasized (e.g. \"cross-functional leadership\", \"stakeholder management\").\n- List the exact keywords/phrases an ATS would scan for (job titles, methodologies, regulatory terms, industry jargon \u2014 e.g. \"HIPAA\", \"EHR\", \"clinical workflows\", \"agile\", \"FDA 510(k)\").\n- Note the seniority level and core responsibilities implied.\n\nSTEP 2 \u2014 Map Grand CV to JD:\n- For each experience entry in the Grand CV, identify which JD requirements it supports.\n- Prioritize experience, projects, and skills that have the STRONGEST and MOST DIRECT match to the JD \u2014 not just keyword overlap, but genuine relevance of scope and seniority.\n- Where the Grand CV contains multiple similar entries (e.g. two product roles), select the one with closer domain/tech/seniority match; do not include both unless both are highly relevant.\n- Identify transferable skills/experience that aren't an exact match but support the JD's underlying needs.\n- Flag and OMIT entries, skills, or details with no relevance to this JD.\n\nSTEP 3 \u2014 Rewrite for keyword alignment:\n- Where the Grand CV already contains an accomplishment relevant to a JD requirement, rephrase it (without fabricating facts) to mirror the JD's terminology/keywords, so ATS matching is maximized.\n- Do not invent skills, tools, metrics, employers, dates, or experience that are not present in the Grand CV. Only rephrase or re-emphasize what already exists.\n- If a JD requirement has no support anywhere in the Grand CV, do not fabricate it \u2014 simply do not claim it.\n\nSTEP 4 \u2014 Structure the CV:\n- Order sections by what is most decision-relevant to THIS JD (e.g. if the JD is heavily technical, lead with Skills/Technical Summary before Experience; if it's leadership-focused, lead with a Summary highlighting leadership scope).\n- Within Experience, order bullet points per role so the most JD-relevant accomplishments appear first.\n- Keep a concise professional summary (3-4 lines) at the top that mirrors the job title and top 2-3 JD keywords.\n\nGUIDELINES:\n1. ATS-friendly: standard section headers, no tables/columns/graphics that break parsing, keyword-rich but natural-sounding language (no keyword stuffing).\n2. Do not exceed the length/density of the original Grand CV entries \u2014 tighten, don't pad.\n3. Maintain factual accuracy at all times; tailoring means selection and phrasing, never invention.\n\nFORMAT:\n1. No conversation before or after the task \u2014 output only the CV.\n2. Use the exact Grand CV format (section structure, layout style).\n3. Text formatting: bold and blue titles, exactly as per the Grand CV model.\n4. Output only the final tailored CV \u2014 do not show Steps 1-3 reasoning in the output.",
        "options": {}
      },
      "id": "a6207f6d-0362-489b-96bf-e0d944eead84",
      "name": "AI Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "typeVersion": 3.1,
      "position": [
        784,
        256
      ]
    },
    {
      "parameters": {
        "amount": 7
      },
      "id": "89871507-cace-419d-a342-f5b308abb89d",
      "name": "Wait1",
      "type": "n8n-nodes-base.wait",
      "typeVersion": 1.1,
      "position": [
        1200,
        256
      ]
    },
    {
      "parameters": {
        "operation": "update",
        "documentURL": "={{ $('Create a CV').item.json.id }}",
        "actionsUi": {
          "actionFields": [
            {
              "action": "insert",
              "text": "={{ $json.output }}"
            }
          ]
        }
      },
      "id": "017ba150-d233-45bf-8535-ebb68edc7397",
      "name": "Update CV",
      "type": "n8n-nodes-base.googleDocs",
      "typeVersion": 2,
      "position": [
        1424,
        256
      ],
      "credentials": {
        "googleDocsOAuth2Api": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "amount": 7
      },
      "id": "7a1bebd6-617a-46c5-85cf-1aa6b881c6e8",
      "name": "Wait",
      "type": "n8n-nodes-base.wait",
      "typeVersion": 1.1,
      "position": [
        1648,
        256
      ]
    },
    {
      "parameters": {
        "operation": "download",
        "fileId": {
          "__rl": true,
          "value": "={{ $('Create a CV').item.json.id }}",
          "mode": "id"
        },
        "options": {
          "binaryPropertyName": "data",
          "googleFileConversion": {
            "conversion": {
              "docsToFormat": "application/pdf"
            }
          },
          "fileName": "={{ $('Create a CV').item.json.name }}.pdf"
        }
      },
      "id": "f4a8597e-3239-4562-8bf5-2864c89d47b2",
      "name": "D- new CV",
      "type": "n8n-nodes-base.googleDrive",
      "typeVersion": 3,
      "position": [
        1872,
        256
      ],
      "credentials": {
        "googleDriveOAuth2Api": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "amount": 7
      },
      "id": "fc573cee-ab54-47f2-9655-83fc978d1655",
      "name": "Wait3",
      "type": "n8n-nodes-base.wait",
      "typeVersion": 1.1,
      "position": [
        2096,
        256
      ]
    },
    {
      "parameters": {},
      "id": "71c2d20b-1e73-480b-bbad-4631d74bf771",
      "name": "Merge1",
      "type": "n8n-nodes-base.merge",
      "typeVersion": 3.2,
      "position": [
        2320,
        448
      ]
    },
    {
      "parameters": {
        "folderId": "=YOUR_FOLDER_NAME_HERE",
        "title": "=CL for {{ $('get job').item.json.job_title }}"
      },
      "id": "1fbeb66c-9073-47de-8a30-7e7bc5d0129f",
      "name": "Create a CL",
      "type": "n8n-nodes-base.googleDocs",
      "typeVersion": 2,
      "position": [
        512,
        656
      ],
      "credentials": {
        "googleDocsOAuth2Api": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "promptType": "define",
        "text": "=ROLE:\nAct as a Senior Recruiter and professional cover letter writer, skilled at connecting a candidate's real experience to a specific role's requirements in a compelling, concise narrative.\n\nINPUTS:\nMy Grand CV:\n{{ $node[\"Reading Grand CV\"].json.content }}\n\nJob Title:\n{{ $('get job').item.json.job_title }}\n\nJob Description:\n{{ $('get job').item.json.job_description }}\n\nToday's Date:\n{{ $now }}\n\nPROCESS (internal \u2014 do not show in output):\n1. Identify the 2-4 most important requirements/priorities in the Job Description (the things this employer clearly cares about most \u2014 e.g. a specific domain, leadership scope, technical skill, regulatory experience).\n2. From the Grand CV, select the strongest, most directly relevant accomplishments and experience that map to those priorities. Prefer specific, quantifiable achievements over generic claims.\n3. Identify natural keyword overlaps between the JD's language and the Grand CV's actual content, and use the JD's phrasing where it accurately reflects real experience.\n4. Do not invent any skill, achievement, employer, metric, or experience not present in the Grand CV. If a JD requirement isn't supported by the Grand CV, do not claim it \u2014 instead, lean on adjacent/transferable strengths that are genuinely there.\n\nCONTENT GUIDELINES:\n- Opening paragraph: state the job title being applied for and a one-line hook tied to the candidate's strongest relevant qualification.\n- Body (1-2 paragraphs): connect 2-3 concrete pieces of real experience/achievement from the Grand CV directly to the role's priorities. Be specific, not generic \u2014 use real numbers, projects, or outcomes from the Grand CV where available.\n- Closing paragraph: brief statement of enthusiasm/fit and a call to action (e.g. welcoming further discussion/interview).\n- Tone: confident, professional, warm \u2014 not robotic or overly formal. Avoid clich\u00e9s (\"team player\", \"hard worker\", \"passionate about innovation\") unless backed by specific evidence.\n- Length: 250-350 words, 3-4 paragraphs total, single page.\n\nFORMAT (strict):\n1. Start with: Name / Email / Date (using {{ $now }} for the date).\n2. No salutation line beyond standard business letter convention (e.g. \"Dear Hiring Manager,\" or addressed to the company if named in the JD).\n3. End the letter with the closing line and signature: \"Dr. Mohammed Almojtaba Mahdy\".\n4. No preamble or postamble \u2014 output only the finished cover letter, nothing before or after it.\n5. Standard business letter formatting throughout.",
        "options": {}
      },
      "id": "ba17979c-2b5b-4c08-aed6-a828eacbafdc",
      "name": "AI Agent1",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "typeVersion": 3.1,
      "position": [
        768,
        656
      ]
    },
    {
      "parameters": {
        "amount": 7
      },
      "id": "4db4b673-2c74-426d-a9b4-bd2e95198a5e",
      "name": "Wait2",
      "type": "n8n-nodes-base.wait",
      "typeVersion": 1.1,
      "position": [
        1200,
        656
      ]
    },
    {
      "parameters": {
        "operation": "update",
        "documentURL": "={{ $('Create a CL').item.json.id }}",
        "actionsUi": {
          "actionFields": [
            {
              "action": "insert",
              "text": "={{ $json.output }}"
            }
          ]
        }
      },
      "id": "10d901cd-8d60-455f-8bd5-5377bd24a653",
      "name": "Update a CL",
      "type": "n8n-nodes-base.googleDocs",
      "typeVersion": 2,
      "position": [
        1424,
        656
      ],
      "credentials": {
        "googleDocsOAuth2Api": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "amount": 7
      },
      "id": "84ed9c72-6ffa-43c2-8b79-bf122cac8f17",
      "name": "Wait7",
      "type": "n8n-nodes-base.wait",
      "typeVersion": 1.1,
      "position": [
        1648,
        656
      ]
    },
    {
      "parameters": {
        "operation": "download",
        "fileId": {
          "__rl": true,
          "value": "={{ $('Create a CL').item.json.id }}",
          "mode": "id"
        },
        "options": {
          "binaryPropertyName": "data",
          "googleFileConversion": {
            "conversion": {
              "docsToFormat": "application/pdf"
            }
          },
          "fileName": "={{ $('Create a CL').item.json.name }}.pdf"
        }
      },
      "id": "1eab3be1-3a08-48db-b0f3-ca7278a3b35a",
      "name": "D- new CL",
      "type": "n8n-nodes-base.googleDrive",
      "typeVersion": 3,
      "position": [
        1872,
        656
      ],
      "credentials": {
        "googleDriveOAuth2Api": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "amount": 7
      },
      "id": "7f6f78d9-32ff-48b8-836f-588228fe056a",
      "name": "Wait4",
      "type": "n8n-nodes-base.wait",
      "typeVersion": 1.1,
      "position": [
        2096,
        656
      ]
    },
    {
      "parameters": {
        "operation": "sendDocument",
        "chatId": "YOUR_CHAT_ID_HERE",
        "binaryData": true,
        "additionalFields": {}
      },
      "id": "312f3d74-612b-43b7-ac93-3eae92dc24fa",
      "name": "Send a document1",
      "type": "n8n-nodes-base.telegram",
      "typeVersion": 1.2,
      "position": [
        2544,
        448
      ],
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "height": 1168,
        "width": 2832,
        "color": 5
      },
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        0,
        0
      ],
      "typeVersion": 1,
      "id": "ac3199e5-f927-4a68-9410-cb6525f257c1",
      "name": "Sticky Note"
    },
    {
      "parameters": {
        "updates": [
          "callback_query"
        ],
        "additionalFields": {}
      },
      "type": "n8n-nodes-base.telegramTrigger",
      "typeVersion": 1.3,
      "position": [
        -1792,
        1104
      ],
      "id": "1357b697-859f-4776-b4a0-6fb99d489856",
      "name": "Telegram Trigger",
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "rules": {
          "values": [
            {
              "conditions": {
                "options": {
                  "caseSensitive": true,
                  "leftValue": "",
                  "typeValidation": "strict",
                  "version": 3
                },
                "conditions": [
                  {
                    "id": "f81a2db5-c5c6-4ab5-ac10-8eea37b81cff",
                    "leftValue": "={{ $('action and id').item.json.action }}",
                    "rightValue": "cvcl",
                    "operator": {
                      "type": "string",
                      "operation": "equals",
                      "name": "filter.operator.equals"
                    }
                  }
                ],
                "combinator": "and"
              },
              "renameOutput": true,
              "outputKey": "cvcl"
            },
            {
              "conditions": {
                "options": {
                  "caseSensitive": true,
                  "leftValue": "",
                  "typeValidation": "strict",
                  "version": 3
                },
                "conditions": [
                  {
                    "leftValue": "={{ $('action and id').item.json.action }}",
                    "rightValue": "apply",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "id": "e5cb3d42-e4b0-4b36-9206-6605b1c61192"
                  }
                ],
                "combinator": "and"
              },
              "renameOutput": true,
              "outputKey": "applied"
            },
            {
              "conditions": {
                "options": {
                  "caseSensitive": true,
                  "leftValue": "",
                  "typeValidation": "strict",
                  "version": 3
                },
                "conditions": [
                  {
                    "id": "2fefb4e2-a78a-4a8b-8ec6-8a30a7a4f106",
                    "leftValue": "={{ $('action and id').item.json.action }}",
                    "rightValue": "delete",
                    "operator": {
                      "type": "string",
                      "operation": "equals",
                      "name": "filter.operator.equals"
                    }
                  }
                ],
                "combinator": "and"
              }
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.switch",
      "typeVersion": 3.4,
      "position": [
        -480,
        1088
      ],
      "id": "6f0e7552-4d2f-4b44-9f52-428eb5d1a012",
      "name": "Switch"
    },
    {
      "parameters": {
        "resource": "callback",
        "queryId": "={{ $('Telegram Trigger').item.json.callback_query.id }}",
        "additionalFields": {}
      },
      "type": "n8n-nodes-base.telegram",
      "typeVersion": 1.2,
      "position": [
        -1504,
        1104
      ],
      "id": "e93af453-9a56-4c1b-8c92-fc248ef145f3",
      "name": "Answer Query a callback",
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "documentId": {
          "__rl": true,
          "value": "=YOUR_DEDUPLICATION_GOOGLE_SHEET_ID",
          "mode": "id"
        },
        "sheetName": {
          "__rl": true,
          "value": "gid=0",
          "mode": "list",
          "cachedResultName": "Sheet1",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/YOUR_GOOGLE_SHEET_ID_JOBS/edit#gid=0"
        },
        "filtersUI": {
          "values": [
            {
              "lookupColumn": "job_id",
              "lookupValue": "={{ $('action and id').item.json.job_id }}"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.googleSheets",
      "typeVersion": 4.7,
      "position": [
        -896,
        1104
      ],
      "id": "ceeb3e8b-ee4f-4d85-9c8f-9139123a2c4a",
      "name": "get job",
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "75e4c896-b864-49ad-a67d-a0c99551c27d",
              "name": "=action",
              "value": "={{ $('Telegram Trigger').item.json.callback_query.data.split('|')[0] }}",
              "type": "string"
            },
            {
              "id": "4101f9a3-fd00-4bdd-bfc4-2130aef01e99",
              "name": "job_id",
              "value": "={{ $('Telegram Trigger').item.json.callback_query.data.split('|')[1] }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        -1264,
        1104
      ],
      "id": "90856c32-f28c-4613-8ba3-7946b83a00b8",
      "name": "action and id"
    },
    {
      "parameters": {
        "operation": "append",
        "documentId": {
          "__rl": true,
          "value": "=YOUR_APPLIED_FOR_GOOGLE_SHEET_ID",
          "mode": "id"
        },
        "sheetName": {
          "__rl": true,
          "value": "gid=0",
          "mode": "list",
          "cachedResultName": "Sheet1",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/YOUR_GOOGLE_SHEET_ID_FEEDBACK/edit#gid=0"
        },
        "columns": {
          "mappingMode": "defineBelow",
          "value": {
            "job_id": "={{ $('get job').item.json.job_id }}",
            "job_title": "={{ $('get job').item.json.job_title }}",
            "company": "={{ $('get job').item.json.company }}",
            "date_applied": "={{ $now.format('yyyy-MM-dd') }}",
            "status": "No results",
            "follow_up": "daily"
          },
          "matchingColumns": [],
          "schema": [
            {
              "id": "job_id",
              "displayName": "job_id",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "job_title",
              "displayName": "job_title",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "company",
              "displayName": "company",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "date_applied",
              "displayName": "date_applied",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "status",
              "displayName": "status",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "follow_up",
              "displayName": "follow_up",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "notes",
              "displayName": "notes",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": true
            }
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {}
      },
      "type": "n8n-nodes-base.googleSheets",
      "typeVersion": 4.7,
      "position": [
        176,
        1328
      ],
      "id": "3277ad23-15e3-4c0f-94c2-61d45f30205f",
      "name": "Add job",
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "chatId": "YOUR_CHAT_ID_HERE",
        "text": "=The job: \n{{ $('get job').item.json.job_title }}\n\nat: \n{{ $('get job').item.json.company }}\n\nwas successfuly added to your 'Applied for' sheet.",
        "additionalFields": {}
      },
      "id": "fb61e5ff-3ed8-4a65-be95-0e02c2b95fd6",
      "name": "notify with addition",
      "type": "n8n-nodes-base.telegram",
      "typeVersion": 1.2,
      "position": [
        640,
        1328
      ],
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "operation": "deleteMessage",
        "chatId": "YOUR_CHAT_ID_HERE",
        "messageId": "={{ $('Telegram Trigger').item.json.callback_query.message.message_id }}"
      },
      "id": "06dd704e-a6ec-47b5-95ab-d4ddb292e9b7",
      "name": "Delete Telegram msg",
      "type": "n8n-nodes-base.telegram",
      "typeVersion": 1.2,
      "position": [
        176,
        1728
      ],
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "content": "# Applied - Add to applied sheet",
        "height": 272,
        "width": 1200,
        "color": 5
      },
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        0,
        1248
      ],
      "typeVersion": 1,
      "id": "03e4fc04-51b2-49b3-9c66-21a92bc6ab7e",
      "name": "Sticky Note1"
    },
    {
      "parameters": {
        "content": "# Delete - Delete message",
        "height": 352,
        "width": 1200,
        "color": 5
      },
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        16,
        1584
      ],
      "typeVersion": 1,
      "id": "b47b6d53-9239-48b1-9dba-b5d1377d8b2f",
      "name": "Sticky Note2"
    },
    {
      "parameters": {
        "content": "",
        "height": 352,
        "width": 1216,
        "color": 5
      },
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1936,
        1008
      ],
      "typeVersion": 1,
      "id": "4adc97c9-e1d8-4bef-9c8d-da6938bee4fa",
      "name": "Sticky Note3"
    },
    {
      "parameters": {
        "model": {
          "__rl": true,
          "value": "gpt-4.1-mini",
          "mode": "list",
          "cachedResultName": "gpt-4.1-mini"
        },
        "builtInTools": {},
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "typeVersion": 1.3,
      "position": [
        752,
        432
      ],
      "id": "797976ba-8804-44f5-8a22-9a8a93feaefb",
      "name": "OpenAI Chat Model",
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "model": {
          "__rl": true,
          "value": "gpt-4.1-mini",
          "mode": "list",
          "cachedResultName": "gpt-4.1-mini"
        },
        "builtInTools": {},
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "typeVersion": 1.3,
      "position": [
        768,
        848
      ],
      "id": "76780d25-430a-4de0-9e9f-7d2d721ea3e7",
      "name": "OpenAI Chat Model1",
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "content": "![Auto-Hunt](https://www.kawtheron.tech/github/autohunt_banner.png)\n\n### \ud83c\udfaf What this does\nTriggered from Telegram \u2014 generates a tailored CV & cover letter for a job posting using AI, tracks what you've applied to, and keeps your chat clean.\n\n**Flow:** Telegram button tap \u2192 route by action \u2192 AI Agent tailors CV/CL from your master CV \u2192 save to Drive \u2192 send back via Telegram\n\n| Stage | Node group |\n|---|---|\n| \ud83e\udd16 Generate | AI Agent + Google Docs (CV & CL) |\n| \ud83d\udce4 Deliver | Send document via Telegram |\n| \u2705 Track | Logs applied jobs to a separate Google Sheet |\n| \ud83d\uddd1\ufe0f Clean up | Deletes Telegram messages for jobs you skip \u2014 no clutter |\n\n**Why the separate sheet:** keeps an applied-jobs log distinct from the raw job feed, so you always know what you've actually applied to.",
        "height": 784,
        "width": 1200,
        "color": 5
      },
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1936,
        -16
      ],
      "typeVersion": 1,
      "id": "f9737a16-0bd6-400d-a81d-1e2e0011bbe9",
      "name": "Sticky Note4"
    }
  ],
  "connections": {
    "Reading Grand CV": {
      "main": [
        [
          {
            "node": "Create a CV",
            "type": "main",
            "index": 0
          },
          {
            "node": "Create a CL",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create a CV": {
      "main": [
        [
          {
            "node": "AI Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI Agent": {
      "main": [
        [
          {
            "node": "Wait1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait1": {
      "main": [
        [
          {
            "node": "Update CV",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update CV": {
      "main": [
        [
          {
            "node": "Wait",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait": {
      "main": [
        [
          {
            "node": "D- new CV",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "D- new CV": {
      "main": [
        [
          {
            "node": "Wait3",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait3": {
      "main": [
        [
          {
            "node": "Merge1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Merge1": {
      "main": [
        [
          {
            "node": "Send a document1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create a CL": {
      "main": [
        [
          {
            "node": "AI Agent1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI Agent1": {
      "main": [
        [
          {
            "node": "Wait2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait2": {
      "main": [
        [
          {
            "node": "Update a CL",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update a CL": {
      "main": [
        [
          {
            "node": "Wait7",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait7": {
      "main": [
        [
          {
            "node": "D- new CL",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "D- new CL": {
      "main": [
        [
          {
            "node": "Wait4",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait4": {
      "main": [
        [
          {
            "node": "Merge1",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Telegram Trigger": {
      "main": [
        [
          {
            "node": "Answer Query a callback",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Answer Query a callback": {
      "main": [
        [
          {
            "node": "action and id",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Switch": {
      "main": [
        [
          {
            "node": "Reading Grand CV",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Add job",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Delete Telegram msg",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "action and id": {
      "main": [
        [
          {
            "node": "get job",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "get job": {
      "main": [
        [
          {
            "node": "Switch",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Add job": {
      "main": [
        [
          {
            "node": "notify with addition",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model1": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent1",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1",
    "binaryMode": "separate"
  },
  "versionId": "064565f1-4550-47a8-b56b-d0120cfa039e",
  "nodeGroups": [],
  "id": "nISh4zN44nLiUQa6",
  "tags": []
}