Starting point
A monorepo with ninety-three components, a gallery and a plain React consumer. Everything was tested and nothing was published.
Decisions along the way
- Two packages. Contracts and state projection live in a framework-free core; React components sit on top.
- Trusted publishing with a bootstrap token only for the first release of each package.
- Alpha tag. Breaking changes are expected until 0.1.0.
What the first consumer broke
This site is the first consumer. Within a day it found three gaps:
Buttoncannot render as a link. Every call to action on the site is a hand-styled anchor.- Compound parts like
Card.Headerare undefined when imported into a Next.js Server Component, because static properties do not cross the client reference boundary. - No chip, tag or avatar primitive, so filters, labels and bylines are custom CSS.
Dogfood before docs
A gallery shows that components render. Only a consumer shows whether the API is complete, so build the consumer first.
What ships next
alpha.2 adds a link button, a toggle group for filters, a neutral tag and flat exports for every compound part. The gaps list lives in the site repository.
Key takeaways
- The first real consumer finds gaps no gallery does. Build the site with the library.
- Compound components break across the server and client boundary. Export flat parts too.
- Publish early with an alpha tag; the API feedback is worth the churn.
Discussion