development · component gallery

The blink look, on top of shadcn.

Shared shadcn primitives re-themed with the blink design system — Crimson Text for display, Noto Sans for body, green accents, coral destructive.

Buttons

Form controls

Typography

The main display heading

Section heading with rule

A sub-section heading

A tertiary heading in sans

Lead paragraph — a slightly larger muted introduction that sets context for the content that follows.

Body paragraph in Noto Sans. Inline code blocks use the system monospace stack, sitting on a subtle tinted background.

“The hard parts of the web are rarely the framework — they’re the data, the boundaries, and the ambiguity.”
  • Bullet lists use blink’s editorial serif through the headings above.
  • The palette holds steady across light and dark mode.
  • All text sizes land on a multiple-of-four baseline.
Large inline text, for labels.
Small inline text, for captions.

Muted copy — secondary information.

Badges

DefaultSecondaryOutlineShippedDraftFailing

Avatars

NMNMAL
NM
ABC
+12

Alerts

Table

Most-read articles this quarter.
TitleStatusPublishedReads
Thinking in React, carefullyLiveApr 19, 202642,193
The trouble with hooksLiveApr 03, 202628,540
Monorepos, in practiceDraft
CSS-in-JS isn't deadUnpublished

Toggle & Tooltip

Tabs

Segmented control. The active tab gets a subtle surface and stronger text.

Underlined variant — cleaner inside forms and settings pages.

Select

Pagination

Drawer

Dropdown menu

Dialog

Cards

Thinking in React, carefully
Published on April 19, 2026 · 12 min read

A long-form breakdown of component composition patterns, with worked examples you can pull straight into your own codebase.

Join the newsletter
One essay a week on the hard parts of modern web engineering.
New

No spam, no sponsorships, unsubscribe in one click.

Compact card
Denser padding for list rows.

Use size="sm" when you have lots of these stacked.

Destructive action
Delete is irreversible.

Removes this workspace and everything in it. You will lose all drafts.