AI Product Page
v1.0.0Added in 1.8.0
An AI product page: a streaming assistant mockup with prompt chips, a capability bento, how it works, privacy, add-on pricing and an FAQ.
The hero holds a drawn Acme workspace with an Acme AI panel beside a doc. The first answer types itself out once when the mockup comes into view, with a light sweeping under the panel header. Pick a prompt chip (Summarize this doc, Draft a project plan, Find blockers, Write release notes; a scrollable row on phones) and the assistant thinks, then streams a new answer: bullet points, a plan table with owners, or task cards with Blocked and At risk pills. Type your own question in the composer and press Enter: words like plan, blockers or release pick the matching answer, anything else gets a workspace answer with sources; while it streams the send button turns into Stop. Under a finished answer, Insert into doc drops a summary callout into the doc and other actions confirm with Done; the copy button copies the answer. The capability cards link to their pages, and the Translate card's language pills switch the sample sentence. In How it works, Approve buttons toggle to Approved. The admin panel's switches flip, and the numbers count up once when they scroll in. In pricing, drag the seat slider (or use the arrow keys) and the monthly total rolls; Add Acme AI spins, then confirms with the trial details and Change seats. The FAQ opens one answer at a time. Reduced motion shows answers at once and keeps everything still.
Built with
The sections this page is made of. In the full-screen preview, hold Alt to outline each one on the page.
Add to a project
npx wingo-ui@latest add ai-pagePro item: the CLI needs a Pro account. See plans
Usage
// app/(marketing)/ai/page.tsx
"use client"
import Link from "next/link"
import { AiPage } from "@/components/templates/ai-page"
export default function AiRoute() {
return (
<AiPage
linkComponent={Link}
onAddAi={async (seats) => {
const response = await fetch("/api/billing/add-ons", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ addOn: "ai", seats }),
})
if (!response.ok) throw new Error("Could not add Acme AI")
}}
/>
)
}Props
designdefault"classic""classic" | "bold" | "minimal"The whole page's look. classic: the knobs below, a soft glow and dot field behind a centered hero, raised cards, gray bands; bold: a pill header, huge start-aligned heavy type on a grid, a deeper mockup shadow, flat tiles, an inverted numbers band and quote, FAQ cards, a scene band and a wordmark footer; minimal: a transparent header, no glow, an outlined mockup and cards, no gray bands, a ghost FAQ, a plain closing band and a simple footer. The *Props overrides still win.
defaultPromptdefault"summarize"stringThe id of the prompt answered in the mockup on load.
defaultSeatsdefault10numberWhere the add-on's seat slider starts (1 to 100).
streamingdefaulttruebooleanAnswers think for a moment, then type out word by word; false shows them at once.
onPromptChange(id: string) => voidCalled with the prompt id when a chip is picked.
onAsk(question: string) => (AiAnswer | Promise<AiAnswer>)Answers a typed question (a promise keeps the assistant thinking). Without it, a prompt whose keywords match answers, else a workspace answer from aiPageFallbackAnswer.
onAddAi(seats: number) => (void | Promise<unknown>)Add Acme AI with the slider's seat count; a promise keeps the button loading, a rejection shows labels.addFailed. Without it the page waits 900 ms and confirms.
ctaVariantdefault"inverted""inverted" | "soft" | "split"The closing band: a solid band, a gray band, or copy beside the actions. Applies to the classic design.
glowdefaulttruebooleanThe soft light and dot field behind the hero, in the tone. Applies to the classic design.
alternatedefaulttruebooleanGray bands on every other section. Applies to the classic and bold designs.
tonedefault"neutral""neutral" | "brand" | "success" | "warning" | "danger" | "info"The glow, the active chip, the assistant's accents, icon tiles, checks and the announcement badge.
ctaTonedefault"neutral""neutral" | "brand" | "success" | "warning" | "danger" | "info"The hero's Try Acme AI free, Add Acme AI, the closing band and Get started in the header.
promptsdefault"AI_PAGE_PROMPTS"AiPrompt[]{ id, label, icon?, prompt, thinking?, keywords?, answer } chips over the mockup; an answer is { blocks, sources?, action?, insert? } with text, heading, bullets, table and tasks blocks.
docdefault"AI_PAGE_DOC"AiDocThe drawn app beside the assistant: workspace, sidebar, the doc's title, goal, milestones and notes.
capabilitiesdefault"AI_PAGE_CAPABILITIES"AiCapability[]{ id, title, description, icon?, visual?, href? } bento cards; visual picks a drawing (write, summarize, automate, ask, translate).
stepsdefault"AI_PAGE_STEPS"AiStep[]{ id, kind, kicker, title, description, icon?, details } How it works cards; kind draws sources, a reasoning checklist or actions to approve.
trustPointsdefault"AI_PAGE_TRUST_POINTS"AiTrustPoint[]{ title, description, icon? } privacy promises.
trustStatsdefault"AI_PAGE_TRUST_STATS"AiTrustStat[]{ value, decimals?, prefix?, suffix?, label } numbers that count up.
adminSettingsdefault"AI_PAGE_ADMIN_SETTINGS"AiAdminSetting[]{ id, label, description, defaultChecked? } switches in the drawn admin panel; an empty array hides it.
addOndefault"AI_PAGE_ADDON"AiAddOn{ name, price, monthlyPrice, description, features }: the add-on card with the seat calculator.
businessdefault"AI_PAGE_BUSINESS"AiBundlePlan{ name, price, description, features, href }: the inverted plan that includes Acme AI.
quotedefault"AI_PAGE_QUOTE"AiQuote{ quote, name, role, company, avatar?, href?, metrics? }: the customer quote and its results.
faqdefault"AI_PAGE_FAQ"FaqItem[]Questions of the FAQ (FaqSection items).
logosdefault"AI_PAGE_LOGOS"LogoCloudItem[]Customer wordmarks under the hero.
hrefsdefault"DEFAULT_AI_PAGE_HREFS"Partial<AiPageHrefs>{ primary, secondary, announcement, privacy, cta, ctaSecondary }: where the hero, privacy and closing links go.
labelsdefault"DEFAULT_AI_PAGE_LABELS"Partial<AiPageLabels>Every visible string; billedYearly, seatsValue and addedDescription are functions.
showLogosdefaulttruebooleanThe customer logos under the hero.
showCapabilitiesdefaulttruebooleanThe capability bento.
showStepsdefaulttruebooleanHow it works.
showTrustdefaulttruebooleanThe privacy promises, admin panel and numbers.
showQuotedefaulttruebooleanThe customer quote.
showPricingdefaulttruebooleanThe add-on and Business cards.
showFaqdefaulttruebooleanThe FAQ.
showCtadefaulttruebooleanThe closing band.
headerdefaulttruebooleanThe marketing header; off inside a site layout.
footerdefaulttruebooleanThe marketing footer.
headerPropsPartial<MarketingHeaderProps>Passed to MarketingHeader.
footerPropsPartial<MarketingFooterProps>Passed to MarketingFooter.
logosPropsPartial<LogoCloudProps>Passed to LogoCloud, spread last.
faqPropsPartial<FaqSectionProps>Passed to FaqSection, spread last.
ctaPropsPartial<CtaSectionProps>Passed to CtaSection, spread last.
animateIndefaulttruebooleanThe hero rises in on mount, the first answer streams once and the numbers count up; off in thumbnails and under reduced motion.
localedefault"en-US"stringIntl locale for prices and numbers.
linkComponentdefault"<a>"(props: LinkComponentProps) => ReactNodeThe router link for the header, footer and inner links (next/link in an app).
classNamestringClasses for the root.
classNamesPartial<Record<AiPageSlot, string>>Classes for header, hero, playground, logos, capabilities, steps, trust, quote, pricing, faq, cta and footer.
Parts
AI_PAGE_SAMPLE
constantAll the sample content in one object: prompts, doc, capabilities, steps, trustPoints, trustStats, adminSettings, addOn, business, quote, faq and logos.
AI_PAGE_PROMPTS
constantFour prompts with their answers: a summary, a plan table, blocker cards and release notes.
AI_PAGE_DOC
constantThe Acme 3.0 launch plan doc and the Northwind sidebar.
AI_PAGE_CAPABILITIES
constantWrite, Summarize, Automate, Ask your workspace and Translate.
AI_PAGE_STEPS
constantContext, Reasoning and Action.
AI_PAGE_TRUST_POINTS
constantFour privacy promises.
AI_PAGE_TRUST_STATS
constant0% used for training, 99.95% uptime, 4.2 hrs saved, 12,000+ teams.
AI_PAGE_ADMIN_SETTINGS
constantThree admin switches.
AI_PAGE_ADDON
constantThe $8 add-on ($10 monthly) and its features.
AI_PAGE_BUSINESS
constantThe $24 Business plan with Acme AI included.
AI_PAGE_QUOTE
constantPriya Shah, Head of Operations at Stark Logistics, with three results.
AI_PAGE_FAQ
constantSix questions about training, models, permissions, price, admin controls and languages.
AI_PAGE_LOGOS
constantThe customer wordmarks (LOGO_CLOUD_SAMPLE).
aiPageFallbackAnswer
function(question: string) => AiAnswer: the workspace answer for a typed question that matches no prompt.
DEFAULT_AI_PAGE_LABELS
constantThe English strings.
DEFAULT_AI_PAGE_HREFS
constantWhere the hero, privacy and closing links go.
AI_PAGE_DESIGNS
constantThe design names, classic first: ["classic", "bold", "minimal"].
AiPageDesign
type"classic" | "bold" | "minimal".
AiPageProps
typeProps of AiPage.
AiPageLabels
typeEvery visible string.
AiPageHrefs
type{ primary, secondary, announcement, privacy, cta, ctaSecondary }.
AiPageSlot
typeThe classNames keys, from header to footer.
AiPrompt
type{ id, label, icon?, prompt, thinking?, keywords?, answer }: a prompt chip and its answer.
AiAnswer
type{ blocks, sources?, action?, insert? }: what the assistant says.
AiAnswerBlock
typeOne piece of an answer: text, heading, bullets, table ({ columns, rows }) or tasks.
AiAnswerTask
type{ title, owner, note, status, tone }: a task card in an answer.
AiDoc
typeThe drawn app's sidebar and doc.
AiCapability
typeOne bento card.
AiCapabilityVisual
type"write" | "summarize" | "automate" | "ask" | "translate".
AiStep
typeOne How it works card.
AiStepKind
type"sources" | "reasoning" | "actions": the drawing inside a step.
AiTrustPoint
type{ title, description, icon? }.
AiTrustStat
type{ value, decimals?, prefix?, suffix?, label }.
AiAdminSetting
type{ id, label, description, defaultChecked? }.
AiAddOn
type{ name, price, monthlyPrice, description, features }.
AiBundlePlan
type{ name, price, description, features, href }.
AiQuote
type{ quote, name, role, company, avatar?, href?, metrics? }.
Examples
Bold design
design="bold": huge start-aligned type on a grid, a deeper mockup shadow, flat capability tiles, an inverted numbers band and an inverted quote.
Minimal design
design="minimal": a transparent header, no glow, an outlined mockup and cards, no gray bands and a simple footer.
Brand accents, opening on blockers
tone and ctaTone brand: the glow, the assistant and Add Acme AI turn orange, and the mockup opens on Find blockers.
Inside a site layout, no streaming
No header or footer, answers appear at once, without logos or the quote, and 25 seats on the slider.
When adding fails
onAddAi rejects: after the spinner the add-on card keeps the seats and shows the error above Add Acme AI.
Dependencies
Files
- components/templates/ai-page.tsx
- components/templates/ai-page-data.ts