Luca Perullo
Components

Component

LiveNew

Hyper Text

Mr Robot–style. requestAnimationFrame + progress 0→1, settled = floor(progress * length). Re-trigger on hover.

TextScrambleClient
Open in ClaudeSorgente

Esempio01

hyper-text.tsx
001Default · scrambles on mount

HYPER TEXT

002Hero · big mono display
Hover to re-scramble

NEXT EXPERIMENT

003Brand · logotype

LP / 2025

Note Glifi presi da [A-Z]. Spazi non vengono scrambled. Re-runna ad ogni pointerEnter se animateOnHover (default true).

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 · hyper-text
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 <HyperText> Mr Robot–style scramble.
Props:
- children: string.
- duration?: number (ms totali, default 800).
- as?: "h1"|"h2"|"h3"|"p"|"span" (default "p").
- animateOnHover?: boolean (default true).
- className?: string.

Implementazione:
- "use client". useState<string[]> per il display, useRef<number | null> per l'rAF id.
- run(): cancelAnimationFrame, performance.now() come start, tick(now) calcola progress 0→1, settled = floor(progress * length). Per ogni char: se i < settled o ch === " " → final, altrimenti random uppercase.
- Trigger su mount + onPointerEnter se animateOnHover.

Output: file completo src/components/hyper-text.tsx.

Uso tipico03

tsx
<HyperText animateOnHover duration={800}>HELLO WORLD</HyperText>

Dipendenze04

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

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