gohorsejobs/docs/CAREERJET_GAP_ANALYSIS.md

91 lines
4.3 KiB
Markdown

# Gap Analysis: GoHorseJobs vs Careerjet (2026)
## Objetivo
Mapear o que já existe no GoHorseJobs e o que ainda falta para alcançar um fluxo equivalente ao Careerjet, com backlog acionável.
## Escopo analisado
- Busca pública de vagas (home + listagem + detalhe)
- Filtros e parâmetros de URL
- Recursos de candidato (alerta, salvar vaga, currículo)
- Recursos de empresa/recrutador
## Achados principais (resumo executivo)
### O que já está bom no GoHorseJobs
1. **Fluxo base de busca já existe** com listagem, paginação e filtros essenciais (`q`, localização, tipo, modalidade).
2. **Detalhe de vaga e candidatura** já cobrem o núcleo do funil candidato.
3. **Estrutura multi-perfil** (candidato/recrutador/admin) e módulo de empresas já está presente.
### Lacunas mais críticas para paridade com Careerjet
1. **Compatibilidade de URL estilo Careerjet (`s`/`l`)** não estava completa de ponta a ponta.
2. **Filtros “Date posted”, empresa e jornada de trabalho** ainda não estão consolidados no fluxo público.
3. **Alertas de vaga por e-mail** ainda não estão evidentes no fluxo público principal.
4. **Página de empresas pública com foco em descoberta** precisa de reforço (seguir empresa, vagas da empresa com filtros rápidos).
## Melhorias implementadas neste ciclo
### 1) Compatibilidade de URL estilo Careerjet
- Home agora envia também os aliases `s` e `l` (além de `q` e `location`) para facilitar compartilhamento e importação de links externos.
- Home também envia `workMode` além de `mode` para reduzir inconsistência entre páginas.
- Página `/jobs` agora consome `s`/`l`/`mode`/`workMode` além dos parâmetros antigos.
### 2) Correção de re-fetch para filtros avançados
- A listagem de vagas não reexecutava busca ao alterar alguns filtros avançados (salário, moeda, ordenação, suporte a visto).
- Ajustado para atualizar resultados ao mudar esses filtros.
### 3) Backend com alias Careerjet
- Endpoint `GET /api/v1/jobs` passou a aceitar `s` como alias de termo de busca e `l` como alias de localização.
- Incluído teste automatizado cobrindo esse comportamento.
## Backlog recomendado (priorizado)
## P0 (alta prioridade, impacto imediato)
1. **Date Posted no backend + frontend**
- Backend: aceitar `datePosted` (`24h`, `7d`, `30d`) e filtrar por `created_at`.
- Frontend: filtro visível na listagem com UX similar ao Careerjet.
2. **Filtro por empresa no público**
- Endpoint de jobs com `companyId` já existe; falta UX forte para seleção por empresa.
3. **Persistência de buscas recentes**
- LocalStorage para anônimos + conta autenticada (sincronização opcional).
## P1 (médio prazo)
4. **Alerta de vagas público**
- “Create alert” com confirmação por e-mail e gerenciamento no painel do candidato.
5. **Melhorias na página de empresas**
- Botão “seguir”, filtro por data e exibição de vagas com metadados completos.
6. **Salvar vaga**
- Reforçar botão “Salvar” em cards e detalhe para usuários autenticados.
## P2 (evolução)
7. **Navegação Previous/Next no detalhe da vaga**
8. **Origem da vaga (source link) quando for agregação externa**
9. **Ranking de relevância para ordenação “relevance”**
## Critérios de aceite sugeridos
### Busca / URL
- Dado um link `/jobs?s=Data+Engineer&l=Recife`, a tela carrega com termo e local preenchidos e lista filtrada.
- Dado um link `/jobs?mode=remote`, o filtro de modalidade entra como “remote”.
### Filtros avançados
- Ao alterar ordenação/moeda/faixa salarial, a lista atualiza sem refresh manual.
### Backend
- `GET /api/v1/jobs?s=qa&l=Lisboa` retorna os mesmos resultados que `q` e `location` equivalentes.
## Plano técnico (sprint recomendado de 2 semanas)
### Semana 1
- Implementar `datePosted` no backend e cobertura de testes.
- Expor filtro na UI pública e validar UX.
- Persistir “recent searches” localmente.
### Semana 2
- Criar fluxo de alertas (CRUD mínimo + envio inicial).
- Melhorar página pública de empresas (seguir + vagas + filtros).
- Ajustes de observabilidade (métricas de conversão busca → clique → candidatura).
## Riscos e dependências
- **Dependência de modelagem de dados** para alertas e follows.
- **Qualidade dos dados de salário/empresa** impacta filtros e ordenação.
- **Internacionalização**: novas labels e mensagens precisam entrar no i18n.