Your dashboard screenshot sits low in the frame, partially hidden behind a glowing eclipse horizon, a vertical beam of light rising from it like the product itself is powering the scene.
import DashboardEclipse from '@crazygl/hero-dashboard-eclipse';
export default function Hero() {
return (
<DashboardEclipse
heading="Power your insight."
screenshot="/my-dashboard.avif"
eclipseRimY={0.42}
beamIntensity={0.8}
/>
);
}react, react-dom and @crazygl/core are peer dependencies; three is bundled as a regular dependency.
screenshot (PNG/JPG/AVIF/WebP), plus screenshotX/Y/Scale/Tilt and screenEmissive backlit boost.horizonColor1/2/3 (outer/mid/core rim), horizonIntensity, eclipseRimY, eclipseRimSharpness, planetRadius.beamColor, beamIntensity, beamWidth, beamHeight, beamLayers, bloomStrength, bloomCoreStrength.dustCount, dustColor, dustSpeed.parallaxStrength, beamPulse, skyTop, skyMid, grainStrength, vignetteStrength, transparentBackground.npm install @crazygl/hero-dashboard-eclipseThe component takes the same props you see in the live customizer on the right — every default ships poster-quality.
import DashboardEclipse from '@crazygl/hero-dashboard-eclipse';
export default function Landing() {
return (
<DashboardEclipse />
);
}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 DashboardEclipse from '@crazygl/hero-dashboard-eclipse';
export default function Page() {
return (
<section>
<DashboardEclipse
heading="Say hi."
subheading="Your new hero."
/>
<article>
<h2>Welcome</h2>
<p>Your content keeps its own voice below the hero.</p>
</article>
</section>
);
}