Lincoln Berto
Vamos conversar
Todos os projetos
Em produção

Portal de vagas e painel do RH

Sistema de recrutamento de uma empresa de segurança e facilities com unidades em cinco cidades. O candidato encontra a vaga e se inscreve pelo celular. O RH acompanha cada pessoa num painel só, da inscrição até a aprovação.

Meu papel
Projeto inteiro: banco, telas, login e publicação
Período
2026 · em uso desde agosto
Stack
React, TypeScript, Vite, Supabase, PostgreSQL
Links
vagas.carrantos.com.br
Página inicial do portal de vagas, com a chamada 'Construa sua trajetória' e a busca por cargo, cidade e área
  • 20+vagas abertas e encerradas pelo portal
  • 50+candidatos ativos no painel
  • 5cidades com vagas no mesmo lugar
  • 0plataformas externas: o RH usa só o portal

o problema

Nenhum lugar central para vagas e currículos

A empresa não tinha um lugar próprio para divulgar as vagas nem para receber os currículos. As vagas ficavam em plataformas externas e os currículos chegavam por caminhos diferentes. Para saber quem tinha se candidatado a qual vaga, e em que etapa cada pessoa estava, o RH precisava juntar tudo na mão.

Boa parte dos candidatos se inscreve pelo celular, muitos pela primeira vez num processo seletivo online. O formulário precisava ser simples de verdade.

o que eu construí

Dois lados do mesmo sistema

Para o candidato

  • Busca por cargo com filtros de cidade e área
  • Detalhes da vaga: salário, escala, requisitos e benefícios
  • Inscrição com máscara de telefone e envio do currículo em PDF
  • Banco de talentos para quem não achou a vaga certa

Para o RH

  • Login próprio e painel com os números do dia
  • Criar, editar, pausar e excluir vagas sem mexer em código
  • Etapas do candidato: novo, triagem, entrevista, aprovado
  • WhatsApp com mensagem pronta e exportação em CSV

decisões técnicas

Currículo é dado pessoal. Tratei como tal.

Um portal de vagas guarda nome, telefone e currículo de muita gente. Por causa da LGPD, segurança veio antes de qualquer detalhe visual.

  • Regras de acesso no próprio banco

    Usei Row Level Security no PostgreSQL. Quem não está logado só consegue ler vagas ativas e enviar uma inscrição. Ver candidatos, editar ou apagar exige login do RH. A regra vale mesmo se alguém chamar a API direto.

  • Currículos num armazenamento privado

    Os PDFs não têm endereço público. Quando o RH clica em baixar, o sistema gera um link que expira em 60 segundos.

  • Validação antes do envio

    Só aceita PDF de até 5 MB, com mensagem clara quando o arquivo não serve. Evita upload pesado e arquivo que o RH não consegue abrir.

AdminPage.tsx
const handleDownloadResume = async (filePath: string) => {
  const { data, error } = await supabase.storage
    .from("resumes")
    .createSignedUrl(filePath, 60); // link vale 60 segundos
  if (error || !data) {
    toast.error("Erro ao gerar download seguro.");
    return;
  }
  window.open(data.signedUrl, "_blank");
};

telas

Pensado primeiro para o celular

A maioria das inscrições vem do celular. Os cards mostram o que importa antes do clique: cidade, escolaridade, escala e salário.

vagas.carrantos.com.br/#vagas
Lista de vagas no computador: cards com área, cidade, escolaridade, escala, salário e botão Ver vaga
Lista de vagas no computador
Lista de vagas no celular, um card por vez
No celular

o que eu aprendi

Sistema em produção é outra conversa

Projeto de estudo pode quebrar. Este não: se o portal sai do ar, a empresa deixa de receber candidatos. Aprendi a pensar em quem usa do outro lado, tanto o candidato no celular quanto a pessoa do RH que abre o painel todo dia.

O próximo passo é um sistema de chamados de TI para a mesma empresa, com a mesma base: Supabase, regras de acesso e um painel simples.

Próximo case Sonar Segurança Eletrônica

Tem uma vaga ou um projeto em mente?

Me conta o que você precisa que eu te respondo.