Construindo um Portfólio Open Source para Trabalhar na Europa
E aí, galera! Tudo tranquilo?
Tenho um objetivo bem claro: conseguir um emprego na Europa que inclua minha mudança para lá. Quero realmente morar no continente e não apenas trabalhar remoto do Brasil.
Minha trajetória na programação
Trabalhei com programação em 2014, mas acabei dando uma pausa de cinco anos e voltei em 2019. Desde então, trabalhei como freelancer desenvolvendo e-commerces e SaaS. Nesse período, fui responsável por todo o ciclo de desenvolvimento das aplicações: desde a configuração da infraestrutura em ambientes Cloud até a criação da API, do front-end e da rede, buscando segurança e eficiência de custos.
O problema é que esses projetos são privados, e eu não posso compartilhar o código. Por isso, decidi criar um projeto open source. Assim, mato dois coelhos com uma cajadada só: construo um portfólio público para recrutadores e, ao mesmo tempo, desenvolvo algo que posso realmente usar para monetizar minhas redes sociais voltadas para música.
Escolhas técnicas e infraestrutura
Como o projeto é pessoal, minha prioridade é minimizar custos. Então escolhi hospedar a API na Cloudflare Workers, que têm um custo extremamente baixo – muito menor que as Lambdas da AWS. O front-end ficará no Cloudflare Pages, e o banco de dados será o D1, também da Cloudflare.
A Cloudflare foi a melhor escolha para mim, pois, ao contrário da Vercel, não tem limites rigorosos para execução e nem custos absurdos com bandwidth. E como o projeto ainda terá poucos usuários, pagar pelo uso é mais vantajoso do que manter uma VPS mensal.
Implementação da API e autenticação
Até agora, finalizei as APIs de CRUD de usuários e autenticação. Para login, implementei duas abordagens:
- Autenticação tradicional (usuário e senha)
- One-Time Password (OTP)
O segundo método foi inspirado no Slack, que permite login apenas com o e-mail, enviando um código temporário para acesso. Achei essa experiência muito prática e decidi trazer para o meu projeto.
No meu caso, o OTP funciona com aplicativos como Google Authenticator, Microsoft Authenticator, etc. O fluxo é simples:
- O usuário solicita uma OAuth URL, que contém um secret e é salvo no banco encriptado.
- Ao cadastrar essa URL no app de autenticação, ele passa a gerar tokens de acesso a cada 30 segundos para sua conta.
- Com esses tokens, o usuário pode se autenticar sem precisar de senha.
É basicamente o mesmo mecanismo de autenticação de dois fatores (2FA), mas usado como método principal de login.
Arquitetura e minimalismo
Adotei uma arquitetura simples, inspirada no SOLID, mas sem excessos – por isso, evitei o uso exagerado de interfaces de contrato. Também optei por handlers em vez de controllers, pois estou usando o Hono, um framework mais adequado para funções serverless como Cloudflare Workers.
Não escolhi o Express porque ele foi projetado para rodar em servidores tradicionais, que ficam sempre ativos. Já em ambientes serverless, como Lambdas e Workers, cada requisição pode iniciar um novo ambiente de execução e encerrá-lo logo depois. O Express não foi otimizado para esse ciclo, o que pode adicionar overhead desnecessário. Já o Hono foi projetado para esse modelo, tornando a execução mais leve e eficiente.
Outro ponto importante é que quero manter o projeto o mais enxuto possível, evitando dependências desnecessárias. Em vez de instalar pacotes gigantes só para usar uma única função, prefiro desenvolver apenas o que realmente for essencial.
Se vocês gostaram da ideia e querem acompanhar, ou contribuir, o repositório da API está aqui:
👉 https://github.com/kimitrii/legion-api
Logo, trago novidades sobre como será o front-end!
Abraços galera!