# 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.