Portfolio
Portfolio personal en jmrg.dev. Next.js 16 con App Router y React 19, en español e inglés con rutas traducidas, todo el contenido servido desde la API REST y nada escrito en el código.
Next.js · React · TypeScript · Tailwind CSS · next-intl · Playwright

Qué resuelve
El sitio anterior mezclaba datos y presentación, y no tenía forma de saber si un cambio empeoraba la carga. Aquí cada sección declara qué campos del API consume, y ninguna entra sin medir antes y después sobre el build de producción.
Renderizado en el servidor por defecto
Los componentes solo llegan al navegador cuando necesitan interacción, y en la hoja más honda que la necesite: marcarlo arriba arrastraría el árbol entero al cliente. El artículo se convierte a HTML en el servidor, así que el texto llega completo al indexador y no cuesta un solo byte de JavaScript en el navegador.
Las secciones de la portada se hidratan por partes en lugar de en una sola pasada bloqueante, para que la página responda antes al primer gesto.
Dos idiomas de verdad
Prefijo de idioma siempre y rutas traducidas: /es/proyectos y /en/projects son la misma página
en dos idiomas, no dos páginas distintas. Cambiar de idioma conserva la página en la que estás,
incluido el artículo o la ficha concretos.
Las etiquetas alternativas declaran solo los idiomas en los que el contenido existe, y el mapa del sitio hace lo mismo por entrada. Anunciar una traducción que no existe manda a un buscador a un 404.
Un mundo visual, no una plantilla
La interfaz es un panel de máquina: tipografía de dato reservada a los datos, un solo color de acento, movimiento barato hecho con CSS y ningún efecto que pida una librería de animación. Las piezas que vienen de un catálogo se reescriben contra los tokens del panel en lugar de instalarse.
Stack
| Capa | Tecnología |
|---|---|
| Framework | Next.js 16, App Router, React 19 |
| Estilos | Tailwind CSS 4, configuración en CSS |
| Idiomas | next-intl, rutas traducidas |
| Datos | API REST propia, leída desde el servidor |
| Pruebas | Playwright |