Do problema ao deploy. Descubro o problema, decido a solução, escrevo o código e confiro o resultado em produção. Venho de produto (PO, PM, Head of Product) e hoje entrego código em fintech B2B, com um sistema próprio de agentes de IA que trabalha sob regras e travas.
From problem to deploy. I find the problem, decide the solution, write the code and check the result in production. I come from product (PO, PM, Head of Product) and now ship code in B2B fintech, backed by my own system of AI agents that runs under explicit rules and guardrails.
18ddo FitBank ao 1º clienteFitBank to first customer08/10 → 26/10/2026Oct 8 → Oct 26, 2026
git activity · PRs mergeados por dia· merged PRs per day
menoslessmaismore
01 / métodomethod
Como eu trabalhoHow I work
01
ProblemaProblem
Meço antes de mudar: banco de produção (só leitura), PostHog, logs.
Measure before changing: production database (read-only), PostHog, logs.
02
DecisãoDecision
Opções com recomendação. Decido recorte e regra; risco técnico alinho com o tech lead.
Options with a recommendation. I decide scope and rule; technical risk goes through the tech lead.
03
CódigoBuild
Com IA, em PR pequeno, revisor independente e CI como juiz.
With AI, in small PRs, an independent reviewer and CI as the judge.
04
OperaçãoOperate
Alarmes e runbook antes do go-live. Deploy de produção só por OIDC.
Alarms and runbook before go-live. Production deploys only via OIDC.
05
ResultadoResult
Confiro em produção e meço. Incidente recorrente vira fix definitivo.
Verify in production and measure. A recurring incident becomes a permanent fix.
02 / casoscases
Patches em produçãoPatches in production
Frentes que conduzi no ContrataPJ, plataforma B2B de gestão de prestadores PJ: contratos, notas fiscais e pagamentos.
Work I owned at ContrataPJ, a B2B platform for managing independent contractors in Brazil: contracts, service invoices and payouts.
[PATCH 1/4]
payments: go-live do FitBank, substituindo o Asaaspayments: FitBank go-live, replacing Asaas
2026-10
problemaproblem
Migrar pagamentos sem dashboard do parceiro e com a operação manual na cabeça das pessoas.
Move payments with no partner dashboard and the manual operation living in people's heads.
o que fizwhat I did
Fechei com o FitBank URL de produção, mTLS, conta de taxa, P2P e webhooks. Runbook, 10 alarmes no CloudWatch e fluxo de estorno de repasse recusado. Achei a causa do 401 nos webhooks: conflito de certificado do lado do parceiro.
Closed production URL, mTLS, fee account, P2P and webhooks with FitBank. Runbook, 10 CloudWatch alarms and a rejected-payout refund flow. Found the cause of the webhook 401s: a certificate conflict on the partner's side.
resultadoresult
Produção validada em 21/10, webhooks em 23/10, primeiro cliente real em 26/10.
Production validated Oct 21, webhooks Oct 23, first real customer Oct 26.
[PATCH 2/4]
kyc: regra de titularidade com Serpro e e-CNPJkyc: ownership rule backed by Serpro and e-CNPJ
2026-10
problemaproblem
Um MEI foi aprovado com o CPF errado, repassado por WhatsApp.
A sole proprietor was approved with the wrong taxpayer ID, passed along over WhatsApp.
decisãodecision
O nome nunca libera sozinho. O Serpro confirma o CPF; um e-CNPJ válido basta; cada contratante escolhe o modo de revisão.
A name alone never approves. Serpro confirms the ID; a valid e-CNPJ is enough; each client picks its review mode.
resultadoresult
Spec e 18+ PRs em dois dias, anunciado a 205 contratantes.
Spec and 18+ PRs in two days, announced to 205 client companies.
[PATCH 3/4]
nfse: emissão automática com aviso recortado por dadonfse: automatic invoicing with a data-targeted launch
2026-09..10
problemaproblem
Feature pronta, pouca adoção. E-mail para todos atingiria quem só faz upload.
Feature shipped, low adoption. Emailing everyone would hit people who only upload.
o que fizwhat I did
Recortei o público no banco: 2.957 vínculos viraram 486 e-mails.
Targeted the audience in the database: 2,957 links became 486 emails.
resultadoresult
De 7 para 26 configurações novas (3,7×).
From 7 to 26 new setups (3.7×).
[PATCH 4/4]
crawler: medir antes de mexer no logincrawler: measure before touching the login
2026-10
problemaproblem
"88% dos erros são login": o número que todo mundo repetia.
"88% of errors are login": the number everyone repeated.
o que fizwhat I did
Mostrei que vinha de uma classificação antiga; o problema real era a validação da senha. Instrumentei o motivo da recusa antes de construir.
Showed it came from an outdated classification; the real issue was password validation. Instrumented the rejection reason before building.
resultadoresult
Prioridade decidida com dado, não com premissa.
Priority set by data, not by assumption.
tambémalsoLotes de sugestão de nota (10+ PRs, limite duro de 120 s no processamento)Batched invoice suggestions (10+ PRs, 120 s hard limit on processing)
API pública v1: chaves por contratante, referência em Scalar, limites (~20 PRs)Public API v1: per-client keys, Scalar reference, rate limits (~20 PRs)
Adequação BaaS do Asaas à Resolução Conjunta 16/2025Asaas BaaS conformance with Joint Resolution 16/2025
Suporte nível 3: logs + banco de produção + código até o arquivo:linha; correção de dado sempre como migration revisadaTier-3 support: logs + production database + code down to file:line; data fixes always as reviewed migrations
03 / IAAI
IA com governançaAI with governance
Um conjunto de agentes sobre o Claude Code que multiplica minha entrega. A IA executa sob travas; produto e merge têm dono humano.
A set of agents on top of Claude Code that multiplies my output. AI executes under guardrails; product and merge have a human owner.
pstree -a claude
claude
├─ coding-fleetissues → worktree por issue → código → revisor independente → PR
├─ ticket-fleet
│ ├─ reader quarentena: lê o texto do cliente, sem outras ferramentas
│ └─ executor nunca vê o texto bruto; diagnostica e corrige
├─ merge-fleetleva cada PR a CI verde + revisão aprovada
└─ guardrailshooks contra push indevido, vazamento e credencial
claude
├─ coding-fleetissues → worktree per issue → code → independent reviewer → PR
├─ ticket-fleet
│ ├─ reader quarantined: reads customer text, no other tools
│ └─ executor never sees raw text; diagnoses and fixes
├─ merge-fleetdrives each PR to green CI + approved review
└─ guardrailshooks against bad pushes, leaks and credentials
Meça antes de mudar.Measure before you change.O número que todo mundo repete pode estar errado.The number everyone repeats may be wrong.
Decisão de produto tem dono.Product decisions have an owner.Opções com recomendação, e alguém decide.Options with a recommendation, and someone decides.
Fix definitivo acima de workaround.Permanent fix over workaround.Como isso nunca mais acontece?How does this never happen again?
Mudança mínima, PR pequeno.Minimal change, small PR.Branch da main, squash, CI como juiz.Branch off main, squash, CI as the judge.
PR pra quem não lê diff.PRs for people who don't read diffs.Impacto no fluxo e na UX; rollback e flags.Flow and UX impact; rollback and flags.
Produção é sagrada.Production is sacred.Deploy só por OIDC, banco só leitura.Deploy only via OIDC, database read-only.
06 / trajetóriacareer
git log
git log --graph --oneline career
* 2026-08 ContrataPJ Product Engineer (HEAD)
* 2025-12 ContrataPJ Head of Product / Technical PM
* 2024 uCondo Product Owner / PM 700k+ usuários
* 2023 IBM Product Owner
* 2022 Stefanini IT Project Manager
* 2021 Dix Capital Project / Product Manager fintech de crédito
* 2026-08 ContrataPJ Product Engineer (HEAD)
* 2025-12 ContrataPJ Head of Product / Technical PM
* 2024 uCondo Product Owner / PM 700k+ users
* 2023 IBM Product Owner
* 2022 Stefanini IT Project Manager
* 2021 Dix Capital Project / Product Manager credit fintech