Document as I build.
I wrote documentation afterward. Next time, usage guidance belongs beside the component from the start.
Onahn Michelle / Design system
The foundation behind Michelle: shared tokens, reusable components, and two themes. Built by one designer, for a team building a product.
See the product story
With one designer and a growing product, every screen couldn’t start from scratch.
Keep screens and themes consistent while giving engineering clear, reusable decisions.
Separate raw values from their purpose. Build components on that contract before composing the screens.
Values → meaning → components
Explore the actual library, from the color ramps to the components.
Primitives
Color ramps and an alpha scale define the available values. They don’t decide how a button or message should look.
Beyond the default
Default, hover, focus, filled, disabled, error, success, and read-only. The input component accounts for each state through the token layer.
A beautiful default is a start. The error state still has to do its job.

Semantic names stay the same while their values change by theme. Components inherit the right value for their context.
The dashboard shows that contract in use, across surfaces, text, and cards.

What I learned
The system gave Michelle a common foundation. The next improvement is making that foundation easier for someone else to understand and maintain.
See it in the productI wrote documentation afterward. Next time, usage guidance belongs beside the component from the start.
A shared vocabulary deserves a second set of eyes before handoff.
Turn one-off patterns into compositions where possible. Add components when the product needs them, and prune those that no longer earn their place.