Pedro Mansan / engenheiro full stack

Trabalhos

2022 – 2026 · Mindz · antes disso, Frutap

A Mindz é um SaaS multi-tenant para cursos online e comunidades de membros. Checkout, hospedagem de vídeo, e-mail marketing, rastreamento de afiliados, comentários, gamificação — toda superfície que um criador precisa para rodar um curso pago, tudo dentro do mesmo monolito Django. Entrei em 2022 e fiquei até o início de 2026. O que segue é o trabalho do qual mais me orgulho, ordenado pelo grau de interesse técnico que acabou tendo.

Migrando o design system com 40 agentes Claude Code

A plataforma rodava em Fomantic UI havia anos. O time de produto havia decidido migrar para Vuexy fazia um ano e meio, mas ninguém tinha tempo de tocar a migração de fato: mais de 150 páginas, cada uma costurada com templates Django e jQuery inline. A estimativa sempre caía em algo entre três e cinco meses de trabalho em par.

Orquestrei tudo em uma semana com o Claude Code. Dez agentes líderes, quatro sub-agentes cada um, quarenta agentes em paralelo em git worktrees isolados. Cada líder cuidava de uma fatia do app — checkout, aulas, membros, afiliados etc. — e um CLAUDE.md hierárquico mantinha todos alinhados com as mesmas convenções de componentes.

Os números menos glamourosos: cerca de 82% dos PRs entraram com revisão leve. Os outros 18% precisaram de reescrita humana de verdade, quase sempre nas páginas que misturavam jQuery legado com ilhas Vue. Saber onde a orquestração iria falhar foi mais importante do que a velocidade nos casos fáceis.

De RBAC para ABAC

O modelo de autorização era uma tabela de papéis plana que tinha crescido além do que suportava. Donos de curso tinham um formato de permissão diferente de coproprietários, que eram diferentes de afiliados, que eram diferentes de revendedores white-label, que compartilhavam algumas-mas-não-todas as permissões com administradores da plataforma. Cada nova superfície de produto forçava a criação de um papel novo.

Liderei a refatoração para controle de acesso baseado em atributos. Sujeitos, recursos, ações e um dicionário de ambiente — checados por um único motor de política em vez de ramos if user.role == ... espalhados por view. Migrar sem quebrar ninguém significou rodar o ABAC em modo shadow contra as checagens RBAC existentes por duas semanas antes de virar a chave. Zero regressões de autorização em produção.

Roteador multi-DB para banco-por-tenant

A Mindz usa um banco MySQL por tenant por questões de raio de impacto e compliance. Essa decisão é ótima até um usuário precisar entrar uma única vez e trocar entre várias plataformas que ele possui ou cogerencia. Construí o roteador de banco do Django e o contexto de tenant em nível de sessão que torna a troca invisível para o código da aplicação.

A maior parte da dificuldade ficou nos cantos pouco glamourosos: joins ORM cross-DB (não faça), migrations em N bancos sem derrubar a plataforma, e manter a suíte de testes honesta com factories que respeitam a conexão ativa.

OAuth2 server-side

Clientes embedam o player de cursos como iframe dentro dos próprios apps. Isso significou que precisávamos ser o servidor OAuth2, não só cliente — emitindo tokens, rotacionando credenciais sem trancar clientes do lado de fora, e mantendo a trilha de auditoria limpa o suficiente para uma revisão jurídica conseguir rastrear qualquer token até a requisição que o emitiu.

Coisas menores das quais ainda me orgulho

Uma nova versão da API privada da plataforma; uma biblioteca de componentes Vue reutilizáveis que o time de front-end adotou como padrão; caçadas sistemáticas a N+1 que levaram os dashboards mais lentos de doze segundos para menos de um; um nó customizado de n8n que permite que pessoas não-engenheiras conectem eventos da Mindz ao resto do stack sem depender de mim.

Antes da Mindz: Frutap, aos 17

Meu primeiro trabalho foi como Jovem Aprendiz na ala administrativa da Frutap, uma fábrica de iogurtes e laticínios no interior de São Paulo. Era para arquivar notas fiscais. Em vez disso, aprendi Python o suficiente para construir um classificador Naive Bayes que fazia a categorização por mim — e com mais precisão que a planilha que eu estava substituindo. Eles me moveram para o lado técnico e nunca mais olhei para trás.