Retour au catalogue

About Founder

Section fondateur : photo placeholder, citation serif, bio courte et role.

aboutsimple Both Responsive a11y
eleganteditorialuniversalagencyportfoliosplit
Theme

Cómo crear una sección Sobre el fundador en React

Una sección de fundador React combina un placeholder de retrato a la izquierda con una cita serif, el nombre, el rol y la bio a la derecha dentro de una grid CSS de dos columnas. Ambas columnas se animan al hacer scroll mediante whileInView de Framer Motion, con la imagen pasando de scale 0.95 a 1 y el texto deslizándose desde y:20.

  • Stack: React + Framer Motion + Lucide React, ~145 líneas, cero dependencias adicionales.
  • Animaciones: whileInView con once:true, spring EASE [0.16, 1, 0.3, 1], desfase de 100ms entre imagen y texto.
  • La grid pasa a una sola columna en móvil mediante estilo inline; el retrato usa una relación de aspecto 3/4.
  • Totalmente adaptable al tema: cada valor de color y espaciado proviene de las CSS custom properties, compatible con los 7 presets.
  • Accesible: etiquetas blockquote y p semánticas, color de acento en el rol, placeholder de imagen visible en cualquier modo de tema.

AboutFounder es una sección React con layout dividido diseñada para dar un rostro humano a una marca. Coloca un placeholder de retrato a la izquierda y una gran cita serif, el nombre, el rol y un párrafo de bio a la derecha. Ambos lados entran en vista de forma independiente, dando a la revelación un ritmo natural y pausado sin cargar ninguna biblioteca de animación más allá de Framer Motion.

Anatomía

La sección exterior usa CSS custom properties para todos los paddings y el fondo. En su interior, una grid de dos columnas (columna izquierda fija de 320px, derecha en 1fr) contiene dos motion.div. La columna izquierda muestra un placeholder en relación 3/4 con un overlay tintado y un icono ImageIcon de Lucide centrado. La columna derecha apila cuatro elementos de arriba abajo: un icono Quote sobre la cita, una fila de nombre/rol separada de la bio por un borde inferior, y el propio párrafo de bio.

Cómo funciona

Ambos motion.div usan whileInView para activarse cuando el elemento cruza el viewport. La columna de imagen anima opacity 0→1 y scale 0.95→1 en 600ms. La columna de contenido usa la misma duración pero arranca 100ms más tarde (delay: 0.1) y se desliza desde y:20 en lugar de escalar. Ambas comparten la misma curva de bézier [0.16, 1, 0.3, 1], que produce una desaceleración rápida sin rebote, típica de los sitios de producto cuidados. La opción de viewport `once: true` impide que la animación se repita al hacer scroll hacia arriba.

Cómo crearlo en React

  1. Configura la grid de dos columnas

    Envuelve todo en una section con los paddings en CSS variables, luego dentro coloca un div con display:grid, gridTemplateColumns:'320px 1fr' y un gap de 4rem. En móvil lo cambiarás a una sola columna. Usar estilos inline sobre los tokens CSS evita cualquier fricción con los breakpoints de Tailwind.

    <div style={{
      display: "grid",
      gridTemplateColumns: "320px 1fr",
      gap: "4rem",
      alignItems: "center",
    }}>
  2. Anima la entrada en vista del placeholder de retrato

    Envuelve la columna izquierda en un motion.div. Define initial en opacity:0, scale:0.95 y whileInView en opacity:1, scale:1. Pasa viewport={{once:true}} para que la revelación se dispare solo la primera vez. Usa la constante ease personalizada para una desaceleración suave.

    const EASE = [0.16, 1, 0.3, 1] as const;
    
    <motion.div
      initial={{ opacity: 0, scale: 0.95 }}
      whileInView={{ opacity: 1, scale: 1 }}
      viewport={{ once: true }}
      transition={{ duration: 0.6, ease: EASE }}
    >
  3. Escalona la animación de la columna de contenido

    La columna derecha usa los mismos ajustes de transición con un deslizamiento desde y:20 y un retardo de 100ms. Ese pequeño desfase hace que las dos columnas parezcan coreografiadas en lugar de simultáneas. Mantén duraciones idénticas para que el timing se perciba como intencional.

    <motion.div
      initial={{ opacity: 0, y: 20 }}
      whileInView={{ opacity: 1, y: 0 }}
      viewport={{ once: true }}
      transition={{ duration: 0.6, delay: 0.1, ease: EASE }}
    >
  4. Conecta la cita y la bio

    Dentro de la columna derecha, coloca un icono Quote (Lucide) con baja opacidad encima de un elemento blockquote semántico. Debajo, muestra el nombre y el rol en una fila flex, separada de la bio por un borde inferior. Pasa todo el contenido textual como props para que el componente siga siendo reutilizable con distintos fundadores o miembros del equipo.

Cuándo usarlo

Úsala a media página en landing pages de startups, sitios de agencia o proyectos de portfolio para dar un rostro humano a la marca antes de un bloque de prueba social o un CTA. Funciona especialmente bien tras una sección de funcionalidades, dando a los lectores un momento para conectar con la persona detrás del producto. Evítala en páginas puramente de e-commerce o transaccionales donde la credibilidad personal no impulsa la conversión, y no la coloques directamente después de otra sección a sangre completa con mucha imagen.

Usado por

  • Basecamp, El rostro del fundador Jason Fried y sus citas directas anclan la página About, estableciendo la credibilidad personal antes del pitch del producto.
  • Notion, Los retratos del equipo y de los fundadores con bios breves aparecen en la sección de historia de la empresa para conectar el producto con personas reales.
  • Framer, Grid de fundadores y equipo con nombre, rol y descripción breve en un layout dividido limpio, típico de las empresas de herramientas de diseño.

FAQ

¿Cómo reemplazo el placeholder por una foto real?

Elimina el ImageIcon y el div de overlay dentro del motion.div izquierdo, luego renderiza una Image de Next.js (o un img estándar) que llene el contenedor. Mantén el borderRadius y overflow:hidden en el wrapper para que el retrato siga recortado en el rectángulo redondeado.

¿Puedo hacer la grid responsive sin Tailwind?

Sí. Añade una regla CSS o una media query inline que cambie gridTemplateColumns a '1fr' por debajo de 768px. Como el componente usa estilos inline, también puedes pasar un objeto sx-style o envolverlo en un styled-component si tu proyecto los usa.

¿Por qué usar once:true en el disparador del viewport?

Repetir la animación de entrada cada vez que un usuario hace scroll frente a la sección resulta brusco y desvía la atención hacia el mecanismo en lugar del contenido. once:true dispara la revelación solo en la primera intersección, lo que se percibe como una transición de carga de página cuidada y no como un efecto en bucle.

¿Qué fuente serif se usa para la cita?

La cita lee la CSS custom property var(--font-serif), definida por el preset de tema activo. Coloca ahí cualquier font-family serif, Georgia, Lora, Playfair Display, y la cita la hereda automáticamente sin tocar el código del componente.

"use client";

import { motion } from "framer-motion";
import { Quote, ImageIcon } from "lucide-react";

interface AboutFounderProps {
  name?: string;
  role?: string;
  quote?: string;
  bio?: string;
  imageColor?: string;
}

const EASE = [0.16, 1, 0.3, 1] as const;

export default function AboutFounder({
  name = "Nom du fondateur",
  role = "Fondateur & CEO",
  quote = "Citation inspirante.",
  bio = "Bio courte du fondateur.",
  imageColor = "var(--color-accent)",
}: AboutFounderProps) {

Code complet réservé à Pro

Code source intégral, export multi-framework et playground.

Passer en Pro, 9,99€/mois

Reseñas

Sección de fundador React con cita + bio, código y tutorial