A IA é um pedreiro rapidíssimo: levanta uma parede em segundos. Mas deixa entulho por toda parte — código morto que ninguém chama, a mesma lógica copiada em cinco lugares, `any` espalhados feito sal, animações que fazem a GPU suar. Por fora seu app parece lindo; por dentro está enferrujando. Este recurso te dá o protocolo de 7 fases que transforma seu agente de IA em cirurgião: entra no código, elimina o que está morto, funde os duplicados, corrige as animações, afina o desempenho do React, bane os `any`, acalma a GPU — e sai sem ter tocado num único pixel do que o usuário vê. A regra é sagrada: zero mudanças visuais, zero mudanças de comportamento. Só se limpa por dentro. Vou te explicar quando é preciso, por que a IA suja, o hábito que evita que apodreça, e UM prompt mestre que você passa para ela operar fase por fase.
No começo tudo é mágica. Você diz à IA "adicione uma tela de perfil" e ela aparece. "Agora um botão para exportar", e aparece. Você vai rápido, muito rápido. Mas tem um momento — quase sempre entre a terceira e a décima semana — em que algo muda. Pedir uma função pequena já não é instantâneo. A IA demora mais, se confunde, mexe em coisas que não devia. Aparecem bugs em lugares que você nem tocou. O app funciona, mas mexer nele ficou pesado, como andar com barro nos sapatos.
Esse é O momento. Não aconteceu nada dramático: não quebrou nada visível. O que aconteceu é invisível e se chama dívida técnica. A IA construiu rápido e, como todo mundo que constrói rápido, deixou entulho: código que ninguém mais usa mas continua ali, a mesma lógica copiada em cinco arquivos, tipos any que desligam todos os alarmes, animações montadas de qualquer jeito. Nada disso aparece na tela. Tudo isso faz cada mudança futura ser mais difícil.
Aqui o importante e honesto: a IA não escreve código ruim. Ela escreve código que funciona. O problema é que otimiza para "funcionar agora", não para "ser fácil de manter daqui a três meses". E essas duas coisas puxam em direções diferentes. Por isso, mesmo cada pedaço estando bom, a soma fica suja. Estes são os quatro tipos de entulho que ela deixa, e por que deixa:
any. Com isso desliga todos os alarmes que o TypeScript tem para te avisar de erros. O código compila… e explode em produção.Um cirurgião não abre e fuça a esmo: segue um protocolo, em ordem, passo a passo. A cirurgia de código é igual. São sete fases, e a ordem importa: primeiro você tira o que está morto (para não limpar código que ia apagar), depois funde duplicados, depois endurece animações, depois o desempenho do React, depois os tipos, depois acalma a GPU, e no fim emite um relatório de saúde. Aqui vai cada uma.
A primeira coisa é tirar da mesa tudo que já não respira. É a fase mais rentável porque limpa o terreno para todas as outras: não faz sentido otimizar uma função que você vai apagar.
return, if que ninguém dispara mais.Com o terreno limpo, agora você busca o que está repetido. A regra do ofício é simples: se algo aparece três vezes ou mais, deixa de ser coincidência e passa a ser um padrão que merece um único lugar onde viver.
helper) que os dois lugares chamam. Uma regra, um único lugar.48, a mesma URL, a mesma cor) → centralize em constantes com nome. Muda uma vez, muda em todos os lugares.custom hook) que encapsula a lógica uma única vez.As animações são onde a IA mais improvisa e onde mais deixa falhas sutis — coisas que não quebram mas fazem o app parecer "barato": piscadas, saltos, transições que não engatam. Estas são as regras concretas que a cirurgia verifica (valem para bibliotecas de animação do React como Motion / Framer Motion, o padrão do ecossistema):
rgba(0,0,0,0) no lugar. Quando você interpola a palavra transparent com uma cor, a transição pode dar uma piscada feia no meio do caminho; rgba(0,0,0,0) interpola limpo.borderColor. O shorthand não interpola limpo.background é problemático; anime só a propriedade específica que muda.AnimatePresence) — se os elementos de uma lista animada não têm uma key estável e única, as animações de saída quebram e os elementos saltam. A key deve ser um id real, nunca o índice do array.Aqui a cirurgia busca o trabalho que o React repete sem necessidade. Cada re-render desnecessário é um pouquinho de lentidão; somados, fazem o app parecer pesado. Quatro coisas concretas são revisadas:
useCallback e useMemo "por via das dúvidas". Não: memoizar também custa (memória, complexidade). A cirurgia só memoiza onde há benefício real e mensurável — um handler que desce para muitos filhos, um cálculo de verdade caro. Otimizar demais é a sua própria forma de sujeira.O TypeScript é o sistema de alarmes do seu código: te avisa antes de um erro chegar ao usuário. Mas só funciona se você deixar ele enxergar os tipos. Cada any é um alarme que alguém desligou. Esta fase os liga de novo.
any desativa todas as verificações. Se você de verdade não sabe o tipo, use unknown, que te obriga a verificá-lo antes de usar (seguro), em vez de any, que não obriga a nada (perigoso).as é um ponto onde o compilador parou de verificar. São revisados um por um: é verdade, ou é um remendo?any disfarçados.Esta é a fase que quase ninguém conhece e a que mais se nota em dispositivos modestos. Certos efeitos visuais são lindíssimos mas brutalmente caros de desenhar: se você abusa deles, a placa gráfica satura e o app trava. A cirurgia busca os três culpados clássicos:
@keyframes. Animar um gradiente cônico por JavaScript a cada frame é caríssimo; com keyframes o navegador otimiza.backdrop-blur, aquele efeito de vidro fosco tão da moda) obriga a GPU a olhar TUDO que está atrás do elemento e borrar em tempo real. Um só, grande, tudo bem. Vinte pequenos se repetindo é como pedir para a placa borrar a tela vinte vezes por frame. É aí que o notebook do seu usuário começa a soprar a ventoinha.Toda cirurgia termina com um laudo. Sem relatório você não sabe o que foi tocado nem pode confiar que não houve danos colaterais. A última fase é o agente te entregar um resumo claro, no seu idioma, de tudo que fez:
any eliminados, quantas animações corrigidas, etc.O erro mais comum é pensar a cirurgia como algo que você faz uma vez, quando já está tudo uma bagunça. Não. O código de IA suja CONTINUAMENTE, porque cada sessão de construção deixa entulho novo. A cirurgia não é uma operação de emergência: é a limpeza de dentes que você faz a cada seis meses para nunca chegar ao canal.
Aqui está a peça-chave: UM único prompt que transforma seu agente de código num cirurgião que aplica as 7 fases, em ordem, a um arquivo ou módulo — sem tocar em nada visual. Preencha os [colchetes], cole, e deixe operar. Um conselho antes: faça um commit no GitHub primeiro (sua rede de segurança) e mire em UM módulo, não no projeto todo.
Aja como um cirurgião de código especialista em debug. Você vai operar este arquivo/módulo: [CAMINHO DO ARQUIVO OU PASTA, ex: src/components/Dashboard/]. A stack é: [ex: React + TypeScript + Motion/Framer Motion + Tailwind]. REGRA SAGRADA E INVIOLÁVEL: ZERO mudanças visuais e ZERO mudanças de comportamento. O app deve parecer e se comportar EXATAMENTE igual antes e depois. Você só limpa e endurece por dentro. Diante de qualquer dúvida entre limpar mais ou preservar o comportamento, SEMPRE ganha preservar o comportamento. Não apague nada se você não tiver certeza de que não é usado; marque e me pergunte. Aplique estas 7 fases EM ORDEM. Não passe para a próxima sem terminar a anterior. Ao fim de cada fase, me diga em uma linha o que encontrou e o que mudou. FASE 1 — CÓDIGO MORTO: elimine arquivos órfãos (que ninguém importa), exports sem consumidores, variáveis/funções/imports sem uso, e ramos de código inalcançáveis. Antes de apagar algo duvidoso, liste para mim e espere minha confirmação. FASE 2 — DUPLICADOS: busque lógica repetida (→ extraia para um helper), números/textos mágicos repetidos (→ constantes com nome), JSX repetido 3+ vezes (→ subcomponente com props), e o padrão useState+handler repetido (→ custom hook). NÃO funda coisas que só se parecem mas mudam por razões diferentes. FASE 3 — REGRAS DE ANIMAÇÃO: corrija transparent→rgba(0,0,0,0), elimine transition duplicado, não anime o shorthand border (use borderColor), troque background→backgroundColor em animações, e garanta keys estáveis e únicas (nunca o índice) em listas com AnimatePresence. FASE 4 — DESEMPENHO REACT: envolva em useCallback os handlers passados como props, memoize com useMemo os cálculos caros, corrija os arrays de dependências do useEffect (nem a mais nem a menos), e adicione key estável a cada .map. NÃO memoize por via das dúvidas: só onde houver benefício real. FASE 5 — TYPESCRIPT: substitua cada any por um tipo real ou por unknown; revise cada cast 'as Tipo' (é verdade ou é remendo?); internalize os exports que só são usados no próprio arquivo; e tipe as props de todos os componentes. FASE 6 — COLAPSO DE GPU: mova gradientes cônicos animados para CSS @keyframes; consolide os repeat:Infinity se houver muitos ao mesmo tempo; e substitua backdrop-blur por um fundo sólido/semitransparente em elementos pequenos que se repetem muitas vezes. FASE 7 — RELATÓRIO DE SAÚDE: ao terminar, me entregue um relatório com: contagem por fase, total de linhas expurgadas, a confirmação explícita de que você não mudou nada visual nem de comportamento, e uma lista do que você decidiu NÃO tocar e por quê. Trabalhe fase por fase, me mostre o diff de cada uma, e se algo colocar em risco a regra sagrada, PARE e me pergunte antes de seguir.
Uma cirurgia não termina quando você fecha: termina quando você confirma que o paciente está bem. A regra sagrada (zero mudanças de comportamento) precisa ser comprovada, não só confiada. Há duas redes de segurança automáticas que confirmam isso em segundos, e que seu agente pode rodar sem você programar nada.
# 1) A checagem de tipos: zero erros = a cirurgia não quebrou os contratos npx tsc --noEmit # 2) Os testes: se passavam antes e passam igual depois, # o comportamento foi preservado npm test
git diff. Regra de leitura: quase tudo que você ver deve ser linhas VERMELHAS (apagadas) ou movimentos de lugar, não lógica nova. Se aparecerem cadeias de texto que o usuário vê mudadas, valores padrão diferentes, ou condições novas, aí há uma possível ferida — pergunte à IA por quê antes de aceitar.Para não complicar: a maior parte da cirurgia o seu agente de código faz sozinho, pelo chat. O seu papel é dirigir e aprovar. Esta é a divisão.
any e as animações mal montadas — você só dá o prompt mestre.tsc e os testes para confirmar que não quebrou nada.Join 4,200+ builders. No credit card. Build your first app with AI in minutes.