Executando verificação de segurança...
0

De Micro-SaaS para Community Edition: Como construí um Bot de Vagas resiliente com Node.js, Puppeteer e 0% de Banco de Dados (Até o momento)

Recentemente, comecei a desenvolver um bot para agregar vagas de TI. A ideia inicial era clássica: criar um "Micro-SaaS", cobrar uma assinatura VIP e entregar as vagas em tempo real via Telegram.

Mas, no meio do caminho, o "espírito Open Source" falou mais alto. Percebi que a barreira de entrada para juniores e plenos já está alta demais para eu colocar mais um paywall na frente. Decidi pivotar: removi toda a lógica de pagamentos (Stripe/Asaas) e refatorei o projeto para ser 100% focado em performance e utilidade para a comunidade.

Queria compartilhar com vocês um pouco da arquitetura "unorthodox" (pouco ortodoxa) que utilizei e que está aguentando o tranco surpreendentemente bem.

A Stack "Keep It Simple"
O objetivo era rodar isso no servidor mais barato possível (ou até num Raspberry Pi), então descartei containers pesados de banco de dados.

Core: Node.js + Telegraf (para o bot).

Scraping: Puppeteer + puppeteer-extra-plugin-stealth (para evitar bloqueios do Cloudflare/WAF).

Banco de Dados: Nenhum. 😅

Frontend/Dashboard: Next.js com Server Actions.

Por que JSON > SQL (Neste caso)?
Para um volume de ~5.000 vagas rotativas, percebi que não precisava do overhead de um Postgres ou Mongo. Implementei uma camada de persistência usando apenas o fs-extra.

O sistema mantém 3 arquivos JSON principais:

history.json: Um hash de URLs visitadas (para evitar repostar a mesma vaga).

backlog.json: Uma fila FIFO que o Worker consome a cada 2 minutos.

stats.json: Métricas diárias de performance.

O "pulo do gato" foi usar o Next.js não só como site, mas como interface administrativa. Criei Server Actions que leem esses arquivos JSON diretamente do disco. O resultado é um Dashboard em tempo real onde posso monitorar a fila e deletar vagas "sujas" antes que o bot as envie para o canal, sem precisar de API Rest ou GraphQL no meio.

O Desafio da Categorização (Sem gastar com LLMs)
Inicialmente pensei em usar a API da OpenAI para categorizar as vagas ("Junior", "React", "Remoto"). Mas para manter o custo zero, escrevi uma engine de Regex otimizada.

Ela varre o título da vaga contra um dicionário de ~50 termos técnicos e gera as hashtags automaticamente. Se o título é "Backend Developer (Java/Spring) - Remote", o bot categoriza como #Java #Backend #Remoto instantaneamente, com custo computacional irrelevante.

O Resultado
O bot está rodando liso, processando dezenas de sites (LinkedIn, Programathor, RemoteOK, etc) e centralizando tudo em um único canal. (Depois divulgo a lista completa).

Ainda estou finalizando a documentação e limpando algumas chaves hardcoded para liberar o repositório no GitHub (aviso aqui quando sair!).

Por enquanto, quem quiser ver o resultado dessa arquitetura rodando na prática, pode acompanhar o canal onde as vagas estão caindo:

👉 t.me/vagastechpro

Fica o convite para code review assim que eu liberar o código. Alguém mais aqui tem usado JSON como banco em produção para projetos pequenos ou eu estou maluco? kkkkkkkkkk

Carregando publicação patrocinada...