Manifesto Page
v1.0.0Added in 1.8.0
A company manifesto as a typeset long read: a full-screen opening, eight numbered principles with drawn art, signatures and a hiring P.S.
The opening fills the first screen: the title rises in once and a hand-drawn underline draws under its last words, then Begin reading glides to the essay. A thin bar at the top of the window tracks the whole page. On desktop a sticky rail lists the principles, marks the one in the middle of the screen and fills a progress line; on tablets and phones a floating Principle 3 of 8 pill with a progress ring appears inside the principles and opens a bottom sheet with the list (Escape or a swipe closes it, a pick scrolls there after it closes). Every index link scrolls smoothly, updates the URL hash and moves focus to the principle's heading. Each principle has a Copy link button that copies the page URL with its #anchor, shows Copied for two seconds and announces it. Each chapter carries its own drawn element: a before and after of a noisy and a calm Monday, a margin note, a struck-through cut list, a search palette under its 100 ms budget, a 93% dot grid, a practice list, a display-size pull quote and a weekly loop. Sign the manifesto spins briefly, adds you to the faces and the count, and toggles back (aria-pressed). The founders' signatures, a hiring P.S. with links to careers and the team, and the footer close the page. Reduced motion keeps everything still and jumps instead of gliding.
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 manifesto-pagePro item: the CLI needs a Pro account. See plans
Usage
// app/(marketing)/manifesto/page.tsx
"use client"
import Link from "next/link"
import { ManifestoPage } from "@/components/templates/manifesto-page"
export default function ManifestoRoute() {
return (
<ManifestoPage
linkComponent={Link}
design="editorial"
typeface="serif"
signatureCount={2481}
onSign={async (signed) => {
const response = await fetch("/api/manifesto/sign", { method: signed ? "POST" : "DELETE" })
if (!response.ok) throw new Error("Could not save your signature")
}}
/>
)
}Props
designdefault"classic""classic" | "editorial" | "bold" | "minimal"The whole page's look. classic: huge sans type, outlined numerals, raised art panels, a sticky rail; editorial: a centered serif opening with an italic emphasis, serif headings and numerals, heavy rules between principles, flat art, a centered header and footer; bold: an inverted poster opening, giant solid numerals, thick rules, tiles, an inverted quote and sign panel, a pill header and a wordmark footer; minimal: a transparent header, quiet medium type, small mono numbers, no rail (the pill indexes at every width), outlined art and a simple footer. headerProps and footerProps still win.
typefacedefault"sans""sans" | "serif"The reading text: Inter, or a system serif (New York on Apple devices, Iowan, Palatino or Georgia elsewhere; no font files).
principlesdefault"MANIFESTO_PRINCIPLES"ManifestoPrinciple[]{ id, title, summary, paragraphs, art?, artAfter?, caption? } per chapter. id is the #anchor; art is one of quote, note, stat, list, cuts, compare, moment, cadence or { kind: "custom", node }, placed after artAfter paragraphs (default 2).
authorsdefault"MANIFESTO_AUTHORS"ManifestoAuthor[]{ name, role, avatar?, signature? } for the byline and the closing signatures; signature is a list of SVG paths in a 240 x 80 box.
signersdefault"MANIFESTO_SIGNERS"string[]Names behind the faces next to the signature count.
introdefault"MANIFESTO_INTRO"string[]The paragraphs before the first principle; the first one carries the drop cap.
closingdefault"MANIFESTO_CLOSING"string[]The paragraphs above the signatures.
publisheddefault"2026-10-08"stringISO date (yyyy-mm-dd) in the byline, formatted with the locale.
readingTimedefault9numberMinutes, for the byline, the rail and the sheet.
signatureCountdefault2481numberHow many people signed before this visitor.
labelsdefault"DEFAULT_MANIFESTO_PAGE_LABELS"Partial<ManifestoPageLabels>Every visible string; title plus titleEmphasis make the opening line.
hrefsdefault"DEFAULT_MANIFESTO_PAGE_HREFS"Partial<ManifestoPageHrefs>{ careers, about }: the P.S. buttons.
showIndexdefaulttruebooleanThe sticky rail on desktop, the inline list after the intro, and the pill and sheet on smaller screens.
showProgressdefaulttruebooleanThe thin reading progress bar at the top of the window.
showIntrodefaulttruebooleanThe opening paragraphs before the first principle.
showSignaturesdefaulttruebooleanThe closing note with the founders' drawn signatures.
showSigndefaulttruebooleanThe Sign the manifesto panel with the faces and the count.
showCareersdefaulttruebooleanThe hiring P.S. with links to careers and the team.
dropCapdefaulttruebooleanA large initial on the essay's first paragraph.
tonedefault"neutral""neutral" | "brand" | "success" | "warning" | "danger" | "info"The drawn underline, the progress bar and ring, the rail marker, the margin rule, the cut strokes and the highlighted dots.
ctaTonedefault"neutral""neutral" | "brand" | "success" | "warning" | "danger" | "info"Sign the manifesto, See open roles and the header's Get started.
defaultSigneddefaultfalsebooleanStarts with the visitor already signed.
onSign(signed: boolean) => (void | Promise<unknown>)Runs when the visitor signs or takes it back; a promise keeps the button loading and a rejection keeps the old state. Without it: 700 ms, then the count updates.
onCopyLink(id: string, url: string) => voidRuns after a Copy link press with the principle's id and the copied URL.
headerdefaulttruebooleanThe shared marketing header.
footerdefaulttruebooleanThe shared marketing footer.
headerPropsPartial<MarketingHeaderProps>Overrides for the header, spread last.
footerPropsPartial<MarketingFooterProps>Overrides for the footer, spread last.
animateIndefaulttruebooleanThe opening rises in and the underline draws once on mount; false keeps it still (thumbnails). Reduced motion always does.
localedefault"en-US"stringIntl locale for the byline date and the signature count.
linkComponentdefault"<a>"(props: LinkComponentProps) => ReactNodeThe router link for every page link (next/link in an app).
classNamestringClasses for the root.
classNamesPartial<Record<ManifestoPageSlot, string>>Classes for header, progress, hero, title, byline, index, pill, sheet, intro, principle, numeral, heading, body, art, closing, signatures, sign, careers and footer.
Parts
MANIFESTO_PAGE_SAMPLE
constantAll the sample content in one object: principles, authors, signers, intro and closing.
MANIFESTO_PRINCIPLES
constantEight principles, from Calm is a feature to Ship, then listen, each with its own drawn element.
MANIFESTO_AUTHORS
constantEmma Carter and Liam Brooks, the co-founders, with drawn signatures.
MANIFESTO_SIGNERS
constantSix names for the faces next to the signature count.
MANIFESTO_INTRO
constantThe two opening paragraphs.
MANIFESTO_CLOSING
constantThe two closing paragraphs above the signatures.
DEFAULT_MANIFESTO_PAGE_LABELS
constantThe English strings.
DEFAULT_MANIFESTO_PAGE_HREFS
constantThe default link targets: /careers and /about.
MANIFESTO_PAGE_DESIGNS
constantThe design names, classic first: ["classic", "editorial", "bold", "minimal"].
ManifestoPageProps
typeProps of ManifestoPage.
ManifestoPageDesign
type"classic" | "editorial" | "bold" | "minimal".
ManifestoPageTypeface
type"sans" | "serif".
ManifestoPageSlot
typeThe keys of classNames.
ManifestoPrinciple
typeOne chapter: id, title, summary, paragraphs and its art.
ManifestoArt
typeThe drawn element of a chapter, a union on kind.
ManifestoAuthor
typeA byline author with an optional drawn signature.
ManifestoNotification
typeOne notification row of the compare art.
ManifestoPageLabels
typeThe strings labels can override.
ManifestoPageHrefs
typeThe link targets hrefs can override.
Examples
Editorial design
design="editorial" with a serif reading face: a centered serif opening, italic numerals, heavy rules and flat art.
Bold design
design="bold": an inverted poster opening, giant solid numerals, tiles and an inverted pull quote and sign panel.
Minimal design
design="minimal": quiet type, small mono numbers, no rail; the Principle 3 of 8 pill indexes the essay at every width.
Brand orange
tone and ctaTone brand: an orange underline, progress, rail marker and cut strokes, with orange Sign and careers buttons.
Inside a site layout
Without header and footer, already signed, no drop cap and no hiring P.S., for a page that sits in an existing layout.
Dependencies
Files
- components/templates/manifesto-page.tsx
- components/templates/manifesto-page-data.ts