Miguel Santa 18 de mayo de 2026 8 min de lectura

Hyperframes · cómo dejar de pegar capturas y empezar a animar conceptos

El patrón de diseño que reemplaza screenshots PNG por componentes Vue animados. Mismo bundle, cero librerías extra, el sitio se siente vivo.

diseñoanimacioneshyperframesvuecss

Entras a un sitio y todo está quieto

Entras a un sitio cualquiera. Hay textos buenos, hay capturas de pantalla con flechas, hay diagramas con labels. Todo bien explicado. Todo quieto.

A los 20 segundos sin que te dieras cuenta ya decidiste algo sobre esa marca. La sentiste vieja. No por el contenido. Por el aire estancado.

El diseño quieto se siente abandonado. Aunque el texto sea mejor que el de tu competencia, el lector lee menos. Y eso pasa con cualquier blog técnico que se llena de screenshots de su propio producto.


Qué es un hyperframe

Un hyperframe es un pedazo de tu sitio que antes habría sido una foto y ahora es un dibujo vivo. La parte de afuera no la nota nadie. La diferencia es que el dibujo se mueve solo, vive en la repo y se ajusta cuando cambia el código.

No es un GIF. No es un Lottie. No es un video. Es un componente de tu propia web que dibuja la idea y la deja moverse. Cero peso de imagen, cero librerías extra, cero scripts montados aparte.

Mira la diferencia. A la izquierda te muestro cómo se siente una guía con la captura quieta. A la derecha, el mismo concepto convertido en hyperframe.

ANTES · CAPTURA ESTÁTICA AHORA · HYPERFRAME VIVO screenshot.png · 240 KB entrada salida el flujo está dibujado, pero no se mueve STATIC se queda viejo cuando cambia el producto PATRÓN ANIMA Hyperframe.vue · 38 líneas entrada salida el flujo no se dibuja: el flujo pasa LIVE vive con el código, no se queda viejo
La captura cuenta el flujo. El hyperframe lo deja pasar.

La captura cuenta el flujo. El hyperframe lo deja pasar.


Lo que pierdes con la captura · lo que ganas con el hyperframe

CAPTURA ESTÁTICA

Lo que pierdes

  • Toca abrir el producto y volver a screenshotear cada vez que algo cambia
  • La imagen pesa entre 80 y 400 KB · sumas peso al bundle
  • Si el lector lee en dark mode, la captura se ve con fondo blanco roto
  • El concepto se queda dibujado, no se cuenta solo
  • Una captura no enseña tiempo: no se ve el orden en que pasan las cosas
HYPERFRAME VIVO

Lo que ganas

  • El componente vive en la repo · cuando cambia el código, cambia el ejemplo
  • Cero peso de imagen · solo el dibujo nativo del navegador
  • Dark mode automático porque usas los colores del proyecto
  • El flujo se ve mientras se explica · menos prosa, más comprensión
  • Las cascadas, los pulsos y las flechas viajando enseñan el orden por sí solas

  • Cómo lo aplicamos a santa-ia

    Esta semana hicimos auditoría completa del sitio. Cada captura, cada diagrama estático, cada lugar donde antes habríamos puesto un PNG. Lo orquestamos con Claude Code, no escribimos cada componente a mano. La cabeza del trabajo la pone uno; las manos las puede poner el plan Pro de Claude por veinte dólares al mes y sale a cuenta.

    Los números reales del trabajo:

    11

    componentes nuevos

    diagramas, mascota animada, terminales · todos animados nativo

    10

    diagramas existentes que cobraron vida

    antes eran estáticos · ahora animan al cargar

    0

    librerías extra

    ni GSAP, ni Lottie, ni Framer Motion · todo nativo del navegador

    0

    riesgo en deploy

    todo corre en el navegador del lector · la build sigue igual

    1

    bug raíz blindado

    el patrón A · te lo cuento más abajo con muestra visual

    Cero librerías nuevas. Cero peso extra de bundle. Cero scripts adicionales. El stack quedó exactamente igual que antes: Nuxt + Vue + Tailwind. Lo único que cambió fue cómo dibujamos los conceptos dentro de las guías.


    La anatomía de un hyperframe

    Un hyperframe son cuatro capas que se apilan. Si quitas alguna deja de ser hyperframe y vuelve a sentirse como una captura.

    ANATOMÍA DE UN HYPERFRAME · 4 CAPAS QUE SE APILAN CAPA 4 · ACCESIBILIDAD prefers-reduced-motion si el usuario pide menos movimiento, las animaciones se apagan animation: none CAPA 3 · DESIGN SYSTEM tokens del DS · colores y spacing del proyecto var(--accent) · var(--surface) · var(--fg) · dark mode automático CAPA 2 · MOTOR CSS keyframes nativo · sin librerías transform · opacity · stroke-dashoffset · cero peso extra de bundle 0 KB extra CAPA 1 · CONCEPTO el momento que quieres mostrar antes era un PNG · ahora es un componente Vue que se mueve se apoya en lo que se ve lo que sostiene
    Cuatro capas que se apilan. Quitas una y deja de ser hyperframe.

    La capa de arriba es lo que el lector ve. La de abajo es la que sostiene todo. Y la de en medio es donde vive el motor del movimiento, que es lo que el navegador ya sabe hacer sin ayuda de nadie. Cero librerías. Cero peso extra.

    Esa decisión técnica importa más de lo que parece. Cualquier librería de animación pesa entre 30 KB y 100 KB minificada. Multiplica por todas tus guías y empieza a doler. Hacerlo con lo que el navegador trae de fábrica pesa cero.


    El patrón en 5 pasos

    Identifica el momento

    Estás escribiendo una guía. Llegas a la parte donde dirías "acá va una captura del panel". Para ahí. Anota la idea del concepto en tres palabras: qué entra, qué pasa, qué sale.

    No tomes screenshot. Esa es la regla.

    Si no puedes describir el momento en tres palabras, todavía no está claro qué quieres mostrar. Vuelve a escribir el párrafo antes de pensar en el visual.

    Decide el medio

    Te ahorro la decisión: el movimiento nativo del navegador sirve para el 95% de casos. Loops, cascadas, fades, escalados suaves, flechas que viajan. Todo eso lo hace el navegador solo y es lo que tienes que usar por defecto.

    Solo necesitas algo más cuando quieres typewriter (texto que se escribe letra por letra) o cuando la animación depende de un dato que cambia. Y para esos dos casos hay una forma estándar de hacerlo sin temporizadores sueltos colgando.

    Crea el componente

    Abres un archivo nuevo en la carpeta de componentes y describes el dibujo con texto y formas: cuadros, círculos, líneas, etiquetas. Después le agregas las reglas de animación: este círculo respira, esta flecha viaja, este sello pulsa.

    Los colores los sacas de la paleta del proyecto, no inventados. Si los tomas de ahí, dark mode te queda automático sin tocar nada más.

    Respeta a quien pidió menos movimiento

    Hay personas con migraña, vértigo o trastornos vestibulares para quienes una animación inocente es un día arruinado. El sistema operativo deja que esa persona marque "menos movimiento, por favor".

    Tu hyperframe tiene que escuchar esa petición. Cuando el lector pidió calma, las animaciones se apagan y el dibujo queda quieto en su forma final. Sin esto, el componente no sale a producción.

    Embébelo en la guía

    Dentro del markdown de la guía escribes el nombre del componente en una línea y aparece renderizado en el sitio. Nuxt Content resuelve el resto.

    Cuidado con un detalle: si el nombre tiene mayúsculas pegadas (SantaIA, URL, API) el resolver se confunde y la página queda en blanco silenciosamente. Escríbelo con la primera letra mayúscula y el resto normal: Santaia, Url, Api.


    La lección dura · el bug del patrón A

    Esta sección la pongo honesta porque me costó cuatro componentes verla.

    Te muestro en pantalla qué pasa cuando no separas capas. Del lado izquierdo, el elemento debería quedarse arriba a la derecha pero salta al origen cuando llega la animación. Del lado derecho, le pongo un envoltorio (un wrapper) que sostiene la posición, y la animación corre dentro sin moverlo de sitio.

    SIN WRAPPER · SE ROMPE CON WRAPPER · FUNCIONA (0,0) posición pedida salto al origen anim elemento el elemento desaparece de donde debería estar BUG FIX WRAPPER (0,0) posición sostenida anim wrapper elemento el wrapper sostiene la posición · el cuadrito anima dentro OK
    Sin wrapper, el elemento se va al origen y desaparece. Con wrapper, todo se queda en su sitio.

    El primer componente que falló lo creímos un typo. El segundo, un caché viejo. Al tercero ya era patrón. Al cuarto fui a investigar y entendí que es una regla conocida: cuando hay dos formas de decir "mové esto" sobre el mismo nodo, la nueva borra la vieja.

    El fix es separar capas. Un envoltorio externo se encarga de pararse en el sitio correcto. Un envoltorio interno se encarga de animar. Ninguno de los dos pelea con el otro porque cada uno tiene una sola responsabilidad. Posicionar afuera, animar adentro.

    Después de descubrir el patrón hicimos auditoría completa al sitio. Aparecieron 8 instancias más del mismo bug en componentes que estaban "funcionando" pero con animaciones que no se veían porque el elemento se había ido del marco sin avisar. Fix de bloque, una sola revisión.

    Esta guía habla del bug y aplica el fix. Si miras el dibujo de cualquiera de los diagramas que ves arriba, vas a encontrar el patrón externo-interno en cada lugar donde hay movimiento.



    Lo que tienes que recordar

    • Un hyperframe es un componente de tu sitio que reemplaza una captura PNG y se mueve solo.
    • Cero librerías de animación. Todo lo hace el navegador con lo que ya trae.
    • Cuatro capas: concepto, motor de movimiento, paleta del proyecto, respeto a quien pidió menos movimiento.
    • Cuando el dibujo necesita posicionar Y animar, separa envoltorios: el de afuera se queda quieto donde tiene que estar, el de adentro hace todo el movimiento.
    • Si tu componente no apaga las animaciones cuando el lector pidió calma, no sale a producción.
    • Si el nombre del componente tiene mayúsculas pegadas, Nuxt Content no lo encuentra. Primera letra mayúscula y el resto normal.

    Qué viene después

    Ya tienes el patrón mental y los cinco pasos. Lo siguiente es ponerlo en práctica con tu primer hyperframe, paso por paso.


    Si te quedó duda concreta sobre cómo aplicar hyperframes a tu sitio: comenta HYPERFRAME en mi último post o escríbeme por DM en @santaia.lab.

    hecho con mucho amor

    espero les sea útil

    santa-ia · 2026 · @santaia.lab