Pular para conteúdo

Frontend moderno

A v1.8.2 consolida o frontend moderno do SotuHire em apps/web como experiencia local principal, com Perfil Profissional Universal, Caixa de Entrada de Oportunidades, Radar de Vagas e captura assistida segura.

O app usa React, Vite, TypeScript, TanStack Router, TanStack Query, Tailwind CSS, Radix UI, Recharts e lucide-react. Ele roda separado do Streamlit e consome a FastAPI local em /api/v1 quando o modo API Real esta ativo.

Como rodar

Fluxo principal:

.\start-sotuhire.ps1

Manual:

python scripts/run_api.py
cd apps/web
npm install
npm run dev

Valide o frontend:

cd apps/web
npm run build
npm run lint
npm run typecheck
npm run test:e2e

Para iniciar tambem a Local Companion API:

.\start-sotuhire.ps1 -WithCompanion

Modos

  • Modo Demo: usa mocks ficticios locais e permite navegar sem backend ativo.
  • Modo API Real: usa http://127.0.0.1:8787/api/v1.

Telas integradas

  • Home/Landing
  • Dashboard
  • Curriculo
  • Vaga
  • Analise de Compatibilidade
  • Analise ATS
  • Ajuste de Curriculo
  • Analise de GitHub
  • Perfil
  • Candidaturas
  • Inteligencia de Candidaturas
  • Fontes e Captura
  • Radar de Vagas
  • Configuracoes
  • Privacidade

Cross-browser e responsividade

npm run test:e2e roda Playwright em:

chromium
firefox
webkit

A matriz responsiva e capturada uma vez no Chromium:

Mobile: 390x844
Tablet: 768x1024
Desktop: 1440x1000

Kanban

O Kanban de Candidaturas usa status reais do backend, drag-and-drop visual, rollback se a API falhar e select de status como alternativa acessivel para teclado/mobile.

Fontes e Captura

A tela Fontes e Captura fica na rota /sources e no menu lateral. Ela organiza caminhos seguros para colar vaga manualmente, salvar link, importar arquivo, usar extensao assistida, radar publico e APIs oficiais quando disponiveis.

O fluxo AUTHENTICATED_BROWSER existente no backend local tambem aparece nessa tela. A v1.8.0 nao alterou scraper autenticado, Chromium/CDP, crawler logado ou docs protegidos. O fluxo nao contorna CAPTCHA/checkpoint, nao automatiza candidatura e nao faz auto-apply.

O painel Extensao Local consulta capturas ja salvas pela Local Companion API, mostra status, ultima sincronizacao, origem, URL, data e tipo de captura, e permite importar uma captura para Vaga, GitHub Analysis ou Candidaturas. A v1.8.0 tambem permite revisar, arquivar ou ignorar capturas no historico local.

Caixa de Entrada

A area Caixa de Entrada de Oportunidades em /sources mostra vagas importadas por texto, link, CSV, JSON e capturas da extensao/local companion. Ela oferece filtros por status/origem, busca por cargo/empresa/link/tag/origem, deduplicacao local e acoes para:

  • importar para a tela Vaga;
  • salvar em Candidaturas/Kanban;
  • fazer upload CSV/JSON com preview antes de confirmar;
  • mesclar duplicata preservando historico;
  • exportar todos, filtrados ou selecionados em CSV/JSON;
  • arquivar ou ignorar;
  • copiar o link original.

O Diretório de Fontes mostra paginas de carreira abertas, feeds RSS publicos, APIs oficiais, CSV/JSON recorrente, links manuais e fontes observadas. Feeds RSS/Atom publicos agora podem ser usados manualmente pelo Radar de Vagas; APIs oficiais continuam como adapters planejados.

Radar de Vagas

A rota /radar adiciona o fluxo v1.8.0:

  • wishlist local;
  • fontes RSS/Atom publicas;
  • rodadas manuais;
  • resultados com score, evidencias e lacunas;
  • alertas locais;
  • salvar na Caixa de Entrada ou em Candidaturas.

APIs oficiais aparecem como adapters preparados e continuam dependentes de contrato documentado.

Perfil Profissional Universal

A rota /profile permite editar dados básicos, adicionar itens manuais, filtrar por tipo, editar evidências, remover itens e importar texto de currículo, Lattes, portfólio, certificados ou notas.

Itens extraídos por IA/fallback aparecem para revisão e só entram no perfil quando a pessoa clica em Adicionar ao perfil. A API usada é /api/v1/profile*, e o frontend não confirma item nem salva segredo automaticamente.

CSV esperado:

cargo,empresa,link,local,descricao,fonte,status,observacoes
Analista de Dados,Empresa Exemplo,https://example.com/jobs/123,Remoto,"Python, SQL e dashboards",CSV Manual,nova,"vaga ficticia"
Desenvolvedor Backend,Tech Exemplo,https://example.com/jobs/456,Hibrido,"APIs, testes e bancos de dados",CSV Manual,nova,"vaga ficticia"

JSON esperado:

[
  {
    "cargo": "Analista de Dados",
    "empresa": "Empresa Exemplo",
    "link": "https://example.com/jobs/123",
    "local": "Remoto",
    "descricao": "Python, SQL e dashboards.",
    "fonte": "JSON Manual",
    "status": "nova",
    "observacoes": "vaga ficticia"
  }
]

Links sao lidos apenas quando a pagina publica simples permite. Se houver bloqueio, login ou texto ilegivel, o usuario deve abrir a pagina manualmente e colar a vaga.

IA e Providers

A secao IA e Providers em Configuracoes usa endpoints reais do backend local:

GET /api/v1/settings/ai
GET /api/v1/settings/ai/status
POST /api/v1/settings/ai
POST /api/v1/settings/ai/test
DELETE /api/v1/settings/ai

A chave e enviada apenas para a FastAPI local e armazenada backend-side em data/secrets/ai-provider.local.json, com metadados seguros em data/settings/ai-settings.json. Esses caminhos sao ignorados pelo Git. A chave nunca e retornada ao frontend, nao aparece em mocks, prints ou docs e nao e gravada em localStorage/sessionStorage.

Estados exibidos:

IA desativada
Provider local
Provider configurado
Provider nao configurado
Analisando com IA
Fallback local
Limite/erro do provider
Timeout do provider
Chave invalida

Testes e visual

cd apps/web
npm run test:e2e

O Playwright cobre fluxo guiado, demos de analise, IA Settings, Fontes e Captura, Radar, Kanban, cross-browser e ausencia de branding legado. O spec visual gera a serie sotuhire-v1.8-web-*.png em docs/assets/screenshots/ com viewport fixo 1440x1000.

Streamlit legado/dev

O Streamlit continua disponivel, mas nao e o fluxo principal do frontend moderno:

streamlit run app.py

Fronteira de responsabilidade

O frontend exibe estados, coleta inputs e chama a API. O backend/core continua responsavel por:

  • extracao de curriculo e vaga;
  • Analise de Compatibilidade;
  • ATS;
  • Resume Tailor;
  • GitHub Analyzer;
  • tracker, metricas e persistencia;
  • configuracoes locais de IA e segredos;
  • validacoes fortes;
  • regras anti-invencao;
  • privacidade e retencao local.

GitHub Pages

O GitHub Pages continua estatico e demo-oriented. Ele nao roda Python, FastAPI, Streamlit, IA ou storage local.

Referencias