Cta App
App download CTA in a glass panel: headline, ink store buttons and rating on the left; an HTML phone mock-up recording an in-person meeting (mic orb, waveform, AI chip) rising from the bottom on the right.
glass/section/cta-appSource
import { Mic, Sparkles, Star } from "lucide-react";
import { cn } from "@/lib/utils";
export interface CtaAppProps {
title?: string;
description?: string;
stores?: { label: string; sub: string; href: string }[];
rating?: string;
className?: string;
}
const GLASS = "da-stroke bg-da-surface backdrop-blur-da backdrop-saturate-150";
/** App download CTA: copy, two glass store buttons and rating on the left; an HTML phone mock-up recording an in-person meeting on the right. */
export function CtaApp({
title = "Take Halo to the meeting room",
description = "Put your phone on the table. Halo records, transcribes and recaps in-person meetings exactly like calls.",
stores = [
{ label: "App Store", sub: "Download on the", href: "#ios" },
{ label: "Google Play", sub: "Get it on", href: "#android" },
],
rating = "4.8 · 12k ratings",
className,
}: CtaAppProps) {
return (
<section className={cn("da-section overflow-hidden text-da-fg", className)}>
<div className="da-container">
<div className={cn("grid items-center gap-10 overflow-hidden rounded-da-lg px-6 pt-10 shadow-da-lg sm:px-12 md:grid-cols-2 md:pt-0", GLASS)}>
<div className="md:py-14">
<h2 className="font-da-display text-[clamp(1.75rem,4vw,2.75rem)] leading-[1.1] font-semibold tracking-da-display text-balance">{title}</h2>
<p className="mt-4 text-lg text-da-muted-fg">{description}</p>
<div className="mt-8 flex flex-wrap gap-3">
{stores.map((s) => (
<a
key={s.href}
href={s.href}
className="da-focus da-transition flex h-14 items-center rounded-da-md bg-da-fg px-5 text-da-bg shadow-da-md hover:-translate-y-0.5"
>
<span className="leading-tight">
<span className="block text-[11px] opacity-80">{s.sub}</span>
<span className="block font-da-display text-lg font-semibold">{s.label}</span>
</span>
</a>
))}
</div>
<p className="mt-5 inline-flex items-center gap-1.5 text-sm text-da-muted-fg">
<Star aria-hidden className="size-4 fill-da-warning text-da-warning" /> {rating}
</p>
</div>
<div aria-hidden className="relative mx-auto h-[380px] w-[230px] self-end">
<div className="absolute inset-x-0 top-0 h-[460px] rounded-[40px] border-[6px] border-da-fg/85 bg-gradient-to-b from-da-primary/30 via-da-surface-2 to-da-accent/30 p-4 shadow-da-lg">
<div className="mx-auto h-5 w-20 rounded-full bg-da-fg/85" />
<p className="mt-6 text-center text-xs font-semibold">Product offsite · Room 4B</p>
<div className="mx-auto mt-6 grid size-24 place-items-center rounded-full bg-gradient-to-br from-da-primary to-da-accent shadow-da-lg">
<Mic className="size-9 text-da-primary-fg" />
</div>
<p className="mt-3 text-center font-da-mono text-sm">18:42</p>
<div className="mt-4 flex h-10 items-center justify-center gap-1">
{[12, 26, 18, 34, 22, 30, 14, 28, 20, 32, 16, 24].map((h, i) => (
<span key={i} className="w-1.5 rounded-full bg-gradient-to-t from-da-primary to-da-accent" style={{ height: h }} />
))}
</div>
<p className="mt-5 flex items-center gap-1.5 rounded-da-md bg-da-surface p-2.5 text-[11px] shadow-da-sm">
<Sparkles className="size-3.5 shrink-0 text-da-primary" /> 3 decisions captured so far
</p>
</div>
</div>
</div>
</div>
</section>
);
}
export default CtaApp;
modules/glass/section/cta-app/index.tsx
Props
| Prop | Type | Default | Description |
|---|---|---|---|
| title / description / rating | string | — | Texts. |
| stores | { label, sub, href }[] | — | Store buttons. |
| className | string | — | Classes. |
Other cta variants in Glass
Cta Gradient
Bold full-gradient CTA card with a masked grid overlay and top glow, white primary button, translucent secondary button and three frosted stat chips.
CTA Orb
Large frosted panel with a slowly spinning, heavily blurred conic-gradient orb glowing through the glass, centered headline, ink + frosted CTAs and a reassurance line.
Cta Waitlist
Frosted CTA panel haloed by a blurred gradient ring: headline, copy, pill email form with gradient button (success state) and three check perks.
CTA in other art directions
CTA Banner
Full-bleed yellow slab with a giant uppercase headline and an inline email capture form (pending + success states), ruled pattern in the corner.
CTA Countdown
Limited-offer CTA in an ink slab: uppercase offer headline, yellow claim button, dashed promo code, and a four-cell live countdown (days/hours/min/sec) with the first cell in yellow.
CTA Split
Two-audience CTA: a big headline over two fully clickable cards (yellow for engineers, blue for product teams) with audience label, title, pitch and a button chip; cards slam into their shadow on hover.
CTA Sticker
Full-bleed pink CTA with a giant centered uppercase headline, an oversized ink button that slams into its shadow on hover, and a yellow circular text-path sticker ticking around in steps.
Cta Banner
Compact inverted ink banner on a single row: title and one-liner on the left, solid and outline actions on the right, with a faint grid fading in from the right edge.
CTA Glow
Closing call-to-action card: centered headline and copy, ink button with keyboard hint, ghost secondary link, an indigo glow rising from the bottom edge and a gradient hairline on top.
Cta Newsletter
Centered email capture card with an indigo hairline on top: headline, copy, email field and ink button, with client validation plus pending, success and error states.
Cta Split
Wide two-column CTA card: headline, copy and two buttons on the left; a tinted panel on the right with a numbered ‘first 10 minutes’ onboarding checklist and time estimates.
Cta Contact
Studio-style contact CTA: mono label, headline, the email address set huge as a link, and a row of contact channels (studio, press, careers) in mono under a hairline.
Cta Email
Underline-input signup: large headline, then an email field drawn as a single bottom rule with an inline “Get started →” button; confirmation replaces the form.
Cta Giant
Full-width CTA as a giant link: the whole headline is the link, an arrow slides in on hover and an ink underline wipes across; a mono note sits below.
Cta Split
Two-door CTA: the section is split into two equal halves (white | ink) with a mono label and a large title each; hovering a half inverts it and nudges the arrow.
Cta Band
Full-width primary-blue band with a faint grid pattern, headline + subline on the left and inverted white + outlined buttons on the right.
Cta Demo
Book-a-demo CTA: benefits list on the left, bordered form card (work email, company, team size select) on the right with an inline success state.
Cta Stats
Split CTA on a dark (fg-colored) panel: copy + buttons on the left, a 2×2 grid of large outcome stats divided by hairlines on the right.
Cta Trust
Centered CTA inside a bordered panel: headline, two buttons, a line of compliance assurances with shield icons, and a strip of customer wordmarks below a hairline.
Cta Blob
Closing CTA inside a large sage organic blob (SVG shape scaled to the content) with a clay pebble and two leaves around it; serif headline and cream pill buttons.
Cta Journal
Newsletter CTA styled like a paper journal: clay-tinted card with serif title, recent issue list with mono numbers, and a rounded email + button form with a warm thank-you state.
Cta Pledge
Interactive pledge CTA: pick the commitments your team is ready for (round check cards), a counter of companies who pledged, and a CTA that reflects how many you chose.
Cta Wave
Full-width sage band with soft wavy top and bottom edges (SVG), centered serif headline with an italic word, and two pill buttons; flows naturally between cream sections.
Cta App
App-download CTA on a peach block: headline and ink store buttons on the left, a flat white phone mock-up with a “Today” checklist (mint done items) rising from the bottom on the right.
Cta Block
Big periwinkle rounded block with pastel circles peeking from the corners, a centered white headline and two pill buttons (solid white and translucent).
Cta Illustrated
Split CTA in a white rounded card: headline, ink pill button and note on the left; a composition of pastel circle, pill, rotated square and a ✅ tile on the right.
Cta Newsletter
Newsletter CTA on a mint block: a flat envelope made of shapes with a notification badge, headline, pill email form and a cheerful success state.