Stacked Photo Deck CTA
Split layout pairing heading, copy, and buttons on one side with a hand-of-cards photo deck on the other: up to four photos stacked with a slight rotation and offset, all fanning out into a spread row when the deck is hovered. Each card carries a subtle, continuous shimmer sweep for a polished, always-alive feel.
Docs
Installation
A real shadcn registry command, not a copy-paste stand-in: it fetches this block plus its button, media-slot dependencies and any missing npm packages, and installs them straight into your project.
npx shadcn add https://staaarter.com/r/stacked-photo-deck-cta.jsonPrefer not to use the CLI? Copy the source from the Code toggle above into src/components/blocks/cta/cta47.tsx instead.
Usage
The file also exports cta47Demo, 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 { Cta47, cta47Demo } from "@/components/blocks/cta/cta47"; export default function Page() { return <Cta47 {...cta47Demo} />; }
Props
| Prop | Type | Default | Description |
|---|---|---|---|
| heading | string | "Every project, beautifully organized" | Heading on the text side. |
| description | string | "Drag, drop, and arrange your work exactly how you see it. Our deck view keeps everything within reach without ever feeling cluttered." | Supporting copy under the heading. |
| primaryLabel | string | "Get started free" | Label for the primary button. |
| primaryHref | string | "#" | Link target for the primary button. |
| secondaryLabel | string | "See how it works" | Label for the secondary button. |
| secondaryHref | string | "#" | Link target for the secondary button. |
| photos | MediaSlotImage[] | none | Up to four photos rendered as the fanning card deck. |
| className | string | none | Extra classes for the outer section element. |
Behavior notes
- The card deck is a pure-CSS hover effect: a `group` wraps the four absolutely-positioned cards, each with its own base `rotate`/`translate-x` for the stacked look and a `group-hover:` counterpart that spreads them into a row, all animated with `transition-transform`.
- Each card also has a continuous diagonal shimmer sweep (a translucent gradient overlay animated via a component-scoped `@keyframes cta47-shimmer`), staggered per card with a small `animationDelay` so the sweep doesn't hit every card at once; this animation runs independent of hover.
- Both buttons are inert links (`render={<Link/>}`) pointing at `#` by default; there is no real signup flow wired up.
- Server component throughout: no client-side state, no mouse-tracking, just CSS `:hover`/`group-hover`.
More CTA Blocks
View all →centered-newsletter-cta
Centered Newsletter CTA
Minimal centered call-to-action with heading, description, and action buttons.
split-layout-newsletter-cta
Split Layout Newsletter CTA
Two-column call-to-action with a decorative image on one side and a feature list plus subscribe form on the other.
newsletter-social-proof-cta
Newsletter CTA with Social Proof
Newsletter call-to-action with an avatar stack, subscriber count, and a testimonial quote.
banner-cta
Banner CTA
Horizontal banner call-to-action with heading and action buttons side by side.
stats-cta
Stats CTA
Call-to-action section with impressive statistics and trust indicators above action buttons.
multi-card-cta
Multi-Card CTA
Three action cards side by side, each offering a different path to conversion.