Footer Newsletter
Tinted footer with brand, tagline and an inline newsletter form on the left, three link columns on the right and a legal row below.
minimal/section/footer-newsletterSource
"use client";
import { useId, useState } from "react";
import { cn } from "@/lib/utils";
export interface FooterNewsletterProps {
brand?: string;
tagline?: string;
columns?: { title: string; links: { label: string; href: string }[] }[];
newsletterTitle?: string;
onSubscribe?: (email: string) => void | Promise<void>;
legal?: string;
className?: string;
}
const DEFAULT_COLUMNS = [
{
title: "Product",
links: [
{ label: "Alerting", href: "#alerting" },
{ label: "On-call", href: "#on-call" },
{ label: "Status pages", href: "#status-pages" },
{ label: "Pricing", href: "#pricing" },
],
},
{
title: "Resources",
links: [
{ label: "Docs", href: "#docs" },
{ label: "API", href: "#api" },
{ label: "Incident playbooks", href: "#playbooks" },
{ label: "Changelog", href: "#changelog" },
],
},
{
title: "Company",
links: [
{ label: "About", href: "#about" },
{ label: "Careers", href: "#careers" },
{ label: "Security", href: "#security" },
{ label: "Contact", href: "#contact" },
],
},
];
/** Footer with an inline newsletter form next to the brand, three link columns and a legal row. */
export function FooterNewsletter({
brand = "Tracewise",
tagline = "Incident response for teams that ship fast.",
columns = DEFAULT_COLUMNS,
newsletterTitle = "Get the monthly Pager Digest",
onSubscribe,
legal = "© 2026 Tracewise, Inc. All rights reserved.",
className,
}: FooterNewsletterProps) {
const id = useId();
const [email, setEmail] = useState("");
const [done, setDone] = useState(false);
return (
<footer className={cn("border-t border-da-border bg-da-surface-2 text-da-fg", className)}>
<div className="da-container grid gap-12 py-14 lg:grid-cols-[1.4fr_2fr]">
<div>
<p className="text-[15px] font-semibold tracking-tight">{brand}</p>
<p className="mt-2 max-w-xs text-sm text-da-muted-fg">{tagline}</p>
<form
className="mt-8 max-w-sm"
onSubmit={async (e) => {
e.preventDefault();
if (!email) return;
await onSubscribe?.(email);
setDone(true);
}}
>
<label htmlFor={`${id}-email`} className="text-[13px] font-medium">
{newsletterTitle}
</label>
<div className="mt-2 flex gap-2">
<input
id={`${id}-email`}
type="email"
required
autoComplete="email"
value={email}
onChange={(e) => setEmail(e.target.value)}
placeholder="you@company.com"
disabled={done}
className="da-focus h-9 min-w-0 flex-1 rounded-da-md border border-da-border bg-da-input px-3 text-sm placeholder:text-da-muted-fg disabled:opacity-60"
/>
<button
type="submit"
disabled={done}
className="da-focus da-transition h-9 rounded-da-md bg-da-fg px-3.5 text-sm font-medium text-da-bg hover:bg-da-fg/85 disabled:opacity-60"
>
{done ? "Subscribed" : "Subscribe"}
</button>
</div>
<p role="status" className="mt-2 min-h-5 text-[12px] text-da-muted-fg">
{done ? "Thanks — see you next month." : ""}
</p>
</form>
</div>
<nav aria-label="Footer" className="grid grid-cols-2 gap-8 sm:grid-cols-3">
{columns.map((c) => (
<div key={c.title}>
<h2 className="text-[13px] font-medium">{c.title}</h2>
<ul className="mt-4 space-y-2.5">
{c.links.map((l) => (
<li key={l.href}>
<a href={l.href} className="da-focus da-transition rounded-da-sm text-sm text-da-muted-fg hover:text-da-fg">
{l.label}
</a>
</li>
))}
</ul>
</div>
))}
</nav>
</div>
<div className="border-t border-da-border">
<p className="da-container py-5 text-xs text-da-muted-fg">{legal}</p>
</div>
</footer>
);
}
export default FooterNewsletter;
modules/minimal/section/footer-newsletter/index.tsx
Props
| Prop | Type | Default | Description |
|---|---|---|---|
| brand / tagline / newsletterTitle / legal | string | — | Texts. |
| columns | { title, links }[] | — | Link columns. |
| onSubscribe | (email: string) => void | Promise<void> | — | Submit handler. |
| className | string | — | Classes on the footer. |
Other footer variants in Minimal
Footer Minimal
Single-row footer: small square mark, brand and copyright, a handful of links and a live ‘All systems normal’ status pill. Stacks on mobile.
Footer Simple
Quiet footer: brand, one-line description and a live status pill with pulsing dot, three link columns in muted text, and a hairline bottom bar with copyright and social links.
Footer Wordmark
Footer with a row of links, address and socials, ending on a giant edge-to-edge lowercase brand wordmark that fades into the page and is cropped by the bottom edge.
Footer in other art directions
Footer Bar
Single-row ruled footer for apps and docs: wordmark, link cells that flood yellow on hover, green status square and copyright, each separated by vertical strokes; stacks on mobile.
Footer CTA
Footer that opens with a full-bleed yellow call-to-action band (huge headline + ink button), then brand with social chips, three link columns and a copyright line on paper.
Footer Mega
Inverted ink footer with brand + status pill, three link columns, a viewport-wide wordmark and a legal bar. Link hover paints a yellow highlight.
Footer Sitemap
Dense sitemap footer: boxed newsletter strip with success state, five ruled link columns with pink badges (New, hiring count), then brand, legal links and a language select.
Footer Cta
Glass footer panel that opens with a gradient CTA band (headline + white button), then brand, tagline, three link columns and a legal row.
Footer Glass
Inset frosted footer panel with brand, tagline, pill newsletter form (success state), three link columns and a legal bar.
Footer Pill
Compact floating glass pill footer: gradient dot brand with copyright, inline links and round social buttons; becomes a stacked rounded card on mobile.
Footer Wordmark
A giant gradient brand wordmark sits behind a frosted glass panel holding three link columns and the legal line, so the letters glow through the blur.
Footer Columns
Footer with a newsletter: underline-input “Studio notes” signup in the first half, link columns in the second, all on a hairline grid; mono copyright row.
Footer Giant
Signature footer: small link rows above, and the brand name set enormous across the full width at the bottom, clipped by the page edge; inverted (ink) background.
Footer Minimal
One-line footer: logo mark, copyright, and links separated by slashes — all in mono caps on a single hairline row; wraps gracefully on mobile.
Footer Mono
Grid footer: ink top rule, logo + one-line description in the first columns, three mono-headed link columns, and a bottom row of legal links and a live-status signal dot.
Footer Compact
Single-row compact footer: logo mark + copyright on the left, inline links on the right, hairline top border; stacks on mobile.
Footer Enterprise
Large enterprise footer on surface-2: brand + tagline + region selector on the left, five link columns, then a bottom bar with legal links, compliance chips and copyright.
Footer Newsletter
Footer led by a newsletter band (“The Finance Brief”) with an inline email form, then three link columns and a copyright line.
Footer Status
Developer-oriented dark footer (fg/bg inverted): brand, live system-status pill with pulsing dot, API version in mono, and three link columns.
Footer Garden
Large footer on deep sage (a dark sage tint in dark mode) with rolling-hill silhouettes along the top edge, logo + tagline, three link columns and a “we measure our own footprint” note in the bottom line.
Footer Letter
Footer written like the end of a letter: a huge italic serif sign-off, a handwritten-style signature line, contact email and a simple link row under a warm rule.
Footer Newsletter
Footer with an inline journal signup: logo + rounded email form in a sage-tinted card on the left, two link columns on the right, and a sand-colored bottom strip.
Footer Simple
Quiet centered footer: logo and serif wordmark, a single row of links separated by leaf dots, and a small copyright line on cream.
Footer Columns
Classic footer on a soft panel with big rounded top corners: shape logo and tagline, three link columns in rounded headings, and a legal row with a language pill.
Footer Cta
Footer opening with a lavender CTA card that overlaps the top of a soft bottom band holding the brand, inline links and legal line.
Footer Pastel
Playful footer where each link column is its own pastel tile (peach, mint, lavender) plus a butter brand tile with round emoji social buttons and the legal line.
Footer Simple
Centered minimal footer: rounded wordmark with a periwinkle dot, a row of soft pill links and a small “made with care” line.