
This site is the complete rewrite of my previous portfolio, originally built with Angular 15 and Angular Universal SSR. The migration to Next.js 16 was executed through agentic AI engineering, compressing into days what would have taken weeks by hand: content extraction, redesign, data layer, API, test suite, and deployment.
The starting point was the old project structural flaw: all copy lived hardcoded as class properties across nine Angular components, with projects duplicated in two arrays that had different shapes and orderings. That content was extracted through the TypeScript compiler API into versioned JSON, validated with Zod and checked for referential integrity on every build.
The data architecture uses a single typed repository as the source of truth. Server Components consume it directly with zero network latency, while the /api/{locale}/* route handlers expose exactly the same data as a cached public API. A test compares both outputs to guarantee they never drift apart.
Bilingual support moved from a client-side toggle with no persistence to real /es and /en routes powered by next-intl, with hreflang, per-locale canonicals, and a sitemap with alternates. The result is 105 prerendered routes and zero serverless functions on the read path, enforced by a gate that fails the build if any route silently loses static rendering.
The interface was fully redesigned in an editorial-technical direction with Tailwind CSS v4: dual light and dark theme tokens, display typography, and scroll-driven CSS animations that fall back to a single shared IntersectionObserver. Swiper, animate.css, and every dead dependency from the previous project were removed.
Quality is held by 79 unit and component tests plus 75 Playwright end-to-end specs, alongside an explicit zero-comment contract: every explanation becomes a name, a constant, or a test, verified by CI on every commit.