A glossy obsidian monolith floats on screen, rotating slowly, sampling a procedural HDRI for genuine mirror reflections. Emissive light strips travel down its faces in a hypnotic loop.
import FloatingMonolith from '@crazygl/hero-floating-monolith';
export default function Page() {
return (
<FloatingMonolith
heading="Obsidian."
layout="content-left"
stripColor="#5cf2ff"
/>
);
}layout (centered, content-left, content-right).tint (F0 reflection colour), metallic (1 = mirror), roughness, fresnelStrength, rimColor.stripColor, stripIntensity, stripCount, stripSpeed.boxHeight / boxWidth / boxDepth, cornerRound, rotateSpeed, pointerTilt.transparent, bgTopColor / bgBottomColor, envSunColor / envFillColor (studio key/fill).npm install @crazygl/hero-floating-monolithThe component takes the same props you see in the live customizer on the right — every default ships poster-quality.
import FloatingMonolith from '@crazygl/hero-floating-monolith';
export default function Landing() {
return (
<FloatingMonolith />
);
}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 FloatingMonolith from '@crazygl/hero-floating-monolith';
export default function Page() {
return (
<section>
<FloatingMonolith
heading="Say hi."
subheading="Your new hero."
/>
<article>
<h2>Welcome</h2>
<p>Your content keeps its own voice below the hero.</p>
</article>
</section>
);
}