Portfolio Personal
La web que estás viendo ahora mismo. Un portfolio multilingüe con modo oscuro/claro, timelines animados, casos de estudio de proyectos y un sistema de traducción propio — sin librerías externas.
Sistema multilingüe propio sin dependencias externas
Modo oscuro/claro con transiciones animadas
Páginas de proyecto editoriales con capitulares y citas destacadas
Generación estática para cargas rápidas en Vercel Hobby
Este portfolio es en sí mismo un proyecto que diseñé y construí desde cero. El objetivo era una web que se sintiera pulida y profesional mientras fuera técnicamente limpia por dentro — sin librerías de componentes infladas, sin dependencias innecesarias y con control total sobre cada detalle.
La web es multilingüe usando un sistema de traducción propio basado en diccionarios TypeScript y segmentos dinámicos del App Router de Next.js. No hay librerías de traducción externas — solo diccionarios TypeScript, un middleware para detección del idioma del navegador y un selector de idioma. Todas las páginas se generan estáticamente en build para cada idioma soportado, manteniendo tiempos de carga rápidos en el tier gratuito de Vercel.
El diseño usa un sistema de modo oscuro/claro con paletas de colores cuidadosamente elegidas para ambos temas.
Las animaciones son intencionadas y sutiles: un timeline con Framer Motion que se rellena al hacer scroll, pulsos de luz CSS que viajan por curvas decorativas y transiciones suaves de aparición para las secciones de contenido.
Las páginas de proyecto son casos de estudio completos con layouts editoriales — capitulares, citas destacadas, barras laterales fijas — diseñados para leerse como artículos de revista en lugar de tarjetas de portfolio genéricas. La cuadrícula de iconos usa SVGs oficiales de Simple Icons para una representación auténtica de las marcas.
Toda la web está construida con Next.js 16, TypeScript y Tailwind CSS v4, desplegada en Vercel. Sin CMS, sin base de datos, sin dependencias en runtime más allá de React y Framer Motion. El código es lo suficientemente limpio como para que añadir un nuevo proyecto o idioma sea simplemente añadir entradas a un archivo TypeScript.