A dashboard screenshot at the centre with integration chips orbiting around it on an inclined plane, linked to the dashboard by glowing neon lines that pulse with travelling beads of light. Drag to spin the ring with momentum.
import NeonOrbital from '@crazygl/hero-neon-orbital';
export default function Page() {
return (
<NeonOrbital
screenshot="https://crazygl.com/samples/screenshot-dashboard-dark.avif"
ringTilt={25}
lineColor="#56e3ff"
pulseEnabled
/>
);
}screenshot (image or video at the centre; aspect auto-derived), plus screenshotX/Y, screenshotScale, screenshotTilt, screenEmissive.chips (one per line, label | glyph | color, up to 12), chipSize, outlineIntensity.ringRadius, ringTilt, autoRotateSpeed, dragSensitivity, momentumDecay.lineColor, lineOpacity, pulseEnabled, pulseSpeed, pulseBrightness.haloColor, haloStrength, bgCenter / bgEdge radial backdrop, transparentBackground, parallaxStrength.npm install @crazygl/hero-neon-orbitalThe component takes the same props you see in the live customizer on the right — every default ships poster-quality.
import NeonOrbitalIntegrations from '@crazygl/hero-neon-orbital';
export default function Landing() {
return (
<NeonOrbitalIntegrations />
);
}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 NeonOrbitalIntegrations from '@crazygl/hero-neon-orbital';
export default function Page() {
return (
<section>
<NeonOrbitalIntegrations
heading="Say hi."
subheading="Your new hero."
/>
<article>
<h2>Welcome</h2>
<p>Your content keeps its own voice below the hero.</p>
</article>
</section>
);
}