Miguel Sanz Boragan Engenheiro de software back-end pleno · São Paulo (UTC−3) ou remoto · CLT, PJ ou contractor para o exterior disponível · início imediato

Back-end testado sob carga, com a fonte de cada número.

PHP/Laravel, Go e Python/FastAPI, com IA aplicada: CRM multi-tenant, gateway de mensageria, plataforma de APIs, agentes com LangGraph e migração de produção para a AWS. 2 anos e 8 meses em empresas (fev/2024 a out/2026) e freelance desde 2023; o último emprego foi numa fintech de IA conversacional.

  • PHP · Laravel
  • Go
  • Python · FastAPI
  • Node · TS
  • PostgreSQL
  • AWS
  • LangGraph
gateway.go · outbox · workers
duração
10 min
taxa
900 msg/min
falhas
0%
p95
1,05 s
na fila / em trânsitoentreguesimulação com os números do teste de carga (k6, API da Meta simulada); 3 workers ilustrativos, o teste usou 24

O que eu entreguei, com a fonte.

Números de teste de carga, CI, eval e de negócio. Cada um leva ao caso de onde saiu; as estimativas mostram a conta.

900msg/min

no gateway em Go, por 10 min, com 0% de falhas (API da Meta simulada)

fonte: k6ver caso →

ver evidência
checks_succeeded...: 100.00% 49505 out of 49505
checks_failed......: 0.00%   0 out of 49505
e2e_first_ms...................: avg=920.04ms min=827ms    med=877ms   max=5.37s p(90)=968ms    p(95)=1.04s
http_req_failed................: 0.00%  0 out of 49505
inbound_message................: 9901   14.97598/s

Saída do k6 na execução completa (660 s, com aquecimento). Na janela medida de 600 s, o p95 foi de 1,053 s.

1.770→ 0 erros

erros de PHPStan/Larastan zerados no CRM multi-tenant em Laravel

fonte: CIver caso →

ver evidência
$ git show fbbf7bea:phpstan-baseline.neon | grep -c 'message:'
1770
$ grep -c 'message:' phpstan-baseline.neon
0

Baseline do Larastan (nível 5): 1.770 entradas de erro no commit em que eu adicionei o Larastan ao projeto. Hoje, nenhuma.

120/120no eval

roteador de IA com 25% a 40% menos latência p50 (estimado) ao baixar o nível de raciocínio, sem perder acerto (6 casos × 20 execuções)

fonte: eval (acurácia) + commit (latência)ver caso →

ver evidência
corta reasoning tokens + latencia em TODO turno (~-40% p50 vs high).
…
Validado N=20 x 6 casos = 120/120; suite de 35 frases-armadilha = 35/35.

Trecho da mensagem do commit que mudou o roteador. O comentário no código do mesmo commit estima ~25%: não houve benchmark dedicado, por isso a faixa.

8operadores liberados

~100 robôs de WhatsApp assumiram o disparo de cobrança feito à mão: cerca de R$ 240 mil/ano em trabalho manual (estimativa: 8 × ~R$ 2,5 mil/mês)

fonte: conta mostradaver caso →

início
imediato
contrato
CLT ou PJ, ou contractor para empresa do exterior
modelo
São Paulo (híbrido ou presencial) ou remoto
vaga buscada
back-end pleno (aberto a júnior)
inglês
intermediário (leitura técnica fluente), aceito entrevista em inglês
formação
Eng. de Software, UNINTER (cursando)

Em empresas desde 2024, freelance desde 2023.

Do freelance para pequenas empresas a uma fintech de IA, passando por cobrança em escala e extração de dados.

principalPHP 8.4 · Laravel · Go · Python · FastAPI · Node.js · TypeScript · PostgreSQL · MySQL · AWS · Docker · LangGraph

qualidadePest · PHPUnit · pytest · Go test · PHPStan · mypy · golangci-lint · k6

front quando precisaVue 3 · Inertia · React · React Native

também já useiSQL Server · MongoDB · Redis · Java · Spring Boot

  1. jan 2026 – out 2026

    Engenheiro de Software Back-end · Evig

    Back-end e infra de uma fintech de IA conversacional (Open Finance, WhatsApp e agentes). Criei do zero o gateway de mensageria em Go e a plataforma de APIs em FastAPI, fui o maior contribuidor do CRM em Laravel (48% dos commits), conduzi a migração de produção do GCP para a AWS e trabalhei nos agentes de IA de finanças e crédito. A empresa encerrou as atividades em outubro de 2026 por falta de caixa.

  2. fev 2024 – jan 2026 · depois, freelance sob demanda

    Full Stack Engineer · Digital LZ

    Criei cerca de 100 robôs de cobrança via WhatsApp em Node/TS (que liberaram 8 operadores para outras funções), o portal de autonegociação de dívidas e o Portal-Robô de monitoramento. Desde a saída, faço ajustes pontuais sob demanda, fora do horário comercial.

  3. jan 2023 – jun 2026 · fora do horário comercial

    Desenvolvedor Freelancer · autônomo

    Accusense (fev–mai 2026): API de extração de notícias criada do zero em Laravel e MongoDB, com coleta automática de feeds, que substituiu o trabalho manual de 3 operadores. Antes: automação web com Puppeteer e fila em PostgreSQL, check-in digital de hóspedes em Vue 3 e sites em PHP para pequenas empresas.

  4. formação

    Engenharia de Software · UNINTER, cursando (2026–2029)

    Técnico em Desenvolvimento de Sistemas pela ETEC (2023–2025), com foco em full stack e segurança cibernética. Instituto PROA (2025), Fundamentos do Linux (FIAP), Digital Safety and Security Awareness (Cisco) e 3º lugar no Hackathon Java.Xpert da FIAP.

Quem trabalhou comigo recomenda.

Recomendações recebidas no LinkedIn, sem edição: do meu mentor, do meu gestor direto e de um colega de time na Evig.

Gabriel Cano (abre em nova aba) Tech Lead na CRMBonus

foi meu mentor · out 2026

Fico um pouco impressionado com o tamanho da competência e da dedicação do Miguel.

Sua dedicação aos estudos e à evolução profissional, buscando se adequar às exigências do mercado, fez com que, em pouco tempo, ele se tornasse o profissional do futuro que toda empresa quer ter.

ler completa

Ele enxerga o negócio de uma maneira ímpar, sempre buscando viabilizar a criação de produtos e remover bloqueios que impedem o avanço do time de negócios.

Tem amplo conhecimento em inteligência artificial, desde o treinamento de modelos até a criação de workflows de trabalho bem otimizados e avançados.

Ele ainda tem um futuro brilhante pela frente, mas já o vejo como uma verdadeira “empresa de um homem só”, pois consegue, sozinho, lidar com diversas demandas que vão muito além de sua área de atuação em backend.

Julio Barros (abre em nova aba) Founder e CEO na Evig

foi meu gestor direto · out 2026

Fui líder do Miguel na Evig e posso dizer sem exagero: ele é daqueles caras que elevam o nível do time. Em pouco tempo pegou frentes bem diferentes, de infra a IA, e mandou bem em todas.

ler completa

Foi ele quem tocou a migração da nossa produção do GCP para a AWS, montou nossa observabilidade do zero e criou o gateway de mensageria em Go que segura as conversas no WhatsApp, sem falhar nem nos testes de carga mais pesados. Também teve um papel enorme na nossa solução de IA: deixou o roteamento dos agentes bem mais rápido, sem perder precisão, e criou o copiloto com RAG da plataforma.

Mas o que mais me marcou foi o jeito dele trabalhar. O Miguel é caprichoso de verdade (testa tudo, pensa em segurança, vai atrás da causa raiz de cada problema) e mesmo assim entrega rápido. É autônomo, se sente dono do que constrói e é muito gente boa de trabalhar junto.

Recomendo o Miguel de olhos fechados. Qualquer time de back-end, infra ou IA vai ter sorte de ter ele por perto.

Humberto Fernandes (abre em nova aba) Engenheiro de Software · back-end Java e IA

foi meu colega de time na Evig · out 2026

Recomendo o Miguel Sanz Boragan como Engenheiro de Software Back-end. Na Evig, ele foi responsável pela migração completa da nossa infraestrutura do GCP para a AWS, conduzindo o projeto de forma autônoma, do planejamento à execução, e concluindo-o em prazo reduzido.

ler completa

Tecnicamente, destaca-se em arquitetura de software, PostgreSQL, desenvolvimento de APIs e integrações, com atenção constante à qualidade e à confiabilidade dos sistemas. Soma a isso senso de responsabilidade, comunicação clara e disposição para colaborar com o time. É um profissional que recomendo com total confiança.

ver todas no LinkedIn (abre em nova aba)

Problema, decisão, resultado.

Trabalho profissional em repositórios privados. Uso agentes de IA no dia a dia; reviso, testo e respondo por cada linha. Posso detalhar a arquitetura e as decisões em uma entrevista técnica.

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.

  • Python
  • LLM
  • evals
  • prompting

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

Registro de problemas resolvidos 11

Bugs, incidentes e falhas de segurança que eu diagnostiquei e corrigi. Clique para ver sintoma, causa raiz e correção; cada um vem de um commit meu.

Evig · jun 2026 A mesma mensagem de WhatsApp chegava várias vezes trava atômica em cache compartilhado
sintoma
Usuários recebiam a mesma mensagem mais de uma vez em produção, mas o banco não mostrava nenhuma execução duplicada.
causa raiz
A trava anti-duplicação usava cache em arquivo, e o Cloud Run sobe de 1 a 100 instâncias com disco próprio: cada uma via só a sua trava.
correção
Trava atômica (Cache::add) em cache compartilhado no PostgreSQL, segunda trava por conteúdo (sha256, 24 h), sem reenvio em caso de timeout e remoção de um caminho legado que também enviava.
  • Laravel
  • Cloud Run
  • PostgreSQL
  • WhatsApp
Evig · set 2026 Campanha de notícias enviada em dobro retry_after acima do timeout do job
sintoma
A mesma campanha chegava duas vezes para o mesmo usuário.
causa raiz
O retry_after da fila (90 s) era menor que o tempo do job: outro worker pegava o job enquanto o primeiro ainda enviava.
correção
retry_after de 900 s acima do timeout do worker, trava por usuário e campanha, batch nomeado pela campanha, backoff 30/120/300 s e métrica de envios duplicados ignorados.
  • Laravel Queues
  • Supervisor
Evig · set 2026 Deploy derrubava o CRM com permission denied grants idempotentes no deploy
sintoma
Depois de um deploy, o CRM respondia 500 com SQLSTATE[42501].
causa raiz
As migrations rodavam com outra role, dona das tabelas novas, e ALTER DEFAULT PRIVILEGES sem FOR ROLE só cobre objetos da role que rodou o comando.
correção
Comando idempotente que concede só DML logo após o migrate, default privileges da role de migration e deploy que falha cedo se a config estiver errada. Documentado em runbook.
  • PostgreSQL
  • Laravel
  • deploy
Evig · set 2026 Admin de uma empresa editava funcionários de outra escopo por empresa em toda busca
sintoma
Qualquer admin que soubesse o ID podia alterar o e-mail, o CPF e o telefone de funcionários de outra empresa, ou excluí-los.
causa raiz
As rotas de update e destroy buscavam o funcionário por ID sem checar a empresa (IDOR).
correção
Busca sempre escopada pela empresa de quem chama, 404 para ID de fora, revisão dos endpoints em lote e testes de regressão para cada caminho.
  • Laravel
  • multi-tenant
  • PHPUnit
Evig · jun–jul 2026 Webhook podia ser forjado segredo do ambiente + comparação em tempo constante
sintoma
A assinatura do webhook usava um segredo fixo no código, e o endpoint interno só checava se havia header de autorização.
causa raiz
Valores de placeholder no código, sem validação de configuração no boot.
correção
Segredo vindo do ambiente (vazio = rejeita), chave interna comparada com crypto/subtle, corpo limitado a 1 MiB, boot falha sem segredos. Depois: tokens assinados com nonce de uso único, eventos com mais de 5 min descartados e rate limit nas rotas públicas.
  • Go
  • HMAC
  • rate limit
ver os outros 6 problemas
Evig · set 2026 Login por CPF podia cruzar empresas lookup escopado pelo tenant
sintoma
Uma identidade encontrada em outra empresa podia abrir sessão ou consumir convite.
causa raiz
A busca de identidade a cada turno não respeitava o tenant do diretório.
correção
Toda busca respeita o tenant; divergência vira “não encontrado” e alimenta uma métrica, convite ambíguo recebe 409, tudo atrás de feature flag.
  • Go
  • multi-tenant
  • Prometheus
Evig · jul 2026 Worker de produção consumia a fila do Dev papel do worker fixado por ambiente
sintoma
Comandos ficavam sem resposta e eventos do Dev eram processados com credenciais de produção.
causa raiz
Duas máquinas compartilhavam a mesma URL de banco, então o worker de produção pegava eventos do Dev.
correção
Papel do worker fixado por ambiente, runbook de verificação que não imprime segredos e validação de configuração que não derruba workers que só fazem back-end.
  • Go
  • AWS
  • runbook
Evig · jun 2026 Mensagem marcada como enviada sem chegar ao usuário lease com reclaim no outbox
sintoma
Se a instância morria no meio do envio, todas as tentativas seguintes eram puladas como “duplicadas”.
causa raiz
O registro de idempotência ficava em reserved para sempre.
correção
Reclaim por lease com ON CONFLICT DO UPDATE … WHERE, sucesso (200) só com envio confirmado e 409 para o chamador tentar de novo.
  • Python
  • FastAPI
  • PostgreSQL
Evig · mai–jun 2026 IA podia inventar números em respostas financeiras guarda de números + fallback determinístico
sintoma
O modelo podia citar valores que não existiam e chegou a mostrar chaves internas ao usuário.
causa raiz
A resposta do LLM ia ao usuário sem checagem contra os dados.
correção
Todo número precisa existir no snapshot de dados, senão cai em resposta determinística; regra no contrato de saída, remoção de identificadores internos e testes com números inventados.
  • LLM
  • guardrails
  • Python
Evig · ago 2026 Testes com 100% de cobertura, boot quebrado no Postgres real teste de contrato de banco
sintoma
O serviço de autenticação morria na inicialização num PostgreSQL real.
causa raiz
Um valor NULL na coluna roles violava uma restrição NOT NULL; os testes cobriam a linha, não o contrato do banco.
correção
Correção do bootstrap, migration que une usuários duplicados por e-mail (window function) e timeout de SMTP sem retry, para não reenviar senha temporária.
  • Go
  • PostgreSQL
  • SMTP
Digital LZ · nov 2025 Vazamento de memória no login por QR Code finalize único + timeout global
sintoma
Cada reconexão do WhatsApp deixava timers e listeners vivos, e a memória só crescia.
causa raiz
O fluxo de QR não limpava setInterval nem listeners e não tinha timeout geral.
correção
Uma única finalize() que remove os listeners e os timers, timeout de 5 min e limpeza antes de cada reconexão.
  • TypeScript
  • Node.js
  • Baileys

O fabricante só fez para Windows. Eu fiz para Linux.

Protocolos USB HID descobertos por engenharia reversa, falando direto com /dev/hidraw. CLI + GUI, pacotes .deb, Arch, AppImage, um repositório Flatpak assinado e, agora, versão no navegador via WebHID (Chrome/Edge), com modo demo pra testar sem o aparelho.

/dev/hidraw3capturando…

instale pelo repositório Flatpak assinado

flatpak remote-add --user --if-not-exists miguelsanz https://miguelsanzbr.github.io/flatpak/miguelsanz.flatpakrepo

Back-end em Go e Laravel, com o código aberto.

O código das empresas é privado. Esses três reescrevem do zero padrões que usei em produção: DDD e arquitetura hexagonal, TDD, PostgreSQL de verdade nos testes onde tem banco e 100% de cobertura travada no CI.

Go★ 0

outbox-gateway-demo

Gateway de mensagens com outbox no PostgreSQL: FOR UPDATE SKIP LOCKED, lease com fencing token e reaper. Nenhuma perda e nenhuma violação de ordem no k6, inclusive com kill -9. Com painel em tempo real (SSE) e botão pra derrubar um worker e ver o reaper agir.

ver no GitHub (abre em nova aba)

Go★ 0

webhook-relay

Recebe webhook, confere HMAC-SHA256 em tempo constante, barra replay (janela de 5 min + nonce) e excesso por IP, e repassa com retry. Só biblioteca padrão, em TDD, com DDD e arquitetura hexagonal travada por teste.

ver no GitHub (abre em nova aba)

PHP · Laravel★ 0

multitenant-invoicing

SaaS de cobrança multi-tenant: isolamento por empresa com teste de regressão de IDOR na web e na API, e lembrete de fatura vencida idempotente que sai pelo outbox-gateway-demo. Pest, Larastan no nível máximo, Inertia + React.

ver no GitHub (abre em nova aba)

Disponível agora. Vamos conversar?

Procuro vaga de back-end pleno (ou júnior), com início imediato: em São Paulo (híbrido ou presencial) ou remoto, como CLT ou PJ, ou como contractor remoto para empresa do exterior. Respondo rápido por e-mail ou pelo LinkedIn.

miguelsanzb.p@gmail.com