Genesys UI React components library
My Role
I co-created a React-based component library built with TypeScript and Styled Components to unify Devo's design system across products. My goal was to ensure design-code consistency and improve the developer experience.Overview
The component library was conceived as a bridge between design and development at Devo. Built with React, TypeScript, and Styled Components, it formed the foundation of our design system, enabling consistency and scalability across products.My role combined design leadership with front-end implementation, ensuring visual fidelity and usability were preserved from Figma to code.
The initiative wasn't just about components, it was about building a shared language between teams. By aligning design tokens, interaction patterns, and documentation, we created a unified toolkit that accelerated delivery and simplified collaboration.
The Challenge
Before the library existed, each team developed its own UI elements, resulting in fragmented user experiences and inconsistent visual quality. Design handoffs were time-consuming, and developers often had to rebuild components from scratch without a clear source of truth. Maintaining cohesion across multiple products became increasingly difficult.
Process & Collaboration
I worked directly on the codebase with frontend engineers, creating components, writing documentation, and setting up Storybook as the central hub for the design system. This hands-on approach bridged gaps, addressed challenges in real-time, and ensured the library met both design and technical standards.
In addition, there was close collaboration between designers and engineers. We mapped existing inconsistencies, defined shared goals, and translated the visual language into reusable patterns. Regular design-dev syncs, version reviews, and feedback loops validated every decision.
Design & Code Alignment
Colors, typography, spacing, sizing, transitions, shape, and elevation were defined as tokens to ensure consistency and flexibility. Tokens were integrated in both Figma and code, allowing designers and developers to work with the same visual language.
The design tokens library output was integrated with Figma using variables. This ensures the same theme in React components and Figma, maintaining 100% design-to-code fidelity.
Development Approach
The library was built in React with TypeScript using Styled Components for modular, themeable styling. Each component resides in its own folder (logic, styles, and stories combined) making the codebase predictable and maintainable.
I helped shape a monorepo architecture designed for scalability and collaboration. Each package has a clear purpose: core components, utilities, tables, uploaders; all aligned under a single design language.
This is the main structure of the project:
/ (root)
├─ .github/
│ └─ … (workflows, templates)
├─ .storybook/
│ └─ … (Storybook config)
├─ packages/
│ ├─ core/
│ ├─ color/
│ ├─ upload/
│ ├─ datetime/
│ ├─ code/
│ └─ table/
├─ stories/
│ └─ getting-started/
├─ test/
│ └─ … (several tests)
├─ CHANGELOG.md
├─ README.md
├─ package.json
├─ tsconfig.json
└─ … other configuration files (prettierrc, npmrc,…)
And this is the main structure of the core package:
/packages/core
├── /src
│ ├── /components
│ │ ├── /Button
│ │ │ ├── /components
│ │ │ │ ├── /ButtonAddon
│ │ │ │ ├── ButtonAddon.tsx
│ │ │ │ ├── StyledButtonAddon.ts
│ │ │ │ ├── declarations.ts
│ │ │ │ └── index.ts
│ │ │ │ ├── /ButtonAddon
│ │ │ │ ├── /ButtonBadge
│ │ │ │ ├── /ButtonContainer
│ │ │ │ ├── /ButtonDropdownIcon
│ │ │ │ ├── /ButtonIcon
│ │ │ │ ├── /ButtonLabel
│ │ │ │ ├── /ButtonLoader
│ │ │ │ ├── /ButtonSelection
│ │ │ │ └── index.ts
│ │ │ ├── Button.mdx
│ │ │ ├── Button.stories.tsx
│ │ │ ├── Button.test.tsx
│ │ │ ├── Button.tsx
│ │ │ ├── constants.ts
│ │ │ ├── declarations.ts
│ │ │ ├── helpers.tsx
│ │ │ └── index.ts
│ │ ├── /Input
│ │ ├── /Modal
│ │ ├── ...
│ │ └── index.ts
│ ├── /constants
│ ├── /declarations
│ ├── /helpers
│ ├── /hooks
│ ├── /styled
│ ├── /typeFunctions
│ └── /utils
│ ├── /stories
│ │ ├── /components
│ │ │ ├── /StoryWrapper
│ │ │ └── /styled
│ │ ├── /partials
│ │ └── /utils
├── package.json
├── tsconfig.json
├── README.md
└── … other configuration files (prettierrc, npmrc,…)
Anyway, this is just an excerpt of the project structure to give you an idea of how it's organized. This is the link to Github repository in case you want to check more details
Storybook served as both a documentation hub and a testing environment, allowing teams to preview props, states, and variants interactively. Components were versioned and published via npm, ensuring smooth updates and CI/CD integration across multiple applications.
Impact & Outcomes
Consistency and accessibility
The new system reduced handoff time and unified over 100 screens under a single visual language using the same UI components. In addition, all components meet AA accessibility standards.Ready-to-use
Beyond metrics, the system strengthened collaboration. Engineers benefit from reliable, flexible components ;while designers are confident in implementation. Specially, due to I was implementing and creating the documentation of the library. It also improved onboarding for new team members, who could now build with clarity and consistency from day one.Consistency and accessibility
Components and documentation facilitate long-term maintenance and easy scaling across applications.Learnings & Next Steps
Building the component library showed that the challenge extends beyond the code. Documenting everything: use cases, naming conventions, feedback loops ensures alignment and long-term success.
Next steps focus on improving consistency across components: prop naming, interfaces, hook usage, and internal structure. We also plan to phase out Styled Components in favor of a class-based approach powered by a custom PostCSS library.