<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Caíque Gaspar</title>
    <description>The latest articles on Forem by Caíque Gaspar (@caique_gaspar).</description>
    <link>https://forem.com/caique_gaspar</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3763252%2F8b2a7cf9-1e6b-4030-94f9-c06700cfa4f7.jpg</url>
      <title>Forem: Caíque Gaspar</title>
      <link>https://forem.com/caique_gaspar</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/caique_gaspar"/>
    <language>en</language>
    <item>
      <title>Fiz engenharia reversa de sistemas ATS e descobri por que seu currículo nunca passa da triagem automática</title>
      <dc:creator>Caíque Gaspar</dc:creator>
      <pubDate>Tue, 10 Feb 2026 03:39:37 +0000</pubDate>
      <link>https://forem.com/caique_gaspar/fiz-engenharia-reversa-de-sistemas-ats-e-descobri-por-que-seu-curriculo-nunca-passa-da-triagem-4584</link>
      <guid>https://forem.com/caique_gaspar/fiz-engenharia-reversa-de-sistemas-ats-e-descobri-por-que-seu-curriculo-nunca-passa-da-triagem-4584</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fob7qemm641jxxh1lj9gx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fob7qemm641jxxh1lj9gx.png" alt="ERROR: Unable to parse candidate resume STATUS: REJECTED" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Fiz engenharia reversa de sistemas ATS e documentei tudo em 33 páginas — por que seu currículo nunca passa da triagem.&lt;/p&gt;

&lt;p&gt;Você aplica pra 50 vagas, tem a stack perfeita, mas recebe silêncio absoluto.&lt;/p&gt;

&lt;p&gt;O problema não é seu código.&lt;br&gt;
É o parser que lê seu currículo antes de qualquer humano ver.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;O problema&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Sistemas como Gupy, Workday, Greenhouse e Lever não leem currículos como pessoas.&lt;/p&gt;

&lt;p&gt;Eles fazem parsing do arquivo, extraem entidades (nome, datas, skills) e atribuem um score baseado em densidade de keywords, vetores semânticos e heurísticas estatísticas.&lt;/p&gt;

&lt;p&gt;Seu currículo é tratado como um payload que precisa ser perfeitamente interpretado pelo pipeline de triagem.&lt;/p&gt;

&lt;p&gt;E a maioria falha silenciosamente.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;O que descobri&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Passei as últimas semanas estudando como esses sistemas funcionam.&lt;br&gt;
Não li artigos de coach — li código-fonte.&lt;/p&gt;

&lt;p&gt;OpenCATS (open source), documentação de APIs, testes com parsers reais, análise de NLP (BERT, Word2Vec), regex patterns e tokenização.&lt;/p&gt;

&lt;p&gt;Abaixo estão alguns bugs que eliminam candidatos qualificados sem que eles saibam.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;1. UTF-8 BOM quebra parsers silenciosamente&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;ERROR: Unable to parse candidate resume&lt;br&gt;
TOKEN: undefined&lt;/p&gt;

&lt;p&gt;Se você salvou o .docx com BOM (Byte Order Mark), alguns parsers legados simplesmente falham.&lt;br&gt;
Sem erro. Sem log. Sem aviso.&lt;/p&gt;

&lt;p&gt;Você nem sabe que foi rejeitado.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;2. “React” ≠ “ReactJS” ≠ “React.js”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;São três tokens diferentes para sistemas baseados em regex.&lt;/p&gt;

&lt;p&gt;Se a vaga pede “React” e você escreveu “ReactJS”, o match pode ser zero em ATS legados.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;3. Layout de duas colunas causa text interleaving&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;O parser lê linha por linha, da esquerda pra direita.&lt;/p&gt;

&lt;p&gt;Se você tem sidebar, o texto das colunas é concatenado de forma alternada:&lt;/p&gt;

&lt;p&gt;“Desenvolvedor Python Telefone: (11) 99999-9999&lt;br&gt;
com 5 anos Email: &lt;a href="mailto:dev@example.com"&gt;dev@example.com&lt;/a&gt; de experiência…”&lt;/p&gt;

&lt;p&gt;O NLP não entende nada disso.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;4. PDF com fontes não embarcadas falha em OCR&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Se a fonte não está embarcada, o sistema usa uma fallback.&lt;/p&gt;

&lt;p&gt;Resultado: caracteres trocados, texto corrompido e keywords perdidas.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;5. A última linha do resumo “vaza” pra experiência&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Parsers baseados em regex cortam seções procurando padrões como “Experience” ou “Experiência”.&lt;/p&gt;

&lt;p&gt;Se a keyword que você precisa está na transição entre seções, ela pode ser associada ao bloco errado.&lt;/p&gt;

&lt;p&gt;Isso se chama context bleed — e pode ser explorado.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;6. Metadados vazios no core.xml&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;O parser lê os metadados do .docx antes do corpo do texto.&lt;/p&gt;

&lt;p&gt;Se dc:title, dc:keywords e dc:description estão vazios, você perde peso algorítmico logo na primeira fase.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Stack de análise&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Usei parsers open source como OpenCATS (Ruby + regex), ferramentas de NLP como spaCy e NLTK para Named Entity Recognition, embeddings com Word2Vec, análise de tokens, normalização UTF-8 e regex patterns.&lt;/p&gt;

&lt;p&gt;As plataformas analisadas incluíram Gupy, Workday e Greenhouse, a partir de documentação pública e comportamento observado.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;O que eu fiz&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Compilei tudo em um manual técnico de 33 páginas.&lt;/p&gt;

&lt;p&gt;Não é curso.&lt;br&gt;
Não é motivacional.&lt;br&gt;
É documentação de engenharia reversa.&lt;/p&gt;

&lt;p&gt;O material cobre:&lt;/p&gt;

&lt;p&gt;– Como parsers legacy (regex), modernos (NLP) e híbridos (LLM) funcionam&lt;br&gt;
– Data scraping de keywords a partir de vagas reais&lt;br&gt;
– Metadata injection editando o core.xml do .docx&lt;br&gt;
– Context bleed entre seções&lt;br&gt;
– Normalização de tokens e encoding UTF-8 sem BOM&lt;br&gt;
– Fórmula XYZ para bullets com impacto quantificável&lt;br&gt;
– Diferenças regionais entre Brasil, EUA e Europa&lt;br&gt;
– A/B testing de currículos&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Bônus&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Incluí um Prompt Mestre v1.0: um pipeline de 10 fases para IA (ChatGPT, Claude, Gemini).&lt;/p&gt;

&lt;p&gt;Você cola o prompt, passa 10 vagas + seu currículo atual e recebe o output otimizado em texto, LaTeX e metadados prontos.&lt;/p&gt;

&lt;p&gt;Também inclui um template LaTeX profissional, baseado no awesome-cv, com encoding correto, fontes embarcadas e layout ATS-friendly.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Custos&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;R$ 0,00.&lt;/p&gt;

&lt;p&gt;Porque conhecimento técnico não deveria custar R$ 997.&lt;/p&gt;

&lt;p&gt;O problema não é falta de curso.&lt;br&gt;
É falta de documentação.&lt;/p&gt;

&lt;p&gt;E documentação deveria ser open source.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Links&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;PDF completo:&lt;br&gt;
&lt;a href="https://github.com/caiquegaspar/ats-engineer/releases" rel="noopener noreferrer"&gt;https://github.com/caiquegaspar/ats-engineer/releases&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Repositório:&lt;br&gt;
&lt;a href="https://github.com/caiquegaspar/ats-engineer" rel="noopener noreferrer"&gt;https://github.com/caiquegaspar/ats-engineer&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Site:&lt;br&gt;
&lt;a href="https://ats-engineer.pages.dev" rel="noopener noreferrer"&gt;https://ats-engineer.pages.dev&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;O que aprendi&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;ATS não são uma coisa só. Existem sistemas legacy, ML-based e híbridos.&lt;/p&gt;

&lt;p&gt;Parsing quebra com detalhes bobos: hífen errado, BOM, fontes, aspas tipográficas.&lt;/p&gt;

&lt;p&gt;Keywords sem contexto valem pouco. Cluster semântico pesa mais.&lt;/p&gt;

&lt;p&gt;E o principal: o problema não é você. É a API.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Exemplo prático&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Antes:&lt;/p&gt;

&lt;p&gt;Desenvolvedor Full Stack&lt;br&gt;
Experiência com React, Node, Docker&lt;/p&gt;

&lt;p&gt;Depois:&lt;/p&gt;

&lt;p&gt;Desenvolvedor Full Stack | React | Node.js | Docker&lt;/p&gt;

&lt;p&gt;Resumo com contexto, tecnologias em inglês, datas normalizadas e impacto quantificado.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Conclusão&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Você debugga exceções no seu código.&lt;/p&gt;

&lt;p&gt;Mas está enviando currículos que lançam NullPointerException no parser do recrutador.&lt;/p&gt;

&lt;p&gt;Talvez esteja na hora de debugar isso também.&lt;/p&gt;




&lt;p&gt;v1.0.0 — Initial Release&lt;br&gt;
✓ Engenharia reversa completa&lt;br&gt;
✓ 33 páginas de documentação técnica&lt;br&gt;
✓ Prompt Mestre v1.0 + Template LaTeX&lt;/p&gt;

&lt;p&gt;Feedback é bem-vindo nos comentários ou no repositório.&lt;/p&gt;

</description>
      <category>softwareengineering</category>
      <category>careerdevelopment</category>
      <category>ai</category>
      <category>datascience</category>
    </item>
  </channel>
</rss>
