Glossary Page
v1.0.0Added in 1.8.0
An A to Z glossary of teamwork terms: instant search, a sticky letter rail, topic filters and entries with drawn In Acme examples.
Press / anywhere to focus the big search. Matches drop down as you type, best name matches first with the typed letters marked; Arrow Up and Down move the highlight, Enter (or a click) opens that term and scrolls to it, and Escape clears the field. The list below filters with the same query and shows how many terms match, with Clear filters. The Popular chips and the Term of the day card jump straight to their entry. A sticky A to Z rail sits under the header: letters without terms are disabled, the letter under the rail lights up as you scroll, and a tap scrolls to that letter (on phones the rail scrolls sideways and keeps the active letter in view). Topic chips (Agile, Planning, Metrics...) filter the list and show live counts. In the split layout the list sits beside a sticky detail panel on desktop: click a term or walk the list with the arrow keys and the panel swaps to it, with the longer explanation, an In Acme drawing (a burndown, a Kanban column over its WIP limit, a RACI matrix, a Gantt with the critical path...), related terms, Previous and Next and Copy link; below 1024px the same entry opens in a bottom sheet (a side panel on tablets). In the list layout each entry expands in place. Related chips jump to their term, Copy link copies the URL with the term's #anchor and announces it, and opening the page with #sprint opens and scrolls to Sprint. Every target is 44px on touch; reduced motion 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 glossary-pagePro item: the CLI needs a Pro account. See plans
Usage
// app/(marketing)/glossary/page.tsx
"use client"
import Link from "next/link"
import { GlossaryPage } from "@/components/templates/glossary-page"
import { GLOSSARY_TERMS } from "@/components/templates/glossary-page-data"
export default function GlossaryRoute() {
return (
<GlossaryPage
linkComponent={Link}
layout="split"
terms={GLOSSARY_TERMS}
termOfTheDay="critical-path"
onCopyLink={(id) => console.log("copied", id)}
/>
)
}Props
designdefault"classic""classic" | "editorial" | "minimal"The whole page's look. classic: a split hero over a dot grid with a raised Term of the day card, raised panels and a gray resources band; editorial: a centered serif opening, a dictionary-style entry of the day between heavy rules, italic serif letters, flat panels, a centered header and footer; minimal: a transparent header, quiet medium type, small mono letters, outlined panels, no bands and a simple footer. headerProps and footerProps still win.
layoutdefault"split""split" | "list"split: the list beside a sticky detail panel from 1024px, a bottom sheet (side panel on tablets) below; list: one column of entries that expand in place.
termsdefault"GLOSSARY_TERMS"GlossaryTerm[]{ id, term, aka?, category, definition, body, example?, related?, keywords? } per entry. id is the #anchor; example is { visual?, text } where visual names one of the drawn illustrations; related holds other ids. Sorted A to Z with the locale.
categoriesdefault"GLOSSARY_CATEGORIES"GlossaryCategory[]{ value, label, description? } for the topic chips and tags.
populardefault"GLOSSARY_POPULAR"string[]Term ids for the Popular chips under the search.
termOfTheDaydefault"wip-limit"stringThe id featured in the hero card.
resourcesdefault"GLOSSARY_RESOURCES"GlossaryResource[]{ kind, title, description, action, href } for the Put these terms to work cards.
labelsdefault"DEFAULT_GLOSSARY_PAGE_LABELS"Partial<GlossaryPageLabels>Every visible string.
hrefsdefault"DEFAULT_GLOSSARY_PAGE_HREFS"Partial<GlossaryPageHrefs>{ signUp, contact }: the final call to action.
querystringThe search text, controlled. Pair it with onQueryChange.
defaultQuerydefault""stringThe starting search text while uncontrolled; it filters the list.
onQueryChange(query: string) => voidEvery change of the search text.
categorystringThe selected topic value or "all", controlled.
defaultCategorydefault"all"stringThe starting topic while uncontrolled.
onCategoryChange(category: string) => voidRuns when a topic chip is picked.
activeTermstring | nullThe open term's id, controlled (null: none).
defaultActiveTermdefault"null"string | nullThe starting open term while uncontrolled. In the split layout the panel shows the first term when none is open.
onActiveTermChange(id: string | null) => voidRuns when a term opens or closes.
onCopyLink(id: string, url: string) => voidRuns after a Copy link press with the term's id and the copied URL.
searchShortcutdefault"/"stringFocuses the search from anywhere; an empty string binds nothing.
updateddefault"2026-10-12"stringISO date (yyyy-mm-dd) of the last edit, shown in the hero eyebrow and formatted with the locale.
showTermOfTheDaydefaulttruebooleanThe Term of the day card with its drawing.
showPopulardefaulttruebooleanThe Popular chips under the search.
showLettersdefaulttruebooleanThe sticky A to Z rail.
showCategoriesdefaulttruebooleanThe topic chips with counts.
showExamplesdefaulttruebooleanThe drawn In Acme example in each entry.
showResourcesdefaulttruebooleanThe Put these terms to work cards.
showCtadefaulttruebooleanThe final call to action.
tonedefault"neutral""neutral" | "brand" | "success" | "warning" | "danger" | "info"The active letter, the selected topic, the row marker and the highlights inside the drawings.
ctaTonedefault"neutral""neutral" | "brand" | "success" | "warning" | "danger" | "info"Get started free and the header's Get started.
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 hero rises in once on mount; false keeps it still (thumbnails). Reduced motion always does.
localedefault"en-US"stringIntl locale for the A to Z sort, the counts and the Updated date.
linkComponentdefault"<a>"(props: LinkComponentProps) => ReactNodeThe router link for every page link (next/link in an app).
classNamestringClasses for the root.
classNamesPartial<Record<GlossaryPageSlot, string>>Classes for header, hero, title, search, results, popular, today, rail, categories, list, group, letter, term, detail, sheet, visual, related, empty, resources, cta and footer.
Parts
GlossaryIllustration
componentOne of the drawn In Acme mini UIs on its own (decorative, aria-hidden, painted with the --tone vars). Takes div props.
visualGlossaryVisualburndown, burnup, kanban, raci, gantt, velocity, okr, sprint, backlog, roadmap, standup, retro, doc, automation, estimate or flow.
GLOSSARY_PAGE_SAMPLE
constantAll the sample content in one object: terms, categories, popular, termOfTheDay and resources.
GLOSSARY_TERMS
constant44 teamwork, agile and productivity terms, from Agile to Workflow, each with a longer explanation and an In Acme example.
GLOSSARY_CATEGORIES
constantAgile, Planning, Metrics, Collaboration, Docs and Automation.
GLOSSARY_POPULAR
constantThe ids behind the Popular chips.
GLOSSARY_TERM_OF_THE_DAY
constantThe default featured id, "wip-limit".
GLOSSARY_RESOURCES
constantThe three Put these terms to work cards: templates, academy and guides.
GLOSSARY_VISUALS
constantThe names of the drawn illustrations.
DEFAULT_GLOSSARY_PAGE_LABELS
constantThe English strings.
DEFAULT_GLOSSARY_PAGE_HREFS
constantThe default link targets: /sign-up and /contact.
GLOSSARY_PAGE_DESIGNS
constantThe design names, classic first: ["classic", "editorial", "minimal"].
GlossaryPageProps
typeProps of GlossaryPage.
GlossaryPageDesign
type"classic" | "editorial" | "minimal".
GlossaryPageLayout
type"split" | "list".
GlossaryPageSlot
typeThe keys of classNames.
GlossaryTerm
typeOne entry: id, term, aka, category, definition, body, example, related and keywords.
GlossaryExample
typeAn entry's In Acme example: an optional drawing and a sentence.
GlossaryVisual
typeThe names of the drawn illustrations.
GlossaryCategory
typeA topic: value, label and an optional description.
GlossaryResource
typeOne Put these terms to work card.
GlossaryIllustrationProps
typeProps of GlossaryIllustration.
GlossaryPageLabels
typeThe strings labels can override.
GlossaryPageHrefs
typeThe link targets hrefs can override.
Examples
Editorial design
design="editorial": a centered serif opening, a dictionary-style term of the day between heavy rules and italic serif letters.
Minimal design
design="minimal": a transparent header, quiet type, mono letters, outlined panels and no gray bands.
Expandable list
layout="list": one column of entries that expand in place, with Sprint open from the start.
Brand orange
tone and ctaTone brand: orange active letter, topic chip, row marker, drawing highlights and call to action.
Filtered, inside a site layout
Without header and footer, the Metrics topic preselected and no term of the day.
Dependencies
Files
- components/templates/glossary-page.tsx
- components/templates/glossary-page-data.ts