A lantern of stacked discs floating in the dark. Every few seconds a warm light bounces into it — the whole stack squashes on impact, glows cream-to-ember from within, wobbles, then fades back to charcoal. Click to bounce it yourself.
import BouncingLight from '@crazygl/hero-bouncing-light';
export default function Page() {
return (
<BouncingLight
heading="Warm by design"
lightColor="#ffb757"
bounceInterval={4.5}
squashAmount={0.6}
/>
);
}lanternSize, discCount (how many stacked slices build the beehive), centerX / centerY to place it beside your copy.autoBounce + bounceInterval for the timer, litDuration for how long it stays glowing, squashAmount for how soft the impact deformation feels. Clicking the hero always triggers a bounce.lightColor (the cream core and ember edges are derived from it), baseColor for the unlit charcoal discs, glowStrength for the ambient halo, bgColor or transparent.npm install @crazygl/hero-bouncing-lightThe component takes the same props you see in the live customizer on the right — every default ships poster-quality.
import BouncingLight from '@crazygl/hero-bouncing-light';
export default function Landing() {
return (
<BouncingLight />
);
}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 BouncingLight from '@crazygl/hero-bouncing-light';
export default function Page() {
return (
<section>
<BouncingLight
heading="Say hi."
subheading="Your new hero."
/>
<article>
<h2>Welcome</h2>
<p>Your content keeps its own voice below the hero.</p>
</article>
</section>
);
}