A huge mirror-chrome headline floating over a retro-future neon perspective grid. Star glints travel across the letters, gradient reflections shift with the pointer, and the whole thing reads as a Y2K poster you'd screenshot for your moodboard.
import ChromeY2KWordmark from '@crazygl/hero-chrome-y2k-wordmark';
export default function Page() {
return (
<ChromeY2KWordmark
heading={'CYBER\n2099'}
subheading="The internet, but make it fashion."
ctaLabel="Enter the future"
gridColor="#ff80c8"
/>
);
}heading (use \n to stack lines), subheading, ctaLabel, onCTAClick.extrudeDepth, bevelSize, letterSpacing, headingY.chromeTint (F0 base reflectance), metalness, roughness.glintCount, glintSize, glintBrightness, glintSpeed.bgGradientTop / bgGradientMid / bgGradientBottom sky stops, gridColor, gridStrength, gridSpeed.pointerParallax.headingFontFamily (a real Google TTF is fetched and extruded), headingFontWeight.npm install @crazygl/hero-chrome-y2k-wordmarkThe component takes the same props you see in the live customizer on the right — every default ships poster-quality.
import ChromeY2KWordmark from '@crazygl/hero-chrome-y2k-wordmark';
export default function Landing() {
return (
<ChromeY2KWordmark />
);
}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 ChromeY2KWordmark from '@crazygl/hero-chrome-y2k-wordmark';
export default function Page() {
return (
<section>
<ChromeY2KWordmark
heading="Say hi."
subheading="Your new hero."
/>
<article>
<h2>Welcome</h2>
<p>Your content keeps its own voice below the hero.</p>
</article>
</section>
);
}