All pages

Introduction

Curation is the design system behind the MyList web platform. MyList is a product about taste — people curate lists of what they love — and Curation is the same act applied to the interface: a small set of chosen values, kept deliberately, with the reasons written down.

Principles

One ink. Surfaces, hairlines and hover plates are one base colour plus an opacity modifier — bg-ink/[0.03], border-ink/10 — so they invert cleanly between themes. Text is the exception: alpha does not survive the flip where legibility is the point, so text names a rung of a ladder instead. This split is the system's load-bearing idea; Colors walks through it.

Ported, not invented. Nearly every value here is the shipping legacy app's, carried over by frequency and tuned only where a light ground demanded it. The radius scale is legacy's vocabulary; the overlay motion is legacy's modal transitions; the black brand is the mobile app's.

Both themes from one definition. Light and dark are two palettes behind the same token names. Components never branch on theme; they spend tokens, and the palette answers. The theme toggle in this header is there so every specimen on these pages can be checked against both.

Reasons live with the values. The tokens are declared once, in app/globals.css, each with the reasoning beside it. These pages summarise that file and the components built on it; when they disagree, the code is right.

How it ships

Curation is not a package. It is Tailwind 4 theme tokens declared in app/globals.css and consumed as utilities — text-ink-tertiary, bg-canvas-raised, rounded-lg, animate-dialog-in — plus the components that spend them: app-specific primitives in components/base, and a thin shadcn/ui layer in components/ui whose semantic tokens are mapped onto MyList's palette so an unmodified shadcn component already belongs.

import { Button } from "@/components/ui/button";        // shadcn layer
import { BaseButton } from "@/components/base/base-button"; // ported legacy primitives
import { cn } from "@/lib/utils";                           // clsx + tailwind-merge

What these pages list

Only what ships. Every component documented here is a file with call sites in the production web app; every token is one the app spends today. Nothing on these pages is aspirational, and a component that leaves the codebase leaves the docs. The pages themselves are files too — content/design/*.mdx, indexed by their frontmatter the way the help centre's articles are — so adding a page is adding a file.