{
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "f219ec62-6397-4c00-81c9-50fb88bb54d8",
      "name": "Sticky Note29",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2016,
        7328
      ],
      "parameters": {
        "width": 400,
        "height": 1040,
        "content": "## \u2699\ufe0f Setup Instructions\n\n### 1\ufe0f\u20e3 Set Up OpenAI Connection\n1. Go to [OpenAI Platform](https://platform.openai.com/api-keys)  \n2. Navigate to [OpenAI Billing](https://platform.openai.com/settings/organization/billing/overview)  \n3. Add funds to your billing account  \n4. Copy your API key into the **OpenAI credentials** in n8n  \n\n### 2\ufe0f\u20e3 gotoHuman \u2014 Install, Configure, and Map\n1. **Install the node (if needed)**  \n   - n8n \u2192 **Settings \u2192 Community Nodes \u2192 Install**  \n   - Package: `@gotohuman/n8n-nodes-gotohuman`\n2. **Create a gotoHuman account & API key**  \n   - Save your API key in n8n Credentials as **gotoHuman API**.\n3. **Create a Review Template in gotoHuman**  \n   - Include fields for **Resume (text)**, **Summary (text)**, and **Rating (number)**.  \n   - Copy the **Template ID** (e.g., `SLFm3wk8I1kGuEmRbmIr`).\n4. **Configure the node (`Send review request and wait for response`)**  \n   - **Credential:** your gotoHuman API credential  \n   - **Review Template ID:** paste your template ID  \n   - **Fields \u2192 Mapping (Define Below):**  \n     - `Resume`  \u2192 `{{$('Extract from File').item.json.text}}`  \n     - `Summary` \u2192 `{{$json.output.summary}}`  \n     - `Rating`  \u2192 `{{$json.output.score}}`  \n   - **Schema** should contain:\n     - `Resume (string)`, `Summary (string)`, `Rating (number)`  \n   - This node **waits** until a human completes the review, then resumes the workflow with the reviewed payload.\n\n---\n\n## \ud83d\udcec Contact Information\nNeed help customizing this workflow or building similar automations?\n\n\ud83d\udce7 [robert@ynteractive.com](mailto:robert@ynteractive.com)  \n\ud83d\udd17 [Robert Breen](https://www.linkedin.com/in/robert-breen-29429625/)  \n\ud83c\udf10 [ynteractive.com](https://ynteractive.com)\n"
      },
      "typeVersion": 1
    },
    {
      "id": "8465c2d8-5b6b-45f2-89be-ccbe2de1836b",
      "name": "Sticky Note30",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1568,
        7328
      ],
      "parameters": {
        "color": 7,
        "width": 1104,
        "height": 1040,
        "content": "# \ud83e\uddd1\u200d\u2696\ufe0f Resume Reviewer with Human-in-the-Loop (n8n + OpenAI + gotoHuman)\n\nUpload a **PDF resume** via an n8n Form. The workflow extracts text, compares it to a preloaded **Job Description**, generates a **match score (0\u2013100)** and **summary**, then sends everything to **gotoHuman** for **human review/approval** before continuing.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "859df55b-f278-4808-bd71-317979f52757",
      "name": "Structured Output Parser7",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        -752,
        8096
      ],
      "parameters": {
        "jsonSchemaExample": "{\n\t\"summary\": \"summary\", \n  \"score\": 50\n}"
      },
      "typeVersion": 1.3
    },
    {
      "id": "6b3475d6-3cc2-4ad2-9e02-c96182e851d2",
      "name": "OpenAI Chat Model9",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        -1088,
        8096
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o-mini",
          "cachedResultName": "gpt-4o-mini"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "17bb899c-521f-44cf-86d7-16b480a86ad9",
      "name": "Sticky Note31",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1184,
        7920
      ],
      "parameters": {
        "color": 3,
        "width": 288,
        "height": 304,
        "content": "### 1\ufe0f\u20e3 Set Up OpenAI Connection\n1. Go to [OpenAI Platform](https://platform.openai.com/api-keys)  \n2. Navigate to [OpenAI Billing](https://platform.openai.com/settings/organization/billing/overview)  \n3. Add funds to your billing account  \n4. Copy your API key into the **OpenAI credentials** in n8n  "
      },
      "typeVersion": 1
    },
    {
      "id": "e9722877-b1f4-4bd1-ba22-1900f3df04b7",
      "name": "Set Job Description",
      "type": "n8n-nodes-base.set",
      "position": [
        -1472,
        8112
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "86221d8e-18d1-4a37-9ffe-b31db3a3441d",
              "name": "Job Description",
              "type": "string",
              "value": "n8n Specialist \u2014 Job Description Role Summary  We\u2019re looking for an n8n Specialist to design, build, and maintain automation workflows and AI-driven agents that integrate across our stack (Google Workspace, Microsoft 365/Outlook, Slack, HubSpot/Pipedrive, Apify, Twilio, Google Sheets/BigQuery, Supabase/Postgres, etc.). You\u2019ll translate business processes into reliable, scalable n8n workflows\u2014owning the full lifecycle from discovery and design to implementation, testing, monitoring, and documentation.  Responsibilities  Workflow Design & Delivery  Map business processes into modular n8n workflows, subflows, and reusable nodes.  Build robust integrations with REST/GraphQL APIs, webhooks, OAuth2, and queues.  Implement error handling, retries, rate-limit strategies, and idempotency.  AI & Agents  Orchestrate OpenAI/Gemini calls, prompt templates, tools, memory, and RAG patterns.  Govern costs, latency, and quality; add guardrails and fallback paths.  Data & Integrations  Connect to data sources (Google Sheets, SQL, Postgres, BigQuery, Supabase).  Normalize/transform data (JSON, CSV, XML); ensure schema/version control.  Reliability & Ops  Set up logging/monitoring/alerting (e.g., n8n telemetry, Sentry, Datadog).  Package and deploy (Docker/Self-host/Cloud); manage environment variables/credentials.  Write clear docs, runbooks, and handoff guides.  Collaboration  Partner with stakeholders to define requirements, SLAs, and success metrics.  Provide enablement and light training to non-technical users.  Required Qualifications  2\u20135+ years building automations with n8n (self-hosted and/or cloud).  Strong API skills: REST, OAuth2, webhooks, pagination, auth patterns.  Practical experience integrating tools like Google Workspace, Microsoft 365/Outlook, Slack, CRMs, Apify, Twilio, Stripe, etc.  Comfortable with JavaScript/TypeScript (for Code nodes) and basic Python/SQL.  Solid grasp of error handling, retries, state management, and rate limits.  Version control with Git; familiarity with Docker and CI/CD.  Security-first mindset: secrets management, least privilege, PII handling.  Nice-to-Have  RAG stacks (e.g., Supabase/Postgres, file stores, embeddings).  Cloud exposure (GCP/AWS/Azure), queues (Pub/Sub, SQS), and caching.  BI/reporting familiarity (Looker Studio, Power BI, Tableau) to validate outputs.  Experience building internal libraries/templates for n8n nodes.  Monitoring/observability (Prometheus/Grafana, Datadog).  Success Metrics (KPIs)  Workflow reliability (success rate, MTTR).  Lead-time from spec \u2192 deployed automation.  Reduction in manual effort/cycle time for target processes.  Cost and latency of AI calls; unit test coverage on critical flows.  Stakeholder satisfaction and adoption.  Interview Process  Intro Call (culture, role fit)  Technical Deep Dive (n8n design patterns, API auth, debugging)  Practical Exercise (build/extend a small n8n workflow; handle errors)  Final (stakeholder walkthrough, architecture discussion)  Employment Details  Location: Remote (ET preferred)  Type: Full-time (Contract-to-hire considered)  Compensation: Competitive; based on experience  Benefits: Health, 401(k), PTO, remote stipend (varies by region)"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "79464f83-0f0c-4a22-bc55-b910cef5cccc",
      "name": "Review Resume",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        -1152,
        7648
      ],
      "parameters": {
        "text": "=Job Description: {{ $json['Job Description'] }}  Resume: {{ $('Extract from File').item.json.text }}",
        "options": {
          "systemMessage": "compare the resume against the job description and give a value between 0 and 100 for how well it matches up with the job description. Also output a summary of the resume with the points that most closely match the description. Should be one paragraph and bullet points. \n\noutput like this.. \n\n{\n\t\"summary\": \"summary\", \n  \"score\": 50\n}"
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 2.2
    },
    {
      "id": "5f3df688-952f-4e56-b039-c5dc2ba63cea",
      "name": "Extract from File",
      "type": "n8n-nodes-base.extractFromFile",
      "position": [
        -1472,
        7856
      ],
      "parameters": {
        "options": {},
        "operation": "pdf",
        "binaryPropertyName": "Resume"
      },
      "typeVersion": 1
    },
    {
      "id": "1801b535-fed0-46d4-87e4-e9ad4acdbd7f",
      "name": "Sticky Note32",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -816,
        7584
      ],
      "parameters": {
        "color": 3,
        "width": 288,
        "height": 272,
        "content": "### 2\ufe0f\u20e3 gotoHuman \u2014 Install, Configure, and Map"
      },
      "typeVersion": 1
    },
    {
      "id": "315b6245-9075-431f-86c0-d7f4fac259b1",
      "name": "Send to GoToHuman",
      "type": "@gotohuman/n8n-nodes-gotohuman.gotoHuman",
      "position": [
        -720,
        7680
      ],
      "parameters": {
        "fields": {
          "value": {
            "Rating": "={{ $json.output.score }}",
            "Resume": "={{ $('Extract from File').item.json.text }}",
            "Summary": "={{ $json.output.summary }}"
          },
          "schema": [
            {
              "id": "Resume",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Resume (text)",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Summary",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Summary (text)",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Rating",
              "type": "number",
              "display": true,
              "required": false,
              "displayName": "Rating (number)",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "additionalFields": {},
        "reviewTemplateID": {
          "__rl": true,
          "mode": "list",
          "value": "SLFm3wk8I1kGuEmRbmIr",
          "cachedResultName": "My Review Step (SLFm3wk8I1kGuEmRbmIr)"
        }
      },
      "credentials": {
        "gotoHumanApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "379cf4a0-45d9-4ca7-8178-a13332c5be25",
      "name": "Resume Submission",
      "type": "n8n-nodes-base.formTrigger",
      "position": [
        -1488,
        7616
      ],
      "parameters": {
        "options": {},
        "formTitle": "Resume - PDF Only",
        "formFields": {
          "values": [
            {
              "fieldType": "file",
              "fieldLabel": "Resume",
              "acceptFileTypes": ".pdf"
            }
          ]
        }
      },
      "typeVersion": 2.2
    }
  ],
  "connections": {
    "Review Resume": {
      "main": [
        [
          {
            "node": "Send to GoToHuman",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract from File": {
      "main": [
        [
          {
            "node": "Set Job Description",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Resume Submission": {
      "main": [
        [
          {
            "node": "Extract from File",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send to GoToHuman": {
      "main": [
        []
      ]
    },
    "OpenAI Chat Model9": {
      "ai_languageModel": [
        [
          {
            "node": "Review Resume",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Set Job Description": {
      "main": [
        [
          {
            "node": "Review Resume",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Structured Output Parser7": {
      "ai_outputParser": [
        [
          {
            "node": "Review Resume",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    }
  }
}