Evig · desenhei e construí do zero (69% dos commits)
Gateway de mensageria WhatsApp em Go
Mensagens de clientes no WhatsApp não podiam se perder, duplicar nem chegar fora de ordem.
900 msg/min · 0% falhas · p95 1,05 s
problema
Mensagens do CRM e dos agentes de IA precisavam sair pelo WhatsApp sem duplicar, sem se perder e na ordem da conversa, mesmo com retry, deploy e vários workers em paralelo.
decisão
Ports & adapters, outbox no PostgreSQL com FOR UPDATE SKIP LOCKED, idempotência em 3 camadas (recebimento do webhook, despacho do turno e despacho do outbox) ordem estrita por conversa (lane com fencing token) e por destinatário no outbox. Gate de 100% de cobertura em todo PR; gosec e govulncheck num job noturno.
resultado
900 msg/min por 10 min, 0% de falhas e p95 de 1,05 s do webhook até a resposta, no teste de carga com k6 e mocks com atraso fixo (200 ms da IA, 550 ms da Meta): o overhead do próprio gateway no p95 foi de 303 ms. 9.901/9.901 entregues na execução completa (11 min, com aquecimento). Mede o gateway, não o WhatsApp de ponta a ponta.
trade-offs e limites
- Outbox no próprio PostgreSQL, sem broker no início e com interface para trocar depois: menos peças para operar, com o banco como gargalo.
- Teto do teste: CPU do RDS (gate de 70% a 20 msg/s; 15 msg/s é a maior taxa confirmada, a faixa de 15 a 20 não foi refinada), bem acima do pico real de produção (41 mensagens em 5 min).
- Um suspeito do gargalo era a busca de status por
provider_message_id, sem índice (Seq Scan no EXPLAIN); o índice entrou depois (migration 015, de um colega), mas falta nova rodada de carga para medir.
- Reaper pendente: se um worker morre no meio do envio, a mensagem fica em
sending e não é reenviada sozinha, porque não dá para saber se a Meta já recebeu. Quando o lease de 5 min expira, ela só deixa de segurar as próximas do mesmo cliente. Prefiro reenviar à mão, depois de conferir na Meta (ainda sem passo escrito no runbook), a duplicar; dá para ver derrubando um worker na simulação do topo.
- Limite de taxa da Meta ainda tratado de forma reativa.
- Go
- PostgreSQL
- Outbox
- k6
- Prometheus
código aberto: o mesmo padrão reescrito do zero, já com reaper ↗ (abre em nova aba)
Evig · maior contribuidor (48% dos commits)
CRM multi-tenant em Laravel
PHPStan 1.770 → 0 · 2.100+ testes · 197 PRs
Num CRM em produção com outros devs, com tudo passando por pull request (197 meus), levei o PHPStan/Larastan de 1.770 erros a zero, criei 94% dos arquivos de teste (304 de 322), corrigi uma falha de IDOR entre empresas e atualizei o projeto para PHP 8.4 / Laravel 13.
ver problema, decisão e trade-off
Problema: CRM multi-tenant em produção, com outros devs mexendo ao mesmo tempo e sem análise estática. Quando adicionei o Larastan (nível 5), apareceram 1.770 erros; e uma rota deixava o admin de uma empresa editar funcionários de outra.
Decisão: entrar com baseline para não travar o time e zerar aos poucos, em PRs pequenos com teste junto; toda busca de funcionário passou a ser escopada pela empresa de quem chama, com 404 para ID de fora e teste de regressão por rota.
Trade-off: o baseline significa conviver um tempo com erro conhecido, em troca de não parar as entregas.
- PHP 8.4
- Laravel 13
- Larastan
- Pest
- Inertia + Vue 3
código aberto: o isolamento por empresa e o teste de IDOR reescritos do zero, com lembrete idempotente ↗ (abre em nova aba)
Evig · infraestrutura
Migração de produção do GCP para a AWS
segredos no SSM via OIDC · zero chaves estáticas no CI
Conduzi a mudança do banco e das instâncias de produção para RDS e EC2, do planejamento à execução, com segredos no SSM via OIDC em todos os projetos e observabilidade com Prometheus e Grafana. Os incidentes que vieram depois estão no registro abaixo.
- AWS
- OIDC
- SSM
- Prometheus
- Grafana
Evig · supervisor de agentes de IA
Roteador de IA mais rápido sem perder acurácia
120/120 no eval · p50 −25 a 40% (estimado)
Baixei o nível de raciocínio do roteador (o supervisor que escolhe o agente) de “high” para “low”, com latência p50 de 25% a 40% menor (estimativa do commit e do código, sem benchmark dedicado). O “low” errava pedidos de configuração ambíguos; corrigi isso com exemplos contrastivos no prompt até voltar a 120/120 (6 casos × 20 execuções, para medir estabilidade) e 35/35 frases-armadilha. É uma suíte pequena: protege contra regressão nesses casos, não prova acerto geral.
Evig · plataforma de APIs
Monólito modular em FastAPI
gate de 100% de cobertura de ramos no CI
Um repositório e um pipeline de qualidade para dois deployables isolados por contratos do import-linter: pacotes independentes e camadas que só dependem para dentro. Contrato OpenAPI travado no CI e pool de conexões reduzido de 20 para 8 por réplica no banco compartilhado.
- Python
- FastAPI
- PostgreSQL
- OpenAPI
Evig · Open Finance · crédito · contribuidor
Agentes de IA para finanças e crédito
todo número checado contra os dados, não inventado pelo modelo
Num time de agentes sobre Open Finance, minha parte foi: conectar, atualizar e remover bancos com confirmação; o agente de orçamento inteligente, com setup determinístico e confirmação de cada edição; grounding financeiro no prompt; threads do LangGraph isoladas por sessão; e, no supervisor, o soft-lock de crédito e os limites de cada agente. O roteador acima é esse supervisor, que escolhe qual agente atende cada mensagem.
- Python
- FastAPI
- LangGraph
- Open Finance
Evig · copiloto da plataforma · 98% dos commits
Copiloto multi-tenant com RAG
isolamento por empresa testado · 740 testes
Serviço em FastAPI com memória de conversa e RAG sobre arquivos enviados: documentos do admin valem para a empresa toda, os de cada usuário ficam privados, e o tenant_id do corpo só serve para recusar acesso cruzado, com teste para isso. Contratos de arquitetura no import-linter e mypy no CI.
- Python
- FastAPI
- RAG
- PostgreSQL
Accusense · projeto freelance · 63% dos commits
API de extração de notícias
−99% no custo da coleta · ~R$ 107 mil/ano (estimativa)
Criei do zero, em Laravel 12 e MongoDB, um motor de extração genérico em 5 camadas (sem seletor por site), com descoberta de feeds, deduplicação, pipeline em filas e retry com backoff. Substituiu a coleta manual de 3 operadores (cerca de R$ 3 mil por mês cada), realocados para outras funções, e roda por ~US$ 15/mês na AWS; já coletou ~25 mil notícias de 300+ sites. 120+ testes no motor.
- Laravel 12
- MongoDB
- Queues
- PHPUnit
Digital LZ · cobrança via WhatsApp
Robôs de cobrança e portal de autonegociação
8 operadores liberados · ~R$ 240 mil/ano (estimativa)
Cerca de 100 robôs em Node/TS + Prisma sobre SQL Server, enviando até 20 mil mensagens por dia, assumiram o disparo que 8 operadores (~R$ 2,5 mil por mês cada) faziam à mão; eles foram para outras funções. Retry com backoff, janela de horário comercial e controle de taxa; painel que liga e desliga os containers via SSH nos 2 servidores; portal de autonegociação em Laravel com login por CPF e verificação em duas etapas via WhatsApp, que fecha ~100 acordos por mês sem operador.
- Node.js
- TypeScript
- Laravel
- Docker