Impact Page React template for Tailwind CSS v4
v1.0.0Added in 1.9.0
A sustainability and social impact report: headline numbers, emissions charts, a carbon calculator, giving, people data and commitments.
The hero sets the report title beside a drawn landscape whose front ridge is the real emissions-per-user curve, and the four headline numbers roll up once (final in the server markup). Download the full report shows a spinner, then a confirmation (onDownload, or a 900 ms pretend). A sticky chapter nav under the header follows the chapter in view, scrolls its active chip into view on phones, jumps to a chapter on tap and shows reading progress as a thin bar. Every chart has a title, a note, a legend where there are two or more series and a View data toggle that swaps the drawing for its table (the table is always there for screen readers). Hover, tap or Tab to an emissions column, a quarter on the intensity line, a donut source, a giving segment, a map hub or a volunteering month for its values. The carbon calculator takes a team size (slider, arrow keys) and a region (a select, a bottom sheet on phones) and updates Acme vs self-hosted emissions, the yearly saving and a flight equivalence live, with the methodology in a disclosure. The nonprofit map filters by region from its legend. Commitments show a status chip with an icon, a progress bar and the deadline; the archive lists past reports.
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 impact-pagePro item: the CLI needs a Pro account. See plans
Usage
Import ImpactPage from @/components/templates/impact-page.
// app/(marketing)/impact/page.tsx
"use client"
import Link from "next/link"
import { ImpactPage } from "@/components/templates/impact-page"
export default function ImpactRoute() {
return (
<ImpactPage
linkComponent={Link}
ctaTone="brand"
onDownload={(href) => {
window.open(href, "_blank")
}}
/>
)
}Props
designdefault"classic""classic" | "editorial" | "minimal"The whole page's look. classic: a drawn landscape beside the copy, raised chart cards and gradient bands; editorial: a printed annual report with giant start-aligned type over a landscape panorama, numbered chapters, heavy rules, flat charts, a centered header and footer; minimal: centered and quiet, a small leaf rosette, hairline cards, no bands, a transparent header and a simple footer. ctaProps, headerProps and footerProps still win.
yeardefault2026numberThe report year in the eyebrow, the announcement and the chart notes.
headlinesdefault"IMPACT_HEADLINES"ImpactHeadline[]{ id, value, decimals?, prefix?, suffix?, label }: the hero's numbers.
emissionsdefault"IMPACT_EMISSIONS"ImpactEmissionsYear[]{ year, scope1, scope2, scope3 } in tCO2e per fiscal year: the stacked columns and the climate heading's cut and growth.
targetPathdefault"IMPACT_TARGET_PATH"ImpactTargetPoint[]{ year, value }: the dashed reduction path; the last point is labeled net zero.
intensitydefault"IMPACT_INTENSITY"ImpactIntensityPoint[]{ period ("Q1 2022"), value } kg CO2e per active user: the line chart and the hero landscape's ridge.
energydefault"IMPACT_ENERGY"ImpactEnergySource[]{ id, name, share, note }: the electricity mix donut.
scope3default"IMPACT_SCOPE3"ImpactCategory[]{ id, name, value }: scope 3 by category in tCO2e.
nonprofitStatsdefault"IMPACT_NONPROFIT_STATS"ImpactNonprofitStats{ organizations, seats, countries, value }: the program's totals.
regionsdefault"IMPACT_REGIONS"ImpactRegion[]{ id, name, hubs: { id, city, lon, lat, organizations }[] }: the dot map and its region filter.
storiesdefault"IMPACT_STORIES"ImpactStory[]Featured nonprofits with a quote, a metric and a drawn mini app (ui.kind shifts, sites or plan).
eligibilitydefault"IMPACT_ELIGIBILITY"string[]The checklist on the application card.
pillarsdefault"IMPACT_PILLARS"ImpactPillar[]{ id: equity | product | time, title, value, description }: the 1% pledge tiles.
givingdefault"IMPACT_GIVING"ImpactCategory[]{ id, name, value } cash grants in USD: the proportional bar; the sum is the cash total in the copy.
headcountdefault184numberEmployees, in the people heading.
representationdefault"IMPACT_REPRESENTATION"ImpactRepresentation[]{ id, team, share, people }: women and non-binary people per team, against parity.
paydefault"IMPACT_PAY"ImpactPayGap[]{ id, group, adjusted, unadjusted } cents per dollar: the pay equity dot plot.
volunteeringdefault"IMPACT_VOLUNTEERING"{ month: string; hours: number }[]Paid volunteer hours per month (yyyy-mm).
volunteerSharedefault71numberPercent of employees who took at least one volunteer day.
peopleNotesdefault"IMPACT_PEOPLE_NOTES"string[]Numbered methodology footnotes under the people charts.
openSourcedefault"IMPACT_OPEN_SOURCE"ImpactOpenSourceStats{ repos, contributors, stars, mergedPrs, sponsored }.
reposdefault"IMPACT_REPOS"ImpactRepo[]{ id, name, description, language, stars, href }: the repository list.
contributionsdefault"IMPACT_CONTRIBUTIONS"ImpactContributionDay[]{ date, value } merged pull requests per day: the heatmap.
contributionsEnddefault"2026-09-30"stringThe heatmap's last day (yyyy-mm-dd).
commitmentsdefault"IMPACT_COMMITMENTS"ImpactCommitment[]{ id, title, due, status: done | on-track | at-risk, progress, detail }: the timeline, grouped by year.
shortfallsdefault"IMPACT_SHORTFALLS"ImpactShortfall[]{ id, title, body, action }: where the company fell short and what changes.
reportsdefault"IMPACT_REPORTS"ImpactReport[]{ id, year, title, size, format, href }: the archive below this year's report.
assuranceScopedefault"IMPACT_ASSURANCE_SCOPE"string[]What the auditor checked, as chips on the assurance card.
gridRegionsdefault"IMPACT_GRID_REGIONS"ImpactGridRegion[]{ value, label, intensity } kg CO2e per kWh: the calculator's regions.
calculatorFactorsdefault"IMPACT_CALCULATOR_FACTORS"ImpactCalculatorFactorsThe calculator's per-seat assumptions, also printed in its methodology.
defaultTeamSizedefault50numberThe calculator's team size on load (1 to 500).
defaultRegiondefault"us"stringThe calculator's region on load, a gridRegions value.
reportHrefdefault"/impact/acme-impact-report-2026.pdf"stringThe full report's address, handed to onDownload.
onDownload(href: string) => (void | Promise<unknown>)Runs with reportHref on Download the full report (hero, nav and archive). A returned promise keeps the buttons loading; a rejection shows an error. Without it: 900 ms, then a confirmation.
applyHrefdefault"/contact"stringWhere Apply now and the closing band's primary button go.
headerdefaulttruebooleanThe marketing header; off inside a site layout that has one.
footerdefaulttruebooleanThe marketing footer.
showAnnouncementdefaulttruebooleanThe strip above the header bar (labels.announcement).
showNavdefaulttruebooleanThe sticky chapter nav with the reading progress bar.
showClimatedefaulttruebooleanEmissions by scope, intensity per user, electricity mix and scope 3 categories.
showCalculatordefaulttruebooleanThe carbon calculator for your team.
showNonprofitsdefaulttruebooleanProgram stats, the dot map, nonprofit stories and the application card.
showGivingdefaulttruebooleanThe 1% pledge tiles and where the cash went.
showPeopledefaulttruebooleanRepresentation, pay equity, volunteering and the footnotes.
showOpenSourcedefaulttruebooleanOpen-source stats, the contributions heatmap and the repositories.
showCommitmentsdefaulttruebooleanThe 2030 commitments timeline.
showShortfallsdefaulttruebooleanWhere we fell short.
showAssurancedefaulttruebooleanThe independent assurance statement.
showArchivedefaulttruebooleanPast reports and data downloads.
showCtadefaulttruebooleanThe closing band.
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.
backgrounddefault"aurora""plain" | "soft" | "glow" | "aurora" | "grid" | "dots"The main background: plain is the bare page color; the others tint the page and add a glow, an aurora, a grid or dots over the first screen. A design picks its own unless you set one (classic aurora, editorial soft, minimal plain).
backgroundColordefault"oklch(0.62 0.14 275)"stringThe tint and glow color of the main background.
bandBackgrounddefault"gradient""muted" | "tinted" | "gradient" | "dots"The secondary background of the bands. Cards, fields and tiles inside a band are lifted one step above it, so they never share its color.
bandColordefault"oklch(0.62 0.14 275)"stringThe tint of tinted and gradient bands; defaults to backgroundColor.
tonedefault"neutral""neutral" | "brand" | "success" | "warning" | "danger" | "info"The active chapter chip, the reading progress bar, the calculator's slider and the eligibility checks (success when neutral).
ctaTonedefault"neutral""neutral" | "brand" | "success" | "warning" | "danger" | "info"Download the full report, Apply now, the header's Get started and the closing band.
headerPropsPartial<MarketingHeaderProps>Passed to MarketingHeader.
footerPropsPartial<MarketingFooterProps>Passed to MarketingFooter.
ctaPropsPartial<CtaSectionProps>Passed to the closing CtaSection, spread last.
onSubscribe(email: string) => (void | Promise<unknown>)The footer newsletter; a rejected promise shows an error. Without it: 900 ms, then success.
animateIndefaulttruebooleanThe headline numbers roll up and the charts grow the first time they scroll into view (never under reduced motion). Everything is final in the server markup.
localedefault"en-US"stringIntl locale for every number, percent, amount and month.
linkComponentdefault"<a>"(props: LinkComponentProps) => ReactNodeThe router link for every link on the page (next/link in an app).
labelsdefault"DEFAULT_IMPACT_PAGE_LABELS"Partial<ImpactPageLabels>Every visible string; {placeholders} are filled from the data.
classNamestringClasses for the root.
classNamesPartial<Record<ImpactPageSlot, string>>Classes for header, hero, art, headlines, nav, chapter, panel, calculator, map, story, commitments, shortfalls, assurance, archive, cta and footer.
Parts
IMPACT_PAGE_DESIGNS
constantThe design names: classic, editorial, minimal.
DEFAULT_IMPACT_PAGE_LABELS
constantEvery default string, in English.
IMPACT_SAMPLE
constantAll the sample content in one object.
IMPACT_YEAR
constant2026.
IMPACT_HEADLINES
constant62% lower per-user emissions, 100% renewable, 18,400 seats, $1.2M donated.
IMPACT_EMISSIONS
constantScopes 1, 2 and 3 for 2022 to 2026: 8,380 down to 4,520 tCO2e.
IMPACT_TARGET_PATH
constant50% below 2022 by 2027, 90% below by 2030.
IMPACT_INTENSITY
constantkg CO2e per active user, Q1 2022 to Q3 2026.
IMPACT_ENERGY
constantWind, solar, hydro and certificates.
IMPACT_SCOPE3
constant2026 scope 3 by category.
IMPACT_NONPROFIT_STATS
constant2,140 organizations, 18,400 seats, 46 countries.
IMPACT_REGIONS
constantSix regions with their city hubs.
IMPACT_STORIES
constantHarbor Food Bank, Open Rivers Trust and Kijani Schools Network.
IMPACT_ELIGIBILITY
constantWho can apply.
IMPACT_PILLARS
constant1% of equity, product and time.
IMPACT_GIVING
constantWhere the $1.2M went.
IMPACT_HEADCOUNT
constant184.
IMPACT_REPRESENTATION
constantWomen and non-binary people per team.
IMPACT_PAY
constantAdjusted and unadjusted pay ratios.
IMPACT_VOLUNTEERING
constantVolunteer hours per month, January to September 2026.
IMPACT_VOLUNTEER_SHARE
constant71.
IMPACT_PEOPLE_NOTES
constantThe people footnotes.
IMPACT_OPEN_SOURCE
constantOpen-source totals.
IMPACT_REPOS
constantFour public repositories.
IMPACT_CONTRIBUTIONS
constant26 weeks of merged pull requests per day, from a fixed seed.
IMPACT_CONTRIBUTIONS_END
constant2026-09-30.
IMPACT_COMMITMENTS
constantSeven goals from 2025 to 2030.
IMPACT_SHORTFALLS
constantTravel, AI compute and engineering representation.
IMPACT_REPORTS
constantThe archive: 2023 to 2025 reports and the 2026 data file.
IMPACT_ASSURANCE_SCOPE
constantThe assurance card's chips.
IMPACT_GRID_REGIONS
constantSix grids with their carbon intensity.
IMPACT_CALCULATOR_FACTORS
constantThe calculator's assumptions.
IMPACT_LAND
constantRough continent outlines in lon / lat for the dot map.
ImpactPageDesign
typeclassic | editorial | minimal.
ImpactChapter
typeThe nav's chapters.
ImpactPageSlot
typeThe classNames keys.
ImpactPageLabels
typeThe labels object.
ImpactHeadline
typeOne hero number.
ImpactEmissionsYear
typeOne year of emissions by scope.
ImpactTargetPoint
typeOne point of the reduction path.
ImpactIntensityPoint
typeOne quarter of per-user emissions.
ImpactEnergySource
typeOne electricity source.
ImpactCategory
typeA named amount (scope 3 categories, grants).
ImpactNonprofitStats
typeThe program totals.
ImpactRegion
typeA region and its hubs.
ImpactHub
typeOne city hub on the map.
ImpactStory
typeOne featured nonprofit.
ImpactStoryUi
typeThe drawn mini app of a story.
ImpactPillar
typeOne pledge pillar.
ImpactRepresentation
typeOne team's representation.
ImpactPayGap
typeOne pay comparison.
ImpactOpenSourceStats
typeOpen-source totals.
ImpactRepo
typeOne repository.
ImpactContributionDay
typeOne day of merged pull requests.
ImpactCommitment
typeOne commitment.
ImpactCommitmentStatus
typedone | on-track | at-risk.
ImpactShortfall
typeOne shortfall.
ImpactReport
typeOne archived report.
ImpactGridRegion
typeA calculator region.
ImpactCalculatorFactors
typeThe calculator's assumptions.
ImpactRing
typeA lon / lat outline.
Examples
Editorial design
design="editorial": a printed annual report. Giant start-aligned type over a landscape panorama, numbered chapters, heavy rules and flat charts.
Minimal design
design="minimal": centered and quiet. A small leaf rosette, hairline cards, no gray bands, a transparent header and a simple footer.
Brand orange, split closing band
ctaTone="brand" on the download and apply buttons, tone="brand" on the chapter nav and slider, ctaVariant="split".
Climate only, embedded
Without the marketing header and footer, only the climate chapter and the calculator: a sustainability page inside your docs site.
Dependencies
Files
- components/templates/impact-page.tsx
- components/templates/impact-page-data.ts