Design System ·

Tinta sobre papel. El portfolio corre sobre un solo sistema editorial: un escritorio crema, hojas más claras enmarcadas en tinta, un acento rojo lapicera mezclado en tres temperaturas y un tintero oscuro para cerrar. Esta página lo documenta, construida con el mismo sistema que describe.

Tinta sobre papel

La metáfora guía cada decisión. La página es un escritorio crema; cada proyecto es una hoja más clara enmarcada con borde de tinta y doble filete de imprenta; el énfasis se dibuja a mano en rojo lapicera; y el sitio termina levantando el papel para revelar el tintero: un acto final oscuro donde vive el contacto. Tres colores sostienen todo el caparazón: crema, tinta y un rojo. El resto es escala, la serif a 8vw contra 15.5px de cuerpo.

El caparazón sostiene a propósito cuatro sistemas de producto autocontenidos: Fika con su azul SaaS, Pack con su óxido cálido, Eventbrite con su rojo señal, y Gran DT que va más lejos: un mundo oscuro de cancha nocturna con tipografías propias, porque es el único que salió a producción. Cada producto se siente él mismo y no el portfolio: un escritorio, cuatro objetos distintos encima.

Tokens

Cada color es una CSS custom property con rol semántico. Tres superficies cuentan toda la historia: escritorio, hoja, tintero. El acento es un solo rojo mezclado tres veces, porque un mismo rojo no puede pasar WCAG AA sobre crema y sobre tinta a la vez.

Superficies

--cream
#EFEEE8 · el escritorio
--paper-1
#FBFAF6 · la hoja (láminas de proyecto)
--night
#1B1A16 · el tintero (acto final)

Rampa de tinta

--ink
#21211D · display y marcos
--ink-2
#34342E · texto secundario
--stone
#A6A59C · volantas sobre oscuro

Un rojo, tres temperaturas

--pen · #D4380D
·  001
Display y trazos: puntos de los ríos, contadores gigantes, reglas. Solo tamaños decorativos.
--pen-text · #B93109
[ 001 ] · texto chico
Profundizado para texto chico sobre claro: 4.5:1+ (AA) en crema y papel.
--pen-night · #E86B41
subrayado .
Aclarado para el tintero — ~5:1 sobre --night. Hovers, subrayados, el punto final.

Paletas por proyecto — cuatro sistemas autocontenidos

Fika
iOS · TFM del máster · Azul SaaS
#3B6FE0 #2D58C4 #16A34A
Pack
iOS · Proyecto personal · Óxido cálido
#B8390A #6B3D1E #B47A1F
Eventbrite
Web · Rediseño no solicitado · Rojo señal
#D4380D #A82A0A #4F46E5
Gran DT
Web · Lanzada y operada en vivo · Cancha de noche
#34D17B #F5C84C #0B1610

Cinco voces

Tres familias, cinco roles fijos. Source Serif 4 lleva el display (900) y el registro editorial (400); Hanken Grotesk habla frases de contrapunto y cuerpo; JetBrains Mono solo aparece entre corchetes.

Display · serif 900
Ríos, nombres de proyecto, HABLEMOS. Mayúsculas, tracking −0.015em, interlínea ≤ 0.98. Cierra con marca roja.
Eventbrite ·
Editorial · serif 400
El About y la pregunta de la banda. clamp(19px, 2vw, 24px), interlínea 1.45–1.5.
Seis años dentro del software empresarial me enseñaron cómo los productos salen mal.
Statement · Hanken 600 caps
El contrapunto fijo del hero, abajo a la derecha. Mayúsculas, interlínea apretada.
Diseño los que ponen al usuario primero.
Body · Hanken 400
Descripciones de proyecto y prosa funcional. 15.5px, interlínea 1.6–1.7.
Análisis heurístico del flujo de creación de eventos de Eventbrite — 14 problemas, 7 pantallas reducidas a 1.
Meta · mono brackets
Volantas, contadores, contacto, colofón. 11.5–14px, tracking 0.16em, siempre entre [ ].
[ PRODUCT DESIGNER · BARCELONA ]

Gestos recurrentes

La identidad vive en un puñado de gestos repetidos. Cada uno aparece al menos dos veces en el sitio, así nada se lee como efecto suelto.

[ 005 · TU PROYECTO ]
Los corchetes
La metadata mono siempre lleva corchetes: meta del hero, kickers, contacto, colofón. El sitio abre y cierra en la misma voz.
001
Contadores en trazo
Cada lámina lleva su número como cifra gigante en trazo rojo: del 001 al 004, y ahí la cuenta declara al visitante proyecto [ 005 ].
La lámina y el doble filete
Los proyectos viven en papel más claro enmarcado por un borde de tinta de 2px con hairline interior a 6px: un filete de imprenta. Las esquinas quedan en 4px para que el marco lea como borde impreso.
los productos que odiaba usar me enseñaron más
Subrayado a lapicera
Un subrayado de 2.5px apoyado a 6px de la línea de base, en el rojo AA de su fondo.
La revelación
Un solo efecto de scroll: el mundo crema termina en esquinas redondeadas y se levanta del tintero clavado. Guiado por scroll, sin JS, desactivado donde no cabe.
9:41 · a mano
Dispositivos CSS
Cada mockup de teléfono y navegador es DOM escrito a mano. Las UIs animan al entrar: anillos que se dibujan, checks que se tildan, previews que aparecen. Las únicas capturas reales del sitio son las de Gran DT, porque ese proyecto sí salió a producción.

Medidas del layout

Escenas a sangre completa con un mismo ritmo de bordes; el caparazón mantiene radios y sombras en una escala corta y deliberada.

MedidaValorDónde
Margen de bordeclamp(24px, 4vw, 72px)Láminas, doble página del tintero
Alto de escenamin-height: calc(100svh - 112px)Cada proyecto es una escena casi-viewport
Escala de radios4 / 12 / 16 / 44 / 999Lámina / browser / pantallas / hoja que se levanta / píldoras. El chasis de los dispositivos y los mockups de producto traen sus propios radios.
Sombrasrgba(33,33,29, …) — tinta cálida, nunca negro azuladoDispositivos, hoja que se levanta
Acto finalsticky bottom · 100svh - ~120pxEl tintero queda clavado; ~120px de papel quedan visibles al final
Salto tipográficodisplay ≥ 8vw vs cuerpo 15.5pxMonumento o servicio — sin tamaños intermedios

Accesible por diseño

El sistema incluye sus límites: cada floritura decorativa tiene un fallback funcional.

Rojo AA según fondo
El texto rojo chico nunca usa el rojo display: --pen-text da 4.5:1+ sobre claro, --pen-night ~5:1 sobre oscuro.
Reduced motion con estados completos
Toda la coreografía de entrada (duración y delay) colapsa a estados finales — nada queda escondido detrás de una animación.
Esqueleto semántico
Un solo h1 (solo para lectores, sobre los ríos decorativos), landmarks de header/main/footer, skip link, focus-visible en todo.
Decoración muda
Los contadores generados usan la sintaxis de texto alternativo content: "001" / ""; los mockups son aria-hidden.
Sin JS e impresión
Sin JavaScript el hero se compacta y todo se lee; la impresión aplana la revelación y apaga los fondos oscuros.
Scroll nativo
La rueda y el trackpad nunca se interceptan. El deslizamiento suave existe solo en los saltos de ancla, y se cancela apenas el usuario scrollea.