Luca Perullo
Components

Component

LiveNew

Pulsating Button

Due pseudo-layer scale 1→1.6 + opacity 0.55→0 in 1.6s, sfasati di metà ciclo. Tutto CSS.

ButtonAnimationCSS
Open in ClaudeSorgente

Esempio01

pulsating-button.tsx
001Default · accent pulse
002Live event · with status pill
Live · in 24m

Q&A su tooling 2026

Mostriamo tutto il workflow Claude Code → Vercel.

003Custom color · destructive pulse

Note I due ring sono sfasati con animationDelay calc(duration/-2). Il global reduced-motion guard collassa il pulse a 0 frame.

Prompt LLM02

Incolla in Claude o ChatGPT per generare la tua variante. Include il contesto del brand, i token e i vincoli del progetto.

Prompt · pulsating-button
Open in Claude
Sei un senior frontend engineer. Stai lavorando su un sito Next.js 16 + React 19 + Tailwind v4 in italiano, look chanhdai-inspired: colonna stretta 672px, Geist Sans + Geist Mono, hairline 1px, divisori a stripe diagonale, palette zinc.

Token CSS disponibili: --bg, --bg-alt, --fg, --fg-muted, --fg-soft, --border, --border-strong, --accent. Usa SEMPRE queste variabili tramite le utility tailwind generate (bg-bg, text-fg-muted, border-border, ecc.). Helper "cn" da "@/lib/utils". Niente librerie UI extra: solo lucide-react e tailwind-merge.

Genera un componente <PulsatingButton>: CTA con doppio ring pulsante.
Props:
- children: ReactNode.
- pulseColor?: string (default "var(--accent)").
- duration?: string (default "1.6s").
- className?: string + ...rest.

Implementazione:
- Server component, classe press, rounded-full, min-h-[44px], px-6, bg-accent text-accent-fg.
- Due span absolute inset-0 -z-10 rounded-full bg pulseColor con keyframe pulsating-button-ring (scale 1→1.6, opacity 0.55→0) duration var(--ease-out) infinite.
- Secondo span: animationDelay calc(${duration} / -2) per sfasarli.

Output: file completo src/components/pulsating-button.tsx.

Uso tipico03

tsx
<PulsatingButton pulseColor="var(--accent)" duration="1.6s">Iscriviti</PulsatingButton>

Dipendenze04

npm
  • tailwind-merge
  • clsx
Interno
  • @/lib/utils#cn

Ti è servito? Dimmelo, oppure proponi il prossimo componente.