Como um Mecanismo de Busca de Emprego Funciona Com Milhões de Vagas Sem Intermediários
Buscar emprego em empresas estrangeiras ou grandes empresas de TI frequentemente se torna uma rotina com surpresas desagradáveis. Você encontra uma posição interessante em um agregador, clica no link, e a vaga foi fechada há um mês. Ou você se depara com cópias infinitas do mesmo anúncio de agências de recrutamento que nem sequer informam o empregador final.

O projeto freehire resolve esse problema com uma abordagem técnica direta: analisa dados diretamente dos sistemas de rastreamento de candidatos (ATS), sem intermediários. O banco de dados contém mais de 3,3 milhões de vagas ativas de quase 300.000 empresas. A stack completa é aberta sob a licença MIT, incluindo coletores de dados, interface web, mecanismo de busca e API.
De onde vêm os dados
A maioria das empresas de tecnologia publica vagas através de serviços especializados como Greenhouse, Lever, Workday, Ashby ou iCIMS. Os criadores do freehire escreveram adaptadores para 92 dessas plataformas, e também conectaram cerca de cem boards de empregos de terceiros e feeds diretos de grandes corporações.
O pipeline funciona da seguinte forma:
- Um worker rastreia boards de empregos e lê vagas novas. Adicionar uma empresa geralmente leva uma linha em um arquivo YAML, especificando o nome e ID no ATS.
- Os dados são normalizados em um formato unificado. Se uma vaga é publicada em múltiplas plataformas, o sistema mescla duplicatas por uma chave estável.
- Filtros para níveis, salários, localizações e stack de tecnologia são construídos a partir de dicionários rigorosos. Não há heurísticas não confiáveis aqui—o sistema não tenta adivinhar dados aleatoriamente.
- Um worker separado baixa o formulário de candidatura real do ATS alvo, preservando a estrutura original dos campos.
O que tem dentro além do catálogo de vagas
A busca é apenas a vitrine. Ao redor do banco de dados de vagas, desenvolvedores construíram um espaço de trabalho completo para candidatos.
Gerador de currículo e verificação de correspondência
O repositório inclui um construtor de currículo que renderiza arquivos PDF otimizados para análise automatizada de ATS. O sistema compara requisitos da vaga com sua experiência e calcula uma pontuação de compatibilidade determinística. Quando conectado a um modelo de linguagem, fornece ajustes direcionados de currículo para aplicações específicas sem fabricar experiência.
Rastreador de respostas com e-mail recebido
Após enviar uma candidatura, o rastreamento continua em um quadro Kanban com atualizações de status. Um gateway de e-mail integrado conecta respostas de recrutadores a cartões específicos de candidatura, mantendo a correspondência organizada ao invés de perdida em uma caixa de entrada geral.
Assistente e extensão de navegador
Uma extensão de barra lateral do Chrome foi desenvolvida. Quando você abre uma página de vaga em qualquer site, o plugin lê o texto da página, cruza com seu perfil e preenche o formulário de candidatura para você. Para quem prefere trabalhar através de clientes LLM como Claude Desktop, os autores fornecem um servidor MCP separado.
Arquitetura e stack de tecnologia
O código é escrito em Go usando o framework web Fiber v2. Arquiteturalmente, o backend é claramente separado: o servidor de API lida exclusivamente com requisições de clientes, enquanto todo o trabalho em background é movido para workers isolados. Estes são convenientes para rodar via cron ou dentro de filas.
cmd/ Точки входа: HTTP-сервер и консольные воркеры
sources/ Файлы конфигурации источников вакансий (YAML)
migrations/ Схема PostgreSQL для sqlc и initdb
web/ Интерфейс на SvelteKit 2
internal/ Внутренние пакеты предметной области
sources/ Адаптеры под конкретные ATS (Workday, Lever, etc.)
pipeline/ Пайплайн сбора, валидации и дедупликации
cv/ cvedit/ Генерация структурированных резюме в PDF
inbox/ Обработка и связывание почты рекрутеров
Para armazenamento e busca rápida, uma combinação de componentes é usada:
- PostgreSQL com a extensão pgvector armazena entidades principais e embeddings vetoriais para busca semântica.
- sqlc gera código type-safe para trabalhar com o banco de dados a partir de queries SQL simples—nenhum ORM é usado.
- Meilisearch lida com busca em texto completo e filtragem facetada instantânea.
- SvelteKit 2 (em Svelte 5 runes) e Tailwind 4 formam o frontend SSR rápido.
- Redis e MinIO cobrem cache, rate limiting de requisições e armazenamento de objetos para arquivos.
Início rápido e trabalhando com a API
Você pode subir uma cópia local do serviço junto com todas as dependências via Docker:
make up
O comando vai iniciar o banco de dados, mecanismo de busca, API e interface web na porta 8080. Você pode verificar a disponibilidade com um simples request curl:
curl localhost:8080/health
curl localhost:8080/api/v1/jobs
A propósito, a API pública do projeto está disponível sem chaves ou autorização. Se você precisa de acesso a vagas frescas para seu bot ou projeto pessoal, basta acessar o endpoint https://freehire.me/api/v1/jobs. Todas as respostas são retornadas em formato JSON previsível com metadados estruturados e paginação.
Para rodar coletores de dados, comandos de console em cmd/ são usados:
# Обход конкретного каталога ATS
go run ./cmd/ingest sources/greenhouse.yml
# Сброс очереди индексации в Meilisearch
go run ./cmd/search-drain
# Извлечение вакансий из Telegram-каналов
go run ./cmd/tg-extract
Para quem é este projeto
O repositório será útil em três casos:
- Você está procurando emprego em empresas internacionais e está cansado de agregadores de baixa qualidade. A versão web fornece links diretos para sistemas ATS de empregadores sem intermediários intrusivos.
- Você quer construir seu próprio agregador, canal do Telegram com vagas ou bot. Os adaptadores abertos para 92 sistemas ATS economizam centenas de horas escrevendo parsers.
- Você está interessado em um exemplo de um projeto Go maduro sem ORMs sobrecarregados, com tipagem SQL rigorosa, separação em workers independentes e integração com um mecanismo de busca moderno.
O projeto parece maduro, e sua abertura dá a qualquer desenvolvedor a oportunidade de submeter um pull request com uma nova empresa em uma linha YAML. Você pode experimentar o serviço ao vivo no site do projeto ou fazendo deploy de containers no seu próprio servidor.
Projetos relacionados