Job Tracker
Projeto pessoal
Role para baixo
Visão geral
Um quadro kanban para candidaturas a vagas. Cada vaga passa por etapas fixas de contratação, com uma linha do tempo e um registro automático no histórico a cada mudança de etapa.
Função e stack
Desenvolvedor full stack
Next.js 14, PostgreSQL, Tailwind CSS, Jest, SWR
Links
A ferramenta pessoal
O Job Tracker é um projeto pessoal open source de 2026 que construí para organizar a minha própria busca de emprego. Ele representa cada vaga como um card que passa por cinco etapas fixas: Interessado, Candidatado, Em processo, Oferta e Encerrado.
Cada card guarda a empresa, o cargo e os detalhes da candidatura, e a página de detalhe combina um formulário editável com um histórico cronológico de eventos. É possível adicionar eventos como entrevistas, e cada mudança de etapa gera automaticamente o próprio registro no histórico.
O que eu construí
Construí o quadro, o fluxo de detalhe da vaga, os eventos manuais e automáticos da linha do tempo e um tema claro e escuro que fica salvo. Também implementei autenticação por e-mail e senha com sessões em cookie guardadas no banco, bcrypt e pepper, além do login com Google por OAuth como segunda opção.
A aplicação usa Next.js 14 com o Pages Router e next-connect, Tailwind CSS na interface e SWR para buscar dados no cliente. Ela é escrita em JavaScript e publicada continuamente na Vercel.
Domínio e fluxo de dados
O código segue uma estrutura MVC compacta: os models contêm as regras de negócio e o SQL escrito à mão, os controllers ficam em rotas de API versionadas, e as páginas e os componentes renderizam as views. O PostgreSQL é acessado pelo pg sem ORM, com o node-pg-migrate versionando as mudanças de schema e um objeto de erro padrão compartilhado entre os endpoints.
A transição de etapa e o seu registro na linha do tempo são modelados juntos, para que o quadro não mude sem gerar histórico. Isso mantém o estado atual do card e a sua trilha de eventos consistentes, em vez de duplicar a lógica de transição em várias telas.
Testando a stack real
Desenvolvi a API com TDD, escrevendo os casos de sucesso e de erro antes de cada endpoint. Os testes de integração com Jest chamam um servidor Next.js e uma instância de PostgreSQL reais, levantados pelo Docker, em vez de substituir o banco por mocks.
O pipeline dos pull requests também roda ESLint, Prettier e Secretlint e depois gera deploys de prévia na Vercel. Assim, a autenticação, os erros de banco e o formato exato das respostas da API puderam ser testados com os mesmos componentes usados pela aplicação.
Cada mudança de etapa passa a fazer parte do histórico da aplicação.
Arraste para explorar


