Todos os Projetos

Vagas Tech PT

Um agregador de vagas tech feito para aguentar scrapers partidos

Testes automatizados
375
Cobertura de testes
92%
Fontes de vagas
3
Um agregador de vagas tech feito para aguentar scrapers partidos

O Vagas Tech PT junta numa só API as vagas tech em Portugal publicadas no LinkedIn, no itjobs.pt e no net-empregos. Cada vaga é normalizada para o mesmo formato: cidade, regime de trabalho, intervalo salarial anual em euros e as tecnologias que menciona. Depois, um fingerprint feito a partir da empresa, da função e da cidade junta a mesma vaga publicada em sites diferentes numa única entrada, com todas as fontes onde apareceu.

O backend corre em Python 3.15 com FastAPI, PostgreSQL 18, SQLAlchemy 2 e Alembic. Os scrapers usam Parsel para HTML e RSS e Playwright para o LinkedIn, atrás de um cliente HTTP com retries, backoff exponencial, respeito pelo Retry-After e um intervalo mínimo por site. Os upserts são idempotentes e correm dentro de um savepoint, por isso um lote com erro nunca perde o registo da execução.

Os scrapers partem sempre que um site muda o HTML, por isso o projeto trata isso como algo a testar e a monitorizar. Os parsers falham alto em vez de devolverem nada, cada execução fica guardada com o seu estado, as falhas alertam um administrador e um canary semanal no GitHub Actions visita os sites reais e abre uma issue quando algum muda.

Os utilizadores subscrevem alertas com os seus filtros, incluindo a senioridade, por e-mail, Discord ou Telegram depois de uma confirmação por opt-in. Depois gerem os alertas com slash commands no Discord ou comandos do bot no Telegram, e cada resumo traz um link para cancelar a subscrição. Os tokens são guardados apenas como hash, os webhooks do Discord são validados contra SSRF e todas as rotas estão documentadas numa referência de API em Scalar. Todo o projeto foi feito com testes primeiro: 375 testes automatizados com 92% de cobertura, mypy em modo strict e seis verificações obrigatórias no CI, incluindo deteção de alterações à API não documentadas e um bloqueio de migrations destrutivas.