WingoUI
Buttons & Actions
ButtonButton GroupCopy ButtonDelete ButtonTheme ToggleToggleToggle Group
Inputs
Avatar UploadCalendarCheckboxColor PickerComboboxCron PickerCurrency InputDate PickerDate Range PickerDate Time PickerDuration PickerEmail InputFile UploadFilter BuilderInputInput GroupListboxMasked InputMention InputMonth PickerMulti SelectNumber InputOTP InputPassword InputPhone InputRadio GroupRatingSearch InputSegmented ControlSelectSignature PadSliderSwitchTag InputTextareaTime Picker
Forms
Address InputCSV ImportFieldForm WizardInline EditInvoice line itemsRich Text EditorSchema Builder
Navigation
Back To TopBounce SidebarBreadcrumbCommand MenuGlobal SearchGooey NavHook SidebarNav MenuNav TabsPaginationProximity SidebarScroll ProgressSidebarStepsTable Of ContentsTabsTopbarUser MenuWorkspace Switcher
Overlays
Alert DialogContext MenuDialogDrawerDropdown MenuFamily DrawerHover CardPopoverSheetShortcuts DialogTooltipTour
Feedback
AlertBannerCookie ConsentEmoji ReactionEmpty StateNotification BellNotification CenterProgressRoute ProgressSkeletonSpinnerToast
Data Display
Approval FlowAvatarBadgeCalendar ViewCode BlockComment ThreadContact cardCountdownDescription ListDiff ViewerFile ListFile managerFolderGanttJSON ViewerKbdLog ViewerMarkdownPresenceSchedulerTagTimelineTree View
Tables & Lists
Audit LogData TableDeal PipelineEditable GridKanbanListMembers tablePermissions MatrixTableTask ListVirtual List
Charts & Stats
Animated CounterArea chartBar chartDonut chartFunnel chartGaugeGitHub ActivityHeatmap calendarLeaderboardLine chartRadial barSparklineStat CardTrackerTrend badge
Layout
AccordionApp ShellCardCollapsibleDetail LayoutEntity HeaderPage HeaderScroll AreaSeparatorSettings LayoutSplit ViewToolbar
Media
Audio PlayerCarouselCSV ViewerDOCX EditorDOCX ViewerExcel ViewerFile SystemImage CropperImage LightboxLocation MapPDF ViewerPowerPoint ViewerQR CodeStep PlayerVideo Player
AI Kit
Agent Status CardChat MessageChat ThreadConversation ListFluid OrbGrid RevealMatrix OrbModel PickerPrompt InputReasoning IndicatorRule BuilderSuggestion ChipsTool Call TimelineUsage MeterVoice InputWorkflow Canvas
Text & Effects
Gravity Letters
Mobile
Action SheetBottom Tab BarFABHaptic ButtonHero HeaderInstall PromptLarge Title HeaderNotification BannerOnboarding CarouselPicker WheelPull To RefreshSlide To ConfirmSticky CTA BarSwipe DeckSwipeable Tabs
Commerce
Cart drawerCategory pickerCheckout stepsCoupon inputFavorite buttonFilter panelListing cardListing gridOrder trackerPricePrice rangePricing tableProduct galleryQuantity stepperReviewsSeller card
Marketing Sections
App Download SectionBlog Cards SectionCTA SectionFAQ SectionFeature GridFeature ShowcaseHero SectionIntegrations SectionLogo CloudMarketing FooterMarketing HeaderMarketing SectionNewsletter SectionPricing SectionStats SectionSteps SectionTeam SectionTestimonials SectionTimeline SectionVideo Section
Blocks
Admin Dashboard PageAdmin ShellAI Chat PageAutomation Builder PageCheckout PageCRM Contact PageCRM Pipeline PageError PagesInbox PageInvoice PageKPI DashboardListing Detail PageLogin PageMarketplace Home PageMarketplace Search PageMarketplace ShellMobile App HomeOnboarding FlowPost Listing WizardPricing PageRegister PageSettings PageUsers Admin Page
Templates
About PageAcademy PageAccessibility PageAffiliate PageAI Product PageBlog PageBlog Post PageCareers PageChangelog PageCommunity PageCompare PageContact PageCustomer Story PageCustomers PageDemo Booking PageDevelopers PageDocs Home PageDownload PageEnterprise PageEvents PageExperts PageFAQ PageFeature PageGlossary PageHelp Article PageHelp Center PageIntegration Detail PageIntegrations PageJob Detail PageLanding PageLaunch PageLegal PageManifesto PagePress PageProduct Tour PageReferral PageRoadmap PageROI Calculator PageSecurity PageSolutions PageStartups PageStatus PageTemplate Gallery PageWaitlist PageYear in Review Page
Hooks & Utilities
AI ChatChart kitCommerceDate utilsFile exportFile typesFiltersForm validationHapticsInvoicingMotion presetsNavigationNumber formatRelative timeRomanian locationsSpreadsheetText matchTonesUIProvideruseClipboarduseConsentuseControllableStateuseCooldownuseDebounceuseKeyboardInsetuseLocaleuseLongPressuseMediaControlsuseMediaQueryuseOverflowItemsusePersistedStateuseScrollEdgesuseScrollStateuseSelectionuseShortcutuseStickToBottom
GalleryTheme

Templates

Product Tour Page

Templates

Product Tour Page

Design
Press PageReferral Page
Design
Live props
Appearance
design
testimonialsLayout
ctaVariant
glow
alternate
tone
ctaTone
State
defaultChapter
defaultStep
defaultFullscreen
Behavior
autoPlay
autoPlayInterval4000ms
animateIn
locale
Layout
showChapters
showHuman
showTestimonials
showFaq
showCta
header
footer
Code
import { ProductTourPage } from "@/components/templates/product-tour-page"

<ProductTourPage />
  1. Home
  2. Templates
  3. Product Tour Page
Pro

Product Tour Page

v1.0.0·Added 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.

  • Marketing Sectionmarketing-section
  • Marketing Headermarketing-header
  • Marketing Footermarketing-footer
  • FAQ Sectionfaq-section
  • CTA Sectioncta-section
  • Testimonials Sectiontestimonials-section

Add to a project

npx wingo-ui@latest add product-tour-page

Pro 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.

  • chapter
    string

    The current chapter id, controlled. Pair with step and onStepChange.

  • defaultChapterdefault "plan"
    string

    The chapter the tour opens on (the first chapter's id).

  • step
    number

    The current step, controlled: 0 is the first step, steps.length the chapter's end card.

  • defaultStepdefault 0
    number

    The step the tour opens on; the drawn app shows every earlier action done.

  • onStepChange
    (position: { chapter: string; step: number }) => void

    Fires on every move: Next, Back, a hotspot, a chapter jump, Restart or autoplay.

  • onComplete
    () => void

    The last step of the last chapter was performed.

  • fullscreen
    boolean

    The fullscreen dialog, controlled.

  • defaultFullscreendefault false
    boolean

    Opens the tour in the fullscreen dialog on load.

  • onFullscreenChange
    (open: boolean) => void

    The fullscreen dialog opened or closed.

  • autoPlaydefault false
    boolean

    Steps forward on its own while the tour is on screen; stops on the first click, while hovered and under reduced motion.

  • autoPlayIntervaldefault 4000
    number

    Milliseconds 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.

  • glowdefault true
    boolean

    The soft light behind the hero, classic design.

  • alternatedefault true
    boolean

    Gray 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.

  • showChaptersdefault true
    boolean

    The What you'll see chapter cards.

  • showHumandefault true
    boolean

    The Prefer a human? band.

  • showTestimonialsdefault true
    boolean

    The testimonials.

  • showFaqdefault true
    boolean

    The FAQ.

  • showCtadefault true
    boolean

    The closing band.

  • headerdefault true
    boolean

    The marketing header; off inside a site layout.

  • footerdefault true
    boolean

    The marketing footer.

  • headerProps
    Partial<MarketingHeaderProps>

    Passed to MarketingHeader.

  • footerProps
    Partial<MarketingFooterProps>

    Passed to MarketingFooter.

  • testimonialsProps
    Partial<TestimonialsSectionProps>

    Passed to TestimonialsSection, spread last.

  • faqProps
    Partial<FaqSectionProps>

    Passed to FaqSection, spread last.

  • ctaProps
    Partial<CtaSectionProps>

    Passed to CtaSection, spread last.

  • animateIndefault true
    boolean

    The hero rises in on a client mount and the hotspots pulse; off in thumbnails and under reduced motion.

  • localedefault "en-US"
    string

    Intl locale for the dates and numbers in the drawn app.

  • linkComponentdefault "<a>"
    (props: LinkComponentProps) => ReactNode

    The router link for the header, footer and inner links (next/link in an app).

  • className
    string

    Classes for the root.

  • classNames
    Partial<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

    constant

    The six sample chapters with 21 steps.

  • PRODUCT_TOUR_TARGETS

    constant

    Each view's targets in the order its steps perform them, e.g. board: add-task, assign, card, share.

  • PRODUCT_TOUR_TESTIMONIALS

    constant

    Three customer quotes with a metric each.

  • PRODUCT_TOUR_FAQ

    constant

    Six questions about the tour, setup, imports, AI and demos.

  • DEFAULT_PRODUCT_TOUR_PAGE_LABELS

    constant

    The English strings.

  • DEFAULT_PRODUCT_TOUR_PAGE_HREFS

    constant

    Where Start free, Book a demo and Talk to sales go.

  • PRODUCT_TOUR_PAGE_DESIGNS

    constant

    The design names, classic first: ["classic", "bold", "minimal"].

  • ProductTourPageDesign

    type

    "classic" | "bold" | "minimal".

  • ProductTourPageProps

    type

    Props of ProductTourPage.

  • ProductTourPageLabels

    type

    Every visible string.

  • ProductTourPageHrefs

    type

    { start, demo, sales }.

  • ProductTourPageSlot

    type

    The 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

Open

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.

Open

Minimal design

design="minimal": a transparent header, no glow, an outlined app and cards, no gray bands and a simple footer.

Open

Brand accents, mid-tour

tone and ctaTone brand: orange hotspots and buttons, opening on the third step of Automate the handoff.

Open

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.

Open

Finished tour

Opens on the completion card with Start free, Book a demo and Take the tour again.

Dependencies

@radix-ui/react-dialogmotionlucide-reactmarketing-sectionmarketing-headermarketing-footerfaq-sectioncta-sectiontestimonials-sectionavatarbuttonuse-controllable-statenavigationmotiontonesui-config

Files

  • components/templates/product-tour-page.tsx
  • components/templates/product-tour-page-data.ts

See also

TourLanding PageFeature PageDemo Booking PageAI Product Page
PreviousPress PageNext Referral Page