Staaarter

Video Grid Background CTA

Four looping videos fill the section background in a 2x2 grid, playing simultaneously for a dynamic, energetic backdrop. A dark semi-transparent overlay sits above the whole grid for legibility, with a centered content card (heading, description, buttons) on top of that.

By Staaarter Team
CTA
Docs
Live preview

Docs

Installation

A real shadcn registry command, not a copy-paste stand-in: it fetches this block plus its button dependencies and any missing npm packages, and installs them straight into your project.

npx shadcn add https://staaarter.com/r/video-grid-background-cta.json

Prefer not to use the CLI? Copy the source from the Code toggle above into src/components/blocks/cta/cta58.tsx instead.

Usage

The file also exports cta58Demo, the exact props behind the preview above. Spread it to get a working section in one line, then replace it with your own data.

import { Cta58, cta58Demo } from "@/components/blocks/cta/cta58";

export default function Page() {
  return <Cta58 {...cta58Demo} />;
}

Props

PropTypeDefaultDescription
headingstring"Everywhere your team already works"Main headline.
descriptionstringnoneSupporting copy under the heading.
primaryLabelstring"Start building"Primary button label.
primaryHrefstring"#"Primary button destination.
secondaryLabelstring"View integrations"Secondary button label, omit to hide the button.
secondaryHrefstring"#"Secondary button destination.
tilesVideoTile[]noneExactly 4 video tiles filling the 2x2 background grid, each with its own video and poster.
classNamestringnoneExtra classes for the outer section element.

Types

interface VideoTile {
  videoSrc: string;
  posterSrc: string;
}

Behavior notes

  • All four videos autoplay muted and looped purely through native HTML attributes (`autoPlay loop muted playsInline`) — there is no JavaScript play/pause control in this demo.
  • A real integration should add a user-facing mute/pause control for accessibility (respecting prefers-reduced-motion and giving users a way to stop the motion, especially important with four simultaneous videos); that is intentionally not implemented here.
  • The `tiles` array is rendered in order into a `grid-cols-2 grid-rows-2` background layer; passing fewer or more than 4 tiles will leave gaps or overflow the grid, so the demo always supplies exactly 4.