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.

Más en 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.