Tiny notification, message, alert and success cards stream from deep space toward a tilted product dashboard, curving inward under a magnetic pull and brightening on arrival. Hover anywhere to slow the storm to a crawl.
import NotificationStorm from '@crazygl/hero-notification-storm';
export default function Page() {
return (
<NotificationStorm
heading="All your activity, organized."
screenshot="https://crazygl.com/samples/screenshot-dashboard-dark.avif"
notificationStyle="ios-dark"
revealStyle="stream"
/>
);
}screenshot (central dashboard; aspect read from the image) plus screenshotX/Y, screenshotScale, screenshotTilt, screenEmissive.notificationStyle (ios-dark/light, android-dark/light, web-dark/light), revealStyle (stream / drop-in / fade-in / pop), notifications (one per line app | title | body), useAppIcons + appIconColors.cardCount (4–30), cardSize.flowSpeed, pullStrength (magnetic pull), parallaxStrength.haloColor/haloStrength, bgCenter/bgEdge, transparentBackground.npm install @crazygl/hero-notification-stormThe component takes the same props you see in the live customizer on the right — every default ships poster-quality.
import NotificationStorm from '@crazygl/hero-notification-storm';
export default function Landing() {
return (
<NotificationStorm />
);
}The wrapper renders static HTML on the server and only initialises the canvas after hydration, so search engines see your copy.
// app/page.tsx — works in SSR-first frameworks (Next, Remix, Astro, etc.)
'use client';
import NotificationStorm from '@crazygl/hero-notification-storm';
export default function Page() {
return (
<section>
<NotificationStorm
heading="Say hi."
subheading="Your new hero."
/>
<article>
<h2>Welcome</h2>
<p>Your content keeps its own voice below the hero.</p>
</article>
</section>
);
}