La IA es un albañil rapidísimo: levanta una pared en segundos. Pero deja escombros por todas partes — código muerto que nadie llama, la misma lógica copiada en cinco sitios, `any` regados como sal, animaciones que hacen sudar a la GPU. Por fuera tu app se ve preciosa; por dentro se está oxidando. Este recurso te da el protocolo de 7 fases que convierte a tu agente de IA en un cirujano: entra al código, elimina lo muerto, funde los duplicados, corrige las animaciones, afina el rendimiento de React, destierra los `any`, calma la GPU — y sale sin haber tocado ni un pixel de lo que el usuario ve. La regla es sagrada: cero cambios visuales, cero cambios de comportamiento. Solo se limpia por dentro. Te explico cuándo hace falta, por qué la IA ensucia, el hábito que evita que se pudra, y UN prompt maestro que le pasas para que opere fase por fase.
Al principio todo es magia. Le dices a la IA "añade una pantalla de perfil" y aparece. "Ahora un botón para exportar", y aparece. Vas rápido, muy rápido. Pero hay un momento — casi siempre entre la tercera y la décima semana — en que algo cambia. Pedir una función pequeña ya no es instantáneo. La IA tarda más, se confunde, toca cosas que no debía. Aparecen bugs en sitios que ni tocaste. La app funciona, pero moverla se volvió pesado, como caminar con barro en los zapatos.
Ese es EL momento. No pasó nada dramático: no se rompió nada visible. Lo que pasó es invisible y se llama deuda técnica. La IA construyó rápido y, como todo el que construye rápido, dejó escombros: código que ya nadie usa pero sigue ahí, la misma lógica copiada en cinco archivos, tipos any que apagan todas las alarmas, animaciones montadas de cualquier forma. Nada de eso se ve en la pantalla. Todo eso hace que cada cambio futuro sea más difícil.
Aquí lo importante y honesto: la IA no escribe código malo. Escribe código que funciona. El problema es que optimiza para "que funcione ahora", no para "que sea fácil de mantener dentro de tres meses". Y esas dos cosas tiran en direcciones distintas. Por eso, aunque cada trozo esté bien, la suma se ensucia. Estos son los cuatro tipos de escombro que deja, y por qué los deja:
any. Con eso apaga todas las alarmas que TypeScript tiene para avisarte de errores. El código compila… y explota en producción.Un cirujano no abre y hurga al azar: sigue un protocolo, en orden, paso a paso. La cirugía de código es igual. Son siete fases, y el orden importa: primero quitas lo muerto (para no limpiar código que ibas a borrar), luego fundes duplicados, luego endureces animaciones, luego el rendimiento de React, luego los tipos, luego calmas la GPU, y al final emites un reporte de salud. Aquí va cada una.
Lo primero es sacar de la mesa todo lo que ya no respira. Es la fase más rentable porque limpia el terreno para todas las demás: no tiene sentido optimizar una función que vas a borrar.
return, if que ya nadie dispara.Con el terreno limpio, ahora buscas lo que está repetido. La regla del oficio es simple: si algo aparece tres veces o más, deja de ser casualidad y pasa a ser un patrón que merece un solo lugar donde vivir.
helper) que ambos sitios llaman. Una regla, un solo lugar.48, la misma URL, el mismo color) → centralízalos en constantes con nombre. Cambias una vez, cambia en todos lados.custom hook) que encapsula la lógica una sola vez.Las animaciones son donde la IA improvisa más y donde más fallos sutiles deja — cosas que no rompen pero que hacen que la app se sienta "barata": parpadeos, saltos, transiciones que no arrancan. Estas son las reglas concretas que la cirugía verifica (aplican a librerías de animación de React como Motion / Framer Motion, el estándar del ecosistema):
rgba(0,0,0,0) en su lugar. Cuando interpolas la palabra transparent con un color, la transición puede dar un parpadeo feo a mitad de camino; rgba(0,0,0,0) interpola limpio.borderColor. El shorthand no interpola limpio.background es problemático; anima solo la propiedad específica que cambia.AnimatePresence) — si los elementos de una lista animada no tienen una key estable y única, las animaciones de salida se rompen y los elementos saltan. La key debe ser un id real, nunca el índice del array.Aquí la cirugía busca el trabajo que React repite sin necesidad. Cada re-render innecesario es un poquito de lentitud; sumados, hacen que la app se sienta pesada. Cuatro cosas concretas se revisan:
useCallback y useMemo "por si acaso". No: memoizar también cuesta (memoria, complejidad). La cirugía solo memoiza donde hay un beneficio real y medible — un handler que baja a muchos hijos, un cómputo de verdad caro. Optimizar de más es su propia forma de suciedad.TypeScript es el sistema de alarmas de tu código: te avisa antes de que un error llegue al usuario. Pero solo funciona si le dejas ver los tipos. Cada any es una alarma que alguien apagó. Esta fase las vuelve a encender.
any desactiva todas las comprobaciones. Si de verdad no sabes el tipo, usa unknown, que te obliga a verificarlo antes de usarlo (seguro), en vez de any, que no obliga a nada (peligroso).as es un punto donde el compilador dejó de comprobar. Se revisan uno por uno: ¿es cierto, o es un parche?any disfrazados.Esta es la fase que casi nadie conoce y la que más se nota en dispositivos modestos. Ciertos efectos visuales son bellísimos pero brutalmente caros de dibujar: si abusas de ellos, la tarjeta gráfica se satura y la app va a tirones. La cirugía busca los tres culpables clásicos:
@keyframes. Animar un gradiente cónico por JavaScript en cada frame es carísimo; con keyframes el navegador lo optimiza.backdrop-blur, ese efecto de cristal esmerilado tan de moda) obliga a la GPU a mirar TODO lo que hay detrás del elemento y difuminarlo en tiempo real. Uno solo, grande, no pasa nada. Veinte pequeños repitiéndose es como pedirle a la tarjeta que difumine la pantalla veinte veces por frame. Ahí es donde el portátil de tu usuario empieza a soplar el ventilador.Toda cirugía termina con un parte. Sin reporte no sabes qué se tocó ni puedes confiar en que no hubo daños colaterales. La última fase es que el agente te entregue un resumen claro, en tu idioma, de todo lo que hizo:
any eliminados, cuántas animaciones corregidas, etc.El error más común es pensar la cirugía como algo que haces una vez, cuando ya está todo hecho un desastre. No. El código de IA se ensucia CONTINUAMENTE, porque cada sesión de construcción deja escombro nuevo. La cirugía no es una operación de urgencia: es la limpieza de dientes que haces cada seis meses para no llegar nunca a la endodoncia.
Aquí está la pieza clave: UN solo prompt que convierte a tu agente de código en un cirujano que aplica las 7 fases, en orden, a un archivo o módulo — sin tocar nada visual. Llena los [corchetes], pégalo, y deja que opere. Un consejo antes: haz un commit en GitHub primero (tu red de seguridad) y apúntale a UN módulo, no a todo el proyecto.
Actúa como un cirujano de código experto en debug. Vas a operar este archivo/módulo: [RUTA DEL ARCHIVO O CARPETA, ej: src/components/Dashboard/]. El stack es: [ej: React + TypeScript + Motion/Framer Motion + Tailwind]. REGLA SAGRADA E INVIOLABLE: CERO cambios visuales y CERO cambios de comportamiento. La app debe verse y comportarse EXACTAMENTE igual antes y después. Solo limpias y endureces por dentro. Ante cualquier duda entre limpiar más o preservar el comportamiento, SIEMPRE gana preservar el comportamiento. No borres nada si no estás seguro de que no se usa; márcalo y pregúntame. Aplica estas 7 fases EN ORDEN. No pases a la siguiente sin terminar la anterior. Al final de cada fase, dime en una línea qué encontraste y qué cambiaste. FASE 1 — CÓDIGO MUERTO: elimina archivos huérfanos (que nadie importa), exports sin consumidores, variables/funciones/imports sin usar, y ramas de código inalcanzables. Antes de borrar algo dudoso, lístamelo y espera mi confirmación. FASE 2 — DUPLICADOS: busca lógica repetida (→ extrae a un helper), números/textos mágicos repetidos (→ constantes con nombre), JSX repetido 3+ veces (→ subcomponente con props), y el patrón useState+handler repetido (→ custom hook). NO fundas cosas que solo se parecen pero cambian por razones distintas. FASE 3 — REGLAS DE ANIMACIÓN: corrige transparent→rgba(0,0,0,0), elimina transition duplicado, no animes el shorthand border (usa borderColor), cambia background→backgroundColor en animaciones, y asegura keys estables y únicas (nunca el índice) en listas con AnimatePresence. FASE 4 — RENDIMIENTO REACT: envuelve en useCallback los handlers que se pasan como props, memoiza con useMemo los cómputos caros, corrige los arrays de dependencias de useEffect (ni de más ni de menos), y añade key estable a cada .map. NO memoices por si acaso: solo donde haya beneficio real. FASE 5 — TYPESCRIPT: reemplaza cada any por un tipo real o por unknown; revisa cada cast 'as Tipo' (¿es cierto o es un parche?); internaliza los exports que solo se usan en su propio archivo; y tipa las props de todos los componentes. FASE 6 — COLAPSO DE GPU: mueve gradientes cónicos animados a CSS @keyframes; consolida los repeat:Infinity si hay muchos a la vez; y reemplaza backdrop-blur por un fondo sólido/semitransparente en elementos pequeños que se repiten muchas veces. FASE 7 — REPORTE DE SALUD: al terminar, entrégame un reporte con: conteo por fase, total de líneas purgadas, la confirmación explícita de que no cambiaste nada visual ni de comportamiento, y una lista de lo que decidiste NO tocar y por qué. Trabaja fase por fase, muéstrame el diff de cada una, y si algo pone en riesgo la regla sagrada, PARA y pregúntame antes de seguir.
Una cirugía no termina cuando cierras: termina cuando confirmas que el paciente está bien. La regla sagrada (cero cambios de comportamiento) hay que comprobarla, no solo confiar en ella. Hay dos redes de seguridad automáticas que te lo confirman en segundos, y que tu agente puede correr sin que tú programes nada.
# 1) El chequeo de tipos: cero errores = la cirugía no rompió los contratos npx tsc --noEmit # 2) Los tests: si pasaban antes y pasan igual después, # el comportamiento se preservó npm test
git diff. Regla de lectura: casi todo lo que veas deben ser líneas ROJAS (borradas) o movimientos de sitio, no lógica nueva. Si aparecen cadenas de texto que el usuario ve cambiadas, valores por defecto distintos, o condiciones nuevas, ahí hay una posible herida — pregúntale a la IA por qué antes de aceptar.Para que no se complique: la mayor parte de la cirugía la hace tu agente de código solo, por el chat. Lo tuyo es dirigir y aprobar. Este es el reparto.
any y las animaciones mal montadas — tú solo le das el prompt maestro.tsc y los tests para confirmar que no rompió nada.Únete a 4.200+ creadores. Sin tarjeta. Construye tu primera app con IA en minutos.