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
unknownparaNã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: