Skip to content
Lantern

Patterns

Patterns

Compositions the product reaches for again and again. A component says what a thing is; a pattern says how several of them solve a recurring problem the same way every time.

Nothing here is documented yet — on purpose

A pattern is a composition, so it cannot be written before the primitives it composes exist. What follows is the shortlist the component audit identified, with what each is made of and what it is waiting on. That is useful now for scoping, and it becomes each page's outline later.

The shortlist

Six compositions that already repeat across the product, ordered by how often they appear.

Dual-layout table

Drafting

A desktop table and a stacked mobile list rendered from the same data, switched with max-md:hidden / md:hidden rather than a JavaScript branch.

Made of
TableBadgeDropdownMenuPaginationCheckbox
Seen in
SettingsBilling, SettingsPayouts, SettingsDiscounts, SettingsRoles
Blocked on
Table, DropdownMenu and Pagination.

Type to confirm

Drafting

The destructive gate: the confirm action stays disabled until the exact resource name has been typed.

Made of
AlertDialogInputLabelButton
Seen in
SettingsManage (delete space), GHLDeleteKeyModal
Blocked on
AlertDialog and Input.

Settings screen

Drafting

The h-14 surface header card, a section stack, and a save bar that only appears once the form is dirty. Repeated across four or more files today with no shared primitive.

Made of
CardSeparatorButtonSwitchInput
Seen in
Every screen under settings/ — 34 components
Blocked on
Card and the settings area port. The header-card pattern should be lifted out first.

Connect an integration

Drafting

Not-connected → connect modal → connected, with an account picker and a group of event switches. Five platform variants that differ only in title, copy and logo.

Made of
DialogSelectSwitchDropdownMenuAccordion
Seen in
Meta, Google, GA4, LinkedIn and TikTok analytics settings
Blocked on
Dialog, Select and Switch. The audit recommends collapsing the five near-identical implementations into one component with a brand prop.

Empty state

Drafting

What a surface says before it has any data — an illustration, one line of explanation and the single action that resolves it.

Made of
ButtonCard
Seen in
empty-states/ — five components, all portable as-is
Blocked on
Card. This is the cheapest pattern to land first.

Media surface

Drafting

Cover imagery with frosted labels over it, opening into a full-screen lightbox. The one place the system allows a backdrop blur.

Made of
MediaPillMediaLightboxAspectRatioCarousel
Seen in
ProductImageGallery, ProductCard, post attachments
Blocked on
MediaPill and MediaLightbox.