Pular para conteúdo

v0.4.1 — UI/UX Hotfix + Parser Fixes

Objetivo

A v0.4.1 é uma versão corretiva. Ela melhora a experiência real do fluxo guiado e corrige falhas óbvias dos parsers sem ampliar o escopo para scraping, auto-apply, extensão de navegador, PyTorch ou Concurso Mode funcional.

UI e contraste

A aplicação passa a usar uma identidade visual escura e consistente:

  • fundo, sidebar e superfícies com contraste explícito;
  • labels, captions, inputs, métricas e tabs legíveis;
  • cards com bordas suaves para fatos detectados;
  • chips para skills, links, benefícios e keywords;
  • botões com hierarquia visual;
  • cabeçalho compacto, sem hero excessivo;
  • mensagens de sucesso, aviso e erro mais claras.

O código visual saiu de app.py e foi organizado em:

modules/ui/
├── __init__.py
├── styles.py
├── layout.py
├── components.py
└── pages.py

Fluxo corrigido

O primeiro upload de currículo é processado automaticamente. O botão permanece disponível como Reprocessar currículo.

A descrição da vaga também é detectada quando o texto colado muda. O usuário pode revisar os dados, ajustar preferências opcionais e executar a análise.

Os dados detectados aparecem primeiro em cards, chips, métricas e tabs. Textareas ficam restritas à entrada e à edição opcional.

Parser de currículo

O parser detecta:

  • nome, email, telefone e cidade;
  • LinkedIn, GitHub e portfólio mesmo sem https://;
  • objetivo e resumo limitado;
  • formação, experiências, projetos, cursos e certificações;
  • skills técnicas sem duplicatas;
  • soft skills e idiomas.

Headings em português e inglês orientam a separação. Quando não existem headings, heurísticas identificam linhas como Técnico em, Estágio e Projeto acadêmico.

Parser de vaga

O parser detecta:

  • cargo, empresa e localização;
  • remoto, híbrido ou presencial;
  • CLT, PJ, estágio, trainee, temporário ou freela;
  • estágio, júnior, pleno, sênior e outros níveis;
  • salário, skills obrigatórias, skills desejáveis e inglês;
  • benefícios comuns;
  • alertas de dados importantes não informados.

Valores internos ausentes podem continuar usando unknown, mas a interface sempre apresenta Não informado.

Privacidade

O processamento local continua sendo o padrão. Gemini permanece opcional e depende de configuração explícita.

O histórico só salva dados estruturados após confirmação do usuário. Currículo e vaga em texto bruto não são salvos no tracker.

Revisão humana continua obrigatória. O produto não inventa experiência, não faz auto-apply e não envia mensagens automaticamente.

Regressões cobertas

Os testes realistas cobrem:

  • LinkedIn e GitHub sem protocolo;
  • formação com Técnico em Mecatrônica;
  • experiência com Estágio;
  • projetos acadêmicos;
  • skills únicas;
  • resumo limitado;
  • vaga remota, júnior e CLT;
  • benefícios e alertas de campos ausentes;
  • tradução de unknown para Não informado.

Validação

A entrega deve passar por:

ruff check .
ruff format . --check
python -m pytest -q
mkdocs build --strict
streamlit run app.py

Continuidade na v0.4.2

A v0.4.1 melhorou a detecção inicial, mas ainda tratava linhas de descrição como itens independentes em experiências e projetos. A v0.4.2 substitui essa etapa por blocos semânticos, amplia aliases de headings e torna o fallback do Gemini visível.

Detalhes: