Elegant colored data streams fall behind a central product screenshot in four refined tints, with a few drops drifting in front for parallax depth. Cyberpunk but refined.
import HeroDataRainReveal from '@crazygl/hero-data-rain-reveal';
export default function Page() {
return (
<HeroDataRainReveal
screenshot="https://crazygl.com/samples/screenshot-dashboard-dark.avif"
heading="Data, refined."
dropCount={200}
dropSpeed={1.0}
/>
);
}contentType (heading / two-columns / custom) plus heading, subheading, column1/column2, or content.screenshot (aspect read from the texture), screenshotX/Y, screenshotScale, screenshotTilt, screenEmissive.dropCount, dropSpeed, dropStreamLength, and the four streamColor1–4 tints.bloomStrength, haloColor, haloStrength, bgTop/bgBottom, transparentBackground.parallaxStrength (pointer parallax).npm install @crazygl/hero-data-rain-revealThe component takes the same props you see in the live customizer on the right — every default ships poster-quality.
import DataRainProductReveal from '@crazygl/hero-data-rain-reveal';
export default function Landing() {
return (
<DataRainProductReveal />
);
}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 DataRainProductReveal from '@crazygl/hero-data-rain-reveal';
export default function Page() {
return (
<section>
<DataRainProductReveal
heading="Say hi."
subheading="Your new hero."
/>
<article>
<h2>Welcome</h2>
<p>Your content keeps its own voice below the hero.</p>
</article>
</section>
);
}