Luca Perullo
Components

Component

LiveNew

Flickering Grid

Single canvas, requestAnimationFrame loop. Ogni frame ~30% delle celle ha la chance di cambiare opacity.

BackgroundCanvasClient
Open in ClaudeSorgente

Esempio01

flickering-grid.tsx
001Default · small + slow
002Hero · larger cells
section · 001

Pronto a spedire?

003Dense small · busy field

Note Legge prefers-reduced-motion una volta via matchMedia. Se reduced, salta il loop dopo il primo render statico.

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 · flickering-grid
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 <FlickeringGrid> canvas-based.
Props:
- squareSize?: number (default 4), gridGap?: number (default 6).
- flickerChance?: number (default 0.3), color?: string (default "var(--fg-soft)").
- maxOpacity?: number (default 0.5), width?, height?, className?.

Implementazione:
- "use client". useRef<HTMLCanvasElement>, useRef<HTMLDivElement>.
- useEffect: leggi prefers-reduced-motion via matchMedia. Resolve color in rgb leggendo da un probe div.
- ResizeObserver: dpr-aware setup canvas, calcola cols/rows, alloca opacities array.
- Loop draw: per ogni cella, chance flicker → nuova opacity, fillRect.
- Cleanup: cancelAnimationFrame, ro.disconnect.

Output: file completo src/components/flickering-grid.tsx.

Uso tipico03

tsx
<FlickeringGrid squareSize={4} gridGap={6} flickerChance={0.3} />

Dipendenze04

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

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