
Este sitio es la reescritura completa de mi portfolio anterior, construido en Angular 15 con SSR de Angular Universal. La migración a Next.js 16 se ejecutó con ingeniería asistida por IA agéntica, lo que permitió completar en días un trabajo que de forma manual habría tomado semanas: extracción de contenido, rediseño, capa de datos, API, suite de tests y despliegue.
El punto de partida fue el problema estructural del proyecto viejo: los textos vivían hardcodeados como propiedades de clase dentro de nueve componentes Angular, con los proyectos duplicados en dos arrays con formas y órdenes distintos. Todo ese contenido se extrajo mediante la API del compilador de TypeScript hacia JSON versionado, validado con Zod y con integridad referencial verificada en cada build.
La arquitectura de datos usa un repositorio tipado único como fuente de verdad. Los Server Components lo consumen directamente, sin latencia de red, y los Route Handlers de /api/{locale}/* exponen exactamente los mismos datos como API pública cacheada. Un test compara ambas salidas para garantizar que nunca diverjan.
El bilingüe pasó de un toggle client-side sin persistencia a rutas reales /es y /en con next-intl, con hreflang, canonical por idioma y sitemap con alternates. El resultado son 105 rutas prerenderizadas y cero funciones serverless en el camino de lectura, verificado por un gate que falla el build si alguna ruta pierde el renderizado estático en silencio.
La interfaz se rediseñó por completo en dirección editorial técnica con Tailwind CSS v4: tokens duales de tema claro y oscuro, tipografía display, y animaciones basadas en scroll-driven CSS que caen a un único IntersectionObserver compartido. Se eliminaron Swiper, animate.css y todas las dependencias muertas del proyecto anterior.
La calidad se sostiene con 79 tests unitarios y de componente más 75 end-to-end en Playwright, y un contrato explícito de cero comentarios en el código: cada explicación se convierte en un nombre, una constante o un test, verificado por CI en cada commit.