Projeto Vagas TI & Analytics: Compartilhando a Arquitetura e o Que Deu Certo (ou Errado)
Fala galera, sou engenheiro de dados e estava um pouco cansado dessas plataformas de job listing todas iguais. Resolvi, então, dedicar um tempinho para construir uma plataforma para agregar dados de diferentes origens de publicações de vagas de TI e fazer algo diferente que seria acrescentar analytics relevantes (meu lado eng. dados xD) sobre as vagas publicadas para proporcionar um panorama e insights da área.
O processo de desenvolvimento
Foi bem interessante o projeto do ponto de vista de desenvolvimento porque pude cobrir o ciclo de desenvolvimento como um todo: ideação, frontend, backend, data engineering, aplicar LLM, integrar com APIs externas, comprar domínio, alugar VPS, fazer deploy e resolver vários desafios. Meu trabalho atual é bem especializado na área de dados e já não estou mais tanto na parte hands-on, então eu não tinha essa visibilidade da complexidade do deploy de um SaaS completo. Aprendi muito no processo - e isso já valeu muito a pena.
Levei mais ou menos uns três meses para construir tudo, nos meus horários fora do trabalho, e lembro que no principio gastei um bom tempo pensando na arquitetura dessa plataforma. Imaginei, então, que pudesse ser útil eu compartilhar um diagrama completo da arquitetura da plataforma e minhas notas com vocês para o caso alguém que esteja interessado em fazer algo parecido, afinal já vai ser meio caminho andado xD.
Arquitetura do projeto
Segue o diagrama da arquitetura completo com alguns comentários meus logo abaixo:

Como disse, sou engenheiro de dados, então não tenho lá muita experiência com a parte de frontend/backend… Basicamente, como principais tecnologias dessa arquitetura ponderei o seguinte:
ETL layer:
- aqui é parte que tenho mais domínio e aproveitei esse projeto para validar algumas tecnologias que tem sido muito faladas na minha área e não uso no dia-a-dia, sendo: DuckDB (pelo serviço MotherDuck) e o dbt - particularmente, gostei bastante de usar essas tecnologias porque são bem simples para começar e muito eficientes
- usei Python como linguagem principal para construir o pipeline de dados e Prefect para fazer a orquestração - mais uma vez pautado naquilo que fosse mais simples e rápido para começar (e Python eu já conheço bem)
- como base para as APIs usei o bom e velho Postgres (não tem muito erro) - fui no garantido de novo
API layer:
-
aqui já começa um pouco o território novo para mim, e então decidi usar Python (pq já conheço) com a lib FastAPI - acho que foi uma decisão acertada, uma vez que é só um projeto pessoal e evitou uma bela curva de aprendizagem se eu fosse para algo mais robusto
-
aqui eu também interajo com serviços externos e achei bem tranquilo a integração desses com a FastAPI
Frontend layer:
-
definitivamente a parte que menos conheço, fui de novo baseado naquilo que fosse o mais fácil e vi que dentre os frameworks de frontend Vue3 se mostrava como a opção mais simples - não sei se é o melhor para sistemas mais complexos mas para esse caso foi muito prático para mim
-
aqui em conjunto também utilizei Vite para o build e Pinia para gestão de estados
Para facilitar o deploy, já deixei os principais recursos em containers Docker e fiz a organização deles com Docker-Compose. Ah, para versionamento, Git.
Minhas considerações
Acho que para um projeto pessoal, e a principio pequeno, me parece que foi uma arquitetura acertada pois ainda é enxuta e praticamente sem custos - talvez poderia de ajustado uma coisa aqui ou ali mas no geral estou satisfeito com o resultado. A aplicação está rodando bem e por hora sem nenhum crash.
Qualquer questão sobre o tema da arquitetura e da experiência em si do projeto manda ai que respondo assim que puder.
O projeto live: aqui 🙂
Bom, é isso, espero que o compartilhamento da arquitetura e minhas notas do projeto possam ser úteis ai para os amigos dev que estão pensando em fazer algo parecido ou mesmo querendo aprender com uma experiência prática de alguém.