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

Year in Review Page

Templates

Year in Review Page

Design
Waitlist PageAI Chat
Design
Live props
Appearance
design
tone
ctaTone
State
mode
Behavior
storyDuration
autoAdvance
animateIn
locale
Content
year
teamName
endDate
shareUrl
Layout
showAnnouncement
showNav
showShipped
showRhythm
showWords
showAutomations
showProjects
showReactions
showPersona
showPeople
showPersonality
showShare
showCta
ctaVariant
header
footer
Code
import { YearInReviewPage } from "@/components/templates/year-in-review-page"

<YearInReviewPage />
  1. Home
  2. Templates
  3. Year in Review Page
Pro

Year in Review Page

v1.0.0·Added in 1.8.0

A Wrapped-style year in review of a team's workspace: giant numbers, a chapter and chart per stat, a story player and a share poster.

The hero sets "2026, wrapped." in giant type beside a stack of drawn stat cards, and the tasks total rolls up once on load. A chapter strip under the hero (and, from 1280px, a sticky dot rail that follows the chapter in view) jumps to eight chapters: tasks per month, a year of daily activity, words written, hours saved by automations, top projects, favorite reactions, the hour-of-day clock that names the team early birds or night owls, and the MVPs. Each chapter's big number rolls up and its chart grows the first time it scrolls into view (everything is final in the server markup). Hover, tap or Tab to a month, a day, an hour or a point for its value. The personality card flips to show the scores behind it. Play your story (hero, strip or rail) opens a full-screen story player: one card per chapter with a progress bar on top that moves on by itself (paused with Space or the pause button, never under reduced motion); tap the left third or press Left to go back, tap the rest or press Right to move on, swipe sideways on touch, swipe down or press Escape to return to the page. The share section shows a drawn poster with Share (the system sheet where there is one), Copy link and Download image, each confirming inline.

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
  • CTA Sectioncta-section

Add to a project

npx wingo-ui@latest add year-in-review-page

Pro item: the CLI needs a Pro account. See plans

Usage

// app/(app)/wrapped/page.tsx
"use client"

import Link from "next/link"
import { YearInReviewPage } from "@/components/templates/year-in-review-page"

export default function WrappedRoute() {
  return (
    <YearInReviewPage
      linkComponent={Link}
      teamName="Northwind"
      year={2026}
      ctaTone="brand"
      shareUrl="https://acme.com/wrapped/northwind-2026"
      onShare={async (method, url) => {
        if (method === "copy") await navigator.clipboard.writeText(url)
        if (method === "download") window.open(`/api/wrapped/poster?team=northwind`, "_blank")
      }}
    />
  )
}

Props

  • designdefault "classic"
    "classic" | "vivid" | "mono"

    The whole page's look. classic: a soft glow hero beside drawn cards, chapters washed in their color, raised chart cards; vivid: a dark mesh hero, every chapter a saturated color band with light charts, a pill header, a band CTA and a wordmark footer; mono: no color at all, ink charts, rules between chapters, giant type, a transparent header and a simple footer. ctaProps, headerProps and footerProps still win.

  • modedefault "scroll"
    "scroll" | "stories"

    scroll: the long page. stories: the full-screen story player opens over it; closing it (Escape, the X, a swipe down) returns to the page and calls onModeChange.

  • onModeChange
    (mode: YearInReviewPageMode) => void

    Runs when the story player opens or closes.

  • storyDurationdefault 6000
    number

    Milliseconds each story card stays before the next one (1500 or more).

  • autoAdvancedefault true
    boolean

    Story cards move on by themselves with a filling progress bar. Reduced motion always turns it off.

  • yeardefault 2026
    number

    The year in the title, the poster and the story.

  • teamNamedefault "Northwind"
    string

    The team or workspace the year belongs to.

  • statsdefault "WRAPPED_STATS"
    WrappedStats

    { tasks, docs, words, automationRuns, hoursSaved, comments, reactions, members, projects }: the year's totals.

  • monthsdefault "WRAPPED_MONTHS"
    WrappedMonth[]

    { month (yyyy-mm), tasks, words, partial? } per month; partial hatches the month still in progress.

  • activitydefault "WRAPPED_ACTIVITY"
    WrappedDay[]

    { date (yyyy-mm-dd), value } tasks shipped per day, for the heatmap, the busiest day and the streak.

  • endDatedefault "2026-10-11"
    string

    The last day the year covers (yyyy-mm-dd): the heatmap's last column and its today ring.

  • hoursdefault "WRAPPED_HOURS"
    number[]

    Tasks shipped per hour of the day, 12 AM first (24 values): the clock, the peak hour and the persona.

  • projectsdefault "WRAPPED_PROJECTS"
    WrappedProject[]

    { id, name, tasks, lead }; the top five are ranked.

  • reactionsdefault "WRAPPED_REACTIONS"
    WrappedReaction[]

    { emoji, label, count } most used reactions.

  • automationsdefault "WRAPPED_AUTOMATIONS"
    WrappedAutomation[]

    { id, name, runs } top automations.

  • peopledefault "WRAPPED_PEOPLE"
    WrappedPerson[]

    { id, name, role, title, value, unit, note, src? }: the MVPs and their superlatives.

  • personalitydefault "WRAPPED_PERSONALITY"
    WrappedPersonality

    { name, tagline, description, rarity, traits: { label, score }[] } for the personality card.

  • longestDocdefault "WRAPPED_LONGEST_DOC"
    WrappedDoc

    { title, author, words } named in the words chapter.

  • accentColorsdefault "WRAPPED_ACCENTS"
    string[]

    One CSS color per chapter (shipped, rhythm, words, autopilot, projects, reactions, persona, MVPs); also lights the hero, the personality card and the poster. Defaults to the chart palette. mono ignores it.

  • shareUrldefault "https://acme.com/wrapped/northwind-2026"
    string

    The link the share buttons hand out.

  • onShare
    (method: "copy" | "download" | "native", url: string) => (void | Promise<unknown>)

    Copy link, Download image and Share; a returned promise keeps the button loading, a rejection shows an error. Without it the page copies the link, pretends the download (900 ms) and opens the system share sheet where there is one (else copies).

  • labelsdefault "DEFAULT_YEAR_IN_REVIEW_PAGE_LABELS"
    Partial<YearInReviewPageLabels>

    Every visible string; {placeholders} are filled from the data.

  • showAnnouncementdefault true
    boolean

    The strip above the header bar.

  • showNavdefault true
    boolean

    The chapter strip under the hero and the sticky dot rail (from 1280px).

  • showShippeddefault true
    boolean

    The tasks per month chapter.

  • showRhythmdefault true
    boolean

    The daily activity heatmap chapter.

  • showWordsdefault true
    boolean

    The words written chapter.

  • showAutomationsdefault true
    boolean

    The hours saved chapter.

  • showProjectsdefault true
    boolean

    The top projects chapter.

  • showReactionsdefault true
    boolean

    The reactions chapter.

  • showPersonadefault true
    boolean

    The hour of day clock with the early bird or night owl persona.

  • showPeopledefault true
    boolean

    The MVPs chapter.

  • showPersonalitydefault true
    boolean

    The personality card (and its story card).

  • showSharedefault true
    boolean

    The share section with the poster.

  • showCtadefault true
    boolean

    The closing call to action.

  • ctaVariantdefault "inverted"
    "inverted" | "soft" | "split"

    The closing band: a solid band, a gray band, or copy beside the buttons on a raised panel. Applies to the classic design.

  • tonedefault "neutral"
    "neutral" | "brand" | "success" | "warning" | "danger" | "info"

    The active dot of the chapter rail and the personality score bars.

  • ctaTonedefault "neutral"
    "neutral" | "brand" | "success" | "warning" | "danger" | "info"

    Play your story, Share, the header's Get started and the closing band; brand is the marketing orange.

  • headerdefault true
    boolean

    The marketing header; off inside a site or app layout.

  • footerdefault true
    boolean

    The marketing footer with its newsletter form.

  • headerProps
    Partial<MarketingHeaderProps>

    Passed to MarketingHeader.

  • footerProps
    Partial<MarketingFooterProps>

    Passed to MarketingFooter.

  • ctaProps
    Partial<CtaSectionProps>

    Overrides for the closing CtaSection (hrefs, labels, variant...).

  • onSubscribe
    (email: string) => (void | Promise<unknown>)

    The footer newsletter; a rejected promise shows an error.

  • animateIndefault true
    boolean

    Big numbers roll up and charts grow the first time they scroll into view; false keeps the page still (thumbnails). Reduced motion always does.

  • localedefault "en-US"
    string

    Intl locale for the numbers, months, days and hours.

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

    The router link for every link on the page (next/link in an app).

  • className
    string

    Classes for the root.

  • classNames
    Partial<Record<YearInReviewPageSlot, string>>

    Classes for header, hero, title, counter, art, chapters, nav, chapter, panel, people, personality, share, poster, story, cta and footer.

Parts

  • YEAR_IN_REVIEW_SAMPLE

    constant

    All the sample content in one object: stats, months, activity, hours, projects, reactions, automations, people, personality and longestDoc.

  • WRAPPED_STATS

    constant

    Northwind's totals: 12,480 tasks, 1,284 docs, 612,400 words, 48,920 automation runs, 1,860 hours saved.

  • WRAPPED_MONTHS

    constant

    January to October 2026, October still in progress.

  • WRAPPED_ACTIVITY

    constant

    284 days of seeded activity that add up to each month's total.

  • WRAPPED_END_DATE

    constant

    "2026-10-11", the last day of the sample.

  • WRAPPED_HOURS

    constant

    Tasks per hour of the day, peaking at 10 AM.

  • WRAPPED_PROJECTS

    constant

    The five busiest projects with their leads.

  • WRAPPED_REACTIONS

    constant

    Six reactions, 🚀 first.

  • WRAPPED_AUTOMATIONS

    constant

    The four automations that ran the most.

  • WRAPPED_PEOPLE

    constant

    Six MVPs with a superlative each.

  • WRAPPED_PERSONALITY

    constant

    The Steady Shippers, with four trait scores.

  • WRAPPED_LONGEST_DOC

    constant

    The longest doc of the year.

  • WRAPPED_ACCENTS

    constant

    The default chapter colors: the chart palette's series vars, ordered so neighbours differ.

  • DEFAULT_YEAR_IN_REVIEW_PAGE_LABELS

    constant

    The English strings.

  • YEAR_IN_REVIEW_PAGE_DESIGNS

    constant

    The design names, classic first: ["classic", "vivid", "mono"].

  • YearInReviewPageProps

    type

    Props of YearInReviewPage.

  • YearInReviewPageDesign

    type

    "classic" | "vivid" | "mono".

  • YearInReviewPageMode

    type

    "scroll" | "stories".

  • YearInReviewChapter

    type

    The chapter keys, in page order.

  • YearInReviewShareMethod

    type

    "copy" | "download" | "native".

  • YearInReviewPageLabels

    type

    The strings labels can override.

  • YearInReviewPageSlot

    type

    The classNames keys.

  • WrappedStats

    type

    The year's totals.

  • WrappedMonth

    type

    One month: tasks, words, partial.

  • WrappedDay

    type

    One day of activity.

  • WrappedProject

    type

    One ranked project.

  • WrappedReaction

    type

    One reaction and its count.

  • WrappedAutomation

    type

    One automation and its runs.

  • WrappedPerson

    type

    One MVP and the superlative.

  • WrappedPersonality

    type

    The personality card's content.

  • WrappedTrait

    type

    One personality score.

  • WrappedDoc

    type

    A doc named in the words chapter.

Examples

Open

Vivid design

design="vivid": a dark mesh hero, every chapter a saturated color band with light charts, a pill header and a wordmark footer.

Open

Mono design

design="mono": no color at all. Ink charts, hairline rules between chapters, giant type and a transparent header.

Open

Story mode

mode="stories": the full-screen player opens on load. Tap the sides, swipe or use the arrow keys; Escape returns to the page.

Open

Brand orange, custom colors

ctaTone and tone brand, with accentColors swapped for a warm palette and the closing band split.

Open

Embedded, short

Without the marketing header and footer, the people and reactions chapters hidden: a Wrapped inside your app.

Dependencies

@radix-ui/react-dialogd3-scaled3-shapelucide-reactmotionmarketing-sectionmarketing-headermarketing-footercta-sectionanimated-counteravatarbuttonheatmap-calendarchart-kitmotionnavigationtonesui-config

Files

  • components/templates/year-in-review-page.tsx
  • components/templates/year-in-review-page-data.ts

See also

Landing PageLaunch PageHeatmap calendarAnimated CounterBar chart
PreviousWaitlist PageNext AI Chat