Skip to content
Nathan Zhou

Meridian

My design system: 82 React components on one set of tokens, copied into apps by a CLI.

The component library this site is built with: 76 interface components and 6 chart pieces, all drawn from one file of colour, shadow and motion tokens, in light and dark. The default palette is warm — cream paper, a honey accent, espresso text. Instead of an npm package it ships a small command-line tool that copies a component, everything it depends on and the tokens into another project.

Status
Version 0.1.0, private and not published to npm. It has been quiet since late July 2026; this site is where it is used.
Every state considered, two themes from one token file, and any piece copied out with one command.

Worth knowing§

How it works§

  1. 01

    Components are copied into a project, not installed. `meridian add` follows a component's imports — sibling components, helpers, hooks — copies every file it reaches along with the tokens, and writes a README with the exact install line, so the copy looks like the showcase with no package to publish.

  2. 02

    It refuses to copy the whole library by accident: components must import each other by folder, and one that imports the master index gets a loud warning instead of quietly pulling in eighty-odd files. A flag rewrites the `@/` imports to relative paths for projects without that alias.

  3. 03

    Re-theming is one file. Every colour, shadow, radius, easing and animation is a CSS variable, light values in `:root` and dark in `.dark`; components may use token classes only, never a raw hex, and dark mode has its own black-based shadows so raised surfaces still read.

  4. 04

    The catalog is generated from the code and checked: COMPONENTS.md is built from each component's comments and exports, and the check fails when it is stale, so the docs people and coding agents read can't drift from the source.

  5. 05

    Reduced motion is handled once: under prefers-reduced-motion the stylesheet cuts every animation and transition to near zero, so the motion rules require every entrance to end visible, never stuck at opacity 0.

Built with§

Next project · 09 / 10

mcAI

Why DreamerV3 stalls at the wood tier in Craftax, and what pushes it further.

Read it