Hero Color Panels

PreviousNext

Split-layout hero section with responsive ColorPanels shader visuals, CTA content, and tech stack badges.

Default

AI SDK Agents

AI SDK Agents
Copy and Paste

Full-stack vercel ai sdk patterns for workflows, tool calling, and agent orchestration. Built with ai sdk v6 and shadcn/ui.

Next.jsNext.jsv16
AI SDKAI SDKv6

Configured Via Props

Composable hero

Cursor for
Marketing

Human-in-the-loop marketing copy software that helps teams draft, review, and ship high-converting campaigns with confidence.

Next.jsNext.jsv16
AI SDKAI SDKv6

Installation

pnpm dlx shadcn@latest add https://cult-ui.com/r/hero-color-panel.json

Usage

import { HeroColorPanelsRoot, HeroColorPanelsContainer, HeroColorPanelsContent, HeroColorPanelsHeading, HeroColorPanelsDescription, HeroColorPanelsActions, HeroColorPanelsBadges, HeroColorPanelsVisual, HeroColorPanelsMobileVisual, } from "@/components/ui/hero-color-panel"
export default function Page() { return ( <main className="min-h-screen"> <HeroColorPanelsRoot> <HeroColorPanelsContainer> <HeroColorPanelsContent> <HeroColorPanelsHeading /> <HeroColorPanelsDescription /> <HeroColorPanelsActions /> <div className="flex justify-center lg:justify-start" data-slot="hero-colorpanels-badges-wrap" > <HeroColorPanelsBadges /> </div> </HeroColorPanelsContent> <HeroColorPanelsVisual /> </HeroColorPanelsContainer> <HeroColorPanelsMobileVisual /> </HeroColorPanelsRoot> </main> ) }

What You Get

  • Split hero layout with copy and CTA on the left and ColorPanels shader visual on the right.
  • Memoized ColorPanels render path for stable re-renders.
  • Desktop and mobile shader variants with configurable colors, density, angles, blur, and animation.
  • Built-in badge row for highlighting stack metadata.
  • Works as a full-width section and can be dropped into landing pages directly.

API Reference

Exports

ExportTypeDescription
HeroColorPanelsRootHeroColorPanelsRootPropsContext provider and root section primitive
HeroColorPanelsContainerdiv primitiveMain hero grid wrapper
HeroColorPanelsContentdiv primitiveLeft-side content column primitive
HeroColorPanelsHeadingHeroColorPanelsHeadingPropsHeading block primitive (title + subtitle)
HeroColorPanelsDescriptionHeroColorPanelsDescriptionPropsDescription block primitive
HeroColorPanelsActionsHeroColorPanelsActionsPropsCTA wrapper primitive
HeroColorPanelsCTAHeroColorPanelsCTAPropsReusable CTA slot component
HeroColorPanelsBadgesHeroColorPanelsBadgesPropsReusable badge row primitive
HeroColorPanelsVisualHeroColorPanelsVisualPropsDesktop visual shader wrapper primitive
HeroColorPanelsMobileVisualHeroColorPanelsMobileVisualPropsMobile visual shader wrapper primitive
HeroColorPanels / defaultHeroColorPanelsPropsConvenience assembled version built from primitives
useHeroColorPanels() => HeroColorPanelsContextValueHook for context-driven custom composition

Props

HeroColorPanelsRoot owns shared defaults, normalized shader props, and composition state.

PropTypeDefaultDescription
srTitlestring"AI SDK Agents"Screen-reader-only heading text
titleReactNode"AI SDK Agents"First line of visible heading
subtitleReactNode"Copy and Paste"Second line of visible heading
descriptionReactNodebuilt-in marketing copySupporting paragraph content
showCtabooleantrueToggle CTA rendering
ctaPropsPartial<HeroColorPanelsCTAProps>built-in CTAOverride CTA label/link/target/rel/click handler
renderCta(defaultCta) => ReactNodeundefinedWrap or replace default CTA node
showBadgesbooleantrueToggle tech badges
techStackHeroColorPanelsTechItem[]Next.js + AI SDKBadge data source
renderBadge(tech, index, defaultBadge) => ReactNodeundefinedCustom badge rendering hook
desktopShaderPropsPartial<ColorPanelsProps>built-in desktop shader settingsOverride desktop shader values
mobileShaderPropsPartial<ColorPanelsProps>built-in mobile shader settingsOverride mobile shader values
classNamestringundefinedRoot section class override

Shader props (ColorPanels)

Passed via desktopShaderProps and mobileShaderProps. Common options:

PropTypeDescription
widthnumberCanvas width (e.g. 1280)
heightnumberCanvas height (e.g. 720)
colorsstring[]Array of hex colors (e.g. ["#ed40b3", "#6ef7cc", "#adfa1e", "#b054de"])
colorBackstringBackground color (e.g. "#ffffff00" for transparent)
densitynumberPanel density (e.g. 5.03)
angle1numberFirst angle (e.g. 0.68)
angle2numberSecond angle (e.g. 0.28)
lengthnumberLength (e.g. 1.13)
edgesbooleanEnable edges
blurnumberBlur amount (e.g. 0.25)
fadeInnumberFade-in (e.g. 0.85)
fadeOutnumberFade-out (e.g. 0.3)
gradientnumberGradient mix (e.g. 0.56)
speednumberAnimation speed (e.g. 4)
scalenumberScale (e.g. 0.96)
rotationnumberRotation in degrees (e.g. 180)

Customization Patterns

Tune ColorPanels colors and motion

Use shader override props without forking the component:

<HeroColorPanelsRoot desktopShaderProps={{ width: 1280, height: 720, colors: ["#ed40b3", "#6ef7cc", "#adfa1e", "#b054de"], colorBack: "#ffffff00", density: 5.03, angle1: 0.68, angle2: 0.28, length: 1.13, edges: true, blur: 0.25, fadeIn: 0.85, fadeOut: 0.3, gradient: 0.56, speed: 4, scale: 0.96, rotation: 180, }} mobileShaderProps={{ colors: ["#ed40b3", "#6ef7cc", "#adfa1e", "#b054de"], speed: 4, scale: 0.96, }} > {/* compose primitives */} </HeroColorPanelsRoot>

Swap hero copy and CTA

Replace copy and CTA target via props:

<HeroColorPanelsRoot title="Your Product" subtitle="Ship faster" description="Reusable hero primitive with configurable ColorPanels visuals." ctaProps={{ label: "Get started", href: "/signup", target: "_self", }} > {/* compose primitives */} </HeroColorPanelsRoot>

Compose with slot primitives

Use primitive exports for custom layout composition:

<HeroColorPanelsRoot> <HeroColorPanelsContainer> <HeroColorPanelsContent> <HeroColorPanelsHeading /> <HeroColorPanelsDescription /> <HeroColorPanelsActions /> <HeroColorPanelsBadges /> </HeroColorPanelsContent> <HeroColorPanelsVisual desktopShaderProps={{ colors: ["#006CFF", "#00d2ff"] }} /> </HeroColorPanelsContainer> <HeroColorPanelsMobileVisual /> </HeroColorPanelsRoot>

Performance Notes

  • ColorPanels is wrapped with memo to avoid unnecessary rerenders.
  • Mobile and desktop effects are rendered as separate sections so each layout can be tuned independently.
  • Keep the hero in client-rendered regions only ("use client" is required).

Accessibility Notes

  • Includes a screen-reader-only heading (sr-only) so page structure remains meaningful.
  • CTA link includes rel="noopener noreferrer" when opened in a new tab.
  • Ensure visible contrast remains sufficient if you change shader colors or text opacity.

Troubleshooting

Shader does not render

  • Confirm @paper-design/shaders-react is installed.
  • Verify this component runs in a client context.
  • Confirm parent containers are not clipping to zero height.

Layout looks crowded on small screens

  • Increase the mobile shader container height.
  • Reduce heading size classes or copy length.
  • Move badges under the fold for dense hero content.