React + MotionMicrointeracciones

Badge de notificación

Un contador que cae sobre el icono de la campana con un pequeño rebote cuando llega algo nuevo.

Ajustes

3

Código

import { useState } from "react";
import { AnimatePresence, motion } from "framer-motion";
import { Bell } from "lucide-react";

const spring = { type: "spring" as const, stiffness: 300, damping: 30 };

interface NotificationBadgeProps {
  color?: string;
  count?: number;
}

export default function NotificationBadge({
  color = "#d25563",
  count = 3,
}: NotificationBadgeProps) {
  const [show, setShow] = useState(true);

  return (
    <button
      type="button"
      aria-label={show ? `${count} notificaciones` : "Notificaciones"}
      onClick={() => setShow((s) => !s)}
      className="relative grid h-14 w-14 place-items-center rounded-full bg-white dark:bg-[#1c1c1e] text-[#1d1d1f] dark:text-[#f5f5f7] shadow-[0_1px_2px_rgba(0,0,0,0.03),0_8px_28px_rgba(0,0,0,0.05)]"
    >
      <Bell className="h-6 w-6" />
      <AnimatePresence>
        {show && (
          <motion.span
            initial={{ scale: 0, y: -10 }}
            animate={{ scale: 1, y: 0 }}
            exit={{ scale: 0 }}
            transition={spring}
            className="absolute -right-1 -top-1 grid h-6 min-w-6 place-items-center rounded-full px-1 text-[11px] font-semibold text-white"
            style={{ backgroundColor: color }}
          >
            {count}
          </motion.span>
        )}
      </AnimatePresence>
    </button>
  );
}

Prompt para IA

Pégalo en ChatGPT, Claude o Cursor y adaptará el bloque a tu proyecto con estos ajustes, aunque no uses React.

Versión Markdown con todo el código, para asistentes de IA

Más en Microinteracciones

Ver todos: Microinteracciones

Dónde usarlo

Un globo sobre una campana es la señal universal de «tienes algo pendiente». El rebote hace que lo nuevo se note sin sonidos ni pop-ups. Va en el icono de mensajes de un marketplace, en un foro o en el carrito de una tienda. Ese rebote separa un badge de notificación que se ve de uno que se ignora.

Por encima de 99 lo normal es mostrar «99+» en lugar de la cifra completa. Reserva el rojo para avisos de verdad y no vuelvas a animar el badge cada vez que carga la página, o la gente dejará de fijarse.