prospek-infra — contexto
prospek-infra
O que faz
Infraestrutura de background do Prospek: consome fila de busca CNPJ, mantém base com 27,8M empresas da Receita, executa crons (blog, Instagram, ETL) e provê monitoramento de saúde em tempo real. Versiona scripts que antes viviam soltos em um VPS, garantindo recuperação após perda do servidor.
O núcleo é a camada de "está tudo rodando?": tela admin com faixa de status atualizando a cada 5s, endpoint /api/ops/status para consulta via terminal, e watchdog que alerta no Discord a cada 5 minutos — apenas em transições crítico/normal, evitando ruído.
Cada check de monitoramento surgiu de um incidente real:
queue_backlog(busca esperou 7min, reembolso)queue_starved(migration derrubou fila por 22h)worker:scraper(container morto sem aviso)cron:*(blog ficou 4 dias sem rodar, máquina desligada)
Princípio: "erro grita, ausência é muda" — heartbeats declarados detectam silêncio além da cadência.
Stack principal
- Node.js (worker)
- PostgreSQL (base CNPJ + migrations)
- Docker Compose (worker + banco)
- Nginx (endpoint de busca)
- Bash (scripts operacionais)
- Vercel (crons de domínio e e-mails)
- claude.ai (relatório de campanhas)
Estrutura relevante
bin/run-cron.sh envelope de cron (duração, heartbeat)
bin/ops-watchdog.sh monitora e alerta no Discord
compose/ docker-compose do worker + banco
nginx/ vhost do endpoint CNPJ
db/ migrations (ex: 065_ops_heartbeats.sql)
docs/ migration-plan e runbook
Comandos comuns
curl -s "https://www.prospek.com.br/api/ops/status?token=$OPS_STATUS_TOKEN" | jq -r '.checks[] | "\(.status)\t\(.name)\t\(.detail)"'
bin/ops-watchdog.sh # verificação manual
bin/run-cron.sh # envelope de execução de tarefas
Agents/skills notáveis
- ops-watchdog: verifica status e notifica Discord, sem alertas repetidos
- run-cron: registra heartbeat e duração de tarefas agendadas
- Camada Vercel (domain-subscriptions, lifecycle-emails): rodam fora do VPS — migrá-las causaria duplicação de e-mails e cobranças
Segredos ficam em /home/prospek/*.env (chmod 600), com .example documentados.