Building a Component Library – Our Design System Journey

Note: This article was originally published on September 15, 2019. Some information may be outdated.
Creating a component library helped us unify the look and feel of an application while speeding up development and improving collaboration with designers.
Why Build a Component Library?
- Keep styles and behaviors consistent across the app
- Reuse logic and reduce code duplication
- Improve onboarding for new team members
- Share visual language with design team
Step 1: Identify Reusable Components
Start with the basics:
- Buttons
- Form inputs (text fields, checkboxes, radios)
- Modals and popups
- Notifications and alerts
- Layout containers (grids, wrappers)
List what you use often and generalize patterns that repeat.
Step 2: Set Up the Component Folder
We created a /components
folder and grouped things by type.
src/
├── components/
│ ├── Button/
│ │ ├── Button.tsx
│ │ ├── Button.stories.tsx
│ │ └── index.ts
│ ├── Modal/
│ └── ...
Each component has:
- The code
- A test (optional)
- A Storybook story (for visual testing)
Step 3: Use Storybook
Storybook helped us:
- Document how each component works
- Preview variants (sizes, colors, states)
- Share with designers and QA
npx sb init
npm run storybook
This setup made it easier to demo and test components in isolation.
Step 4: Add Tokens and Themes
We also added a theme.ts
file to centralize colors, spacing, font sizes, and other values.
export const theme = {
colors: {
primary: "#0070f3",
danger: "#e00",
gray: "#666"
},
spacing: [4, 8, 16, 32, 64]
};
Then passed the theme into styled components or context providers.
What We Gained
- Faster development with ready-to-use blocks
- Consistency across screens and developers
- Better handoff from Figma to code
- Easier testing and documentation
A component library is not just for large teams. Even solo projects benefit from consistent UI and code reuse. Once you start building with shared pieces, it’s hard to go back.
Originally published at letanure.dev
Subscribe to my newsletter
Read articles from Luiz Tanure directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
