Product Tour Page
v1.0.0Added in 1.8.0
An interactive product tour page: visitors click through a drawn Acme app in six chapters with hotspots and coachmarks, then start free.
The hero's Start the tour scrolls to the drawn Acme app and focuses it. A chapter rail above the app (Plan a project, Write the spec, Automate the handoff, Ship with the timeline, Ask Acme AI, Report to stakeholders) shows each chapter's progress; click one to skip to it, or use the sidebar (the bottom tab bar on phones). Every step puts a pulsing hotspot on the exact element with a coachmark beside it (title, one line, step x/y, Back and Next). Clicking the hotspot or Next performs the action in the app: a card is added, gets an owner and slides to In progress, the team avatars pop in, a doc title types itself, a checklist, a mention with a reply and a synced task embed appear, automation nodes connect and the rule switches to Live, a timeline bar stretches and the dependent bar moves, a launch milestone drops in, Acme AI answers and creates tasks, chart bars grow, a target line and a share card appear. Each chapter ends on an Up next card; the last one opens a completion card with Start free, Book a demo and Take the tour again. Keys while the app has focus: Right and Left arrows step, Enter performs. Fullscreen tour opens the same tour in a full-viewport dialog; Escape or Exit fullscreen closes it. Restart goes back to the start. On phones the app shows one panel at a time with 44px hotspots, and the coachmark docks as a card under the app. The chapter cards jump into the tour, the FAQ opens one answer at a time. With autoPlay the tour steps forward on its own while on screen until the first click; reduced motion 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 product-tour-pagePro item: the CLI needs a Pro account. See plans
Usage
// app/(marketing)/tour/page.tsx
"use client"
import Link from "next/link"
import { ProductTourPage } from "@/components/templates/product-tour-page"
export default function TourRoute() {
return (
<ProductTourPage
linkComponent={Link}
onStepChange={({ chapter, step }) => console.log("tour", chapter, step)}
onComplete={() => console.log("tour complete")}
/>
)
}Props
designdefault"classic""classic" | "bold" | "minimal"The whole page's look. classic: the knobs below, a soft glow behind a centered hero, raised cards, gray bands; bold: a pill header, huge start-aligned heavy type on a grid, a deeper app shadow, flat chapter tiles, an inverted human band, featured quotes, FAQ cards, a scene band and a wordmark footer; minimal: a transparent header, no glow, an outlined app and cards, no gray bands, a plain human band, a ghost FAQ, a plain closing band and a simple footer. The *Props overrides still win.
chaptersdefault"PRODUCT_TOUR_CHAPTERS"ProductTourChapter[]{ id, view, title, summary, duration, steps }: the tour. view picks the drawn screen (board, doc, automations, timeline, ai, report); each step { id, target, title, body, action, side? } performs the view's next action (PRODUCT_TOUR_TARGETS lists them in order).
testimonialsdefault"PRODUCT_TOUR_TESTIMONIALS"Testimonial[]Quotes for the testimonials section.
faqdefault"PRODUCT_TOUR_FAQ"FaqItem[]Questions of the FAQ.
hrefsdefault"DEFAULT_PRODUCT_TOUR_PAGE_HREFS"Partial<ProductTourPageHrefs>{ start, demo, sales }: Start free, Book a demo and Talk to sales.
labelsdefault"DEFAULT_PRODUCT_TOUR_PAGE_LABELS"Partial<ProductTourPageLabels>Every visible string; stepOf is a function.
chapterstringThe current chapter id, controlled. Pair with step and onStepChange.
defaultChapterdefault"plan"stringThe chapter the tour opens on (the first chapter's id).
stepnumberThe current step, controlled: 0 is the first step, steps.length the chapter's end card.
defaultStepdefault0numberThe step the tour opens on; the drawn app shows every earlier action done.
onStepChange(position: { chapter: string; step: number }) => voidFires on every move: Next, Back, a hotspot, a chapter jump, Restart or autoplay.
onComplete() => voidThe last step of the last chapter was performed.
fullscreenbooleanThe fullscreen dialog, controlled.
defaultFullscreendefaultfalsebooleanOpens the tour in the fullscreen dialog on load.
onFullscreenChange(open: boolean) => voidThe fullscreen dialog opened or closed.
autoPlaydefaultfalsebooleanSteps forward on its own while the tour is on screen; stops on the first click, while hovered and under reduced motion.
autoPlayIntervaldefault4000numberMilliseconds per step while autoplaying (1500 minimum).
testimonialsLayoutdefault"quote""quote" | "grid" | "featured"The testimonials layout, classic design.
ctaVariantdefault"inverted""inverted" | "soft" | "split"The closing band, classic design.
glowdefaulttruebooleanThe soft light behind the hero, classic design.
alternatedefaulttruebooleanGray bands on every other section.
tonedefault"neutral""neutral" | "brand" | "success" | "warning" | "danger" | "info"Hotspots, Next buttons, progress, the glow and accents in the drawn app.
ctaTonedefault"neutral""neutral" | "brand" | "success" | "warning" | "danger" | "info"Start the tour, Start free on the completion card, the header's Get started and the closing band.
showChaptersdefaulttruebooleanThe What you'll see chapter cards.
showHumandefaulttruebooleanThe Prefer a human? band.
showTestimonialsdefaulttruebooleanThe testimonials.
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.
testimonialsPropsPartial<TestimonialsSectionProps>Passed to TestimonialsSection, spread last.
faqPropsPartial<FaqSectionProps>Passed to FaqSection, spread last.
ctaPropsPartial<CtaSectionProps>Passed to CtaSection, spread last.
animateIndefaulttruebooleanThe hero rises in on a client mount and the hotspots pulse; off in thumbnails and under reduced motion.
localedefault"en-US"stringIntl locale for the dates and numbers in the drawn app.
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<ProductTourPageSlot, string>>Classes for header, hero, title, tour, rail, app, hotspot, coachmark, completion, chapters, chapter, human, testimonials, faq, cta and footer.
Parts
PRODUCT_TOUR_CHAPTERS
constantThe six sample chapters with 21 steps.
PRODUCT_TOUR_TARGETS
constantEach view's targets in the order its steps perform them, e.g. board: add-task, assign, card, share.
PRODUCT_TOUR_TESTIMONIALS
constantThree customer quotes with a metric each.
PRODUCT_TOUR_FAQ
constantSix questions about the tour, setup, imports, AI and demos.
DEFAULT_PRODUCT_TOUR_PAGE_LABELS
constantThe English strings.
DEFAULT_PRODUCT_TOUR_PAGE_HREFS
constantWhere Start free, Book a demo and Talk to sales go.
PRODUCT_TOUR_PAGE_DESIGNS
constantThe design names, classic first: ["classic", "bold", "minimal"].
ProductTourPageDesign
type"classic" | "bold" | "minimal".
ProductTourPageProps
typeProps of ProductTourPage.
ProductTourPageLabels
typeEvery visible string.
ProductTourPageHrefs
type{ start, demo, sales }.
ProductTourPageSlot
typeThe classNames keys.
ProductTourPosition
type{ chapter, step }: what onStepChange receives.
ProductTourChapter
type{ id, view, title, summary, duration, steps }.
ProductTourStep
type{ id, target, title, body, action, side? }.
ProductTourView
type"board" | "doc" | "automations" | "timeline" | "ai" | "report".
ProductTourSide
type"top" | "bottom" | "left" | "right": where the coachmark sits on wide screens.
Examples
Bold design
design="bold": huge start-aligned type on a grid, a deeper app shadow, flat chapter tiles, an inverted human band and a wordmark footer.
Minimal design
design="minimal": a transparent header, no glow, an outlined app and cards, no gray bands and a simple footer.
Brand accents, mid-tour
tone and ctaTone brand: orange hotspots and buttons, opening on the third step of Automate the handoff.
Autoplay inside a site layout
No header or footer, only the tour and the FAQ; it steps forward every 3 seconds while on screen until you click.
Finished tour
Opens on the completion card with Start free, Book a demo and Take the tour again.
Dependencies
Files
- components/templates/product-tour-page.tsx
- components/templates/product-tour-page-data.ts