Sebastian Zelonka

UI Engineer

Pixel-perfect, performant, and accessible products on the web.

All thoughts

Kibble Design System

How I helped take Kibble, Vetsource's design system, from an empty repository to a component library used across product teams.

In November 2022 I joined Vetsource to lead the team building Kibble, the company’s design system. When I arrived there was no code yet. Just an initiative, a few early decisions and a lot of questions to answer.

That’s the part I enjoyed the most, to be honest. We had to decide almost everything: which stack to use, how design tokens would become real UI, how components would be documented, versioned and published so product teams could actually adopt them.

Working that closely with designers and engineers from different teams taught me a lot. Most of the good decisions we made came out of those conversations, not out of a document written up front.

The system in its own documentation

We made Storybook the home of the system from day one, so instead of recreated mockups, here are two live pieces of Kibble: the welcome docs and the button, straight from the real Storybook.

Kibble · Welcome Open (opens in new tab)
The live introduction to Kibble and its role as Vetsource’s global design system.
Kibble · Button Open (opens in new tab)
A live component preview from the system rather than a recreated mockup.

Some decisions we made along the way

  1. 01

    Technology and architecture

    We went with React and TypeScript for components, Vite for tooling and a Sass architecture that could also serve non-React products.

  2. 02

    Tokens into interface

    We drew a clear line between design tokens, component styles and public APIs, so visual decisions survived the jump to code.

  3. 03

    Documentation as product

    Storybook became the shared space for behavior, usage guidance, accessibility expectations and design–engineering collaboration.

  4. 04

    Repeatable delivery

    Packages, versioning and a changelog let product teams adopt improvements at their own pace. I also configured all the GitLab infrastructure for our release workflows and for publishing the different packages to the company’s internal registry.

A solid base by version 2.8

I stayed on the project until around the 2.8.0 release, in March 2024. By then Kibble had grown past its original primitives into a broader system: Steps, ToastProvider and reusable hooks had joined the library, component APIs and shared media-query utilities kept maturing, and accessibility and long-content behavior improved across components. The changelog made adoption and breaking changes visible to consumers, so product teams always knew what they were getting into with each update.

What I value the most is not a single component. It’s that the architecture, the docs and the delivery workflow were solid enough for other people to keep building on top of them after I left. In the end, I think that’s what a design system is all about.

Scope note: This post covers my contribution from before implementation began through approximately the 2.8.0 release. The live Storybook includes substantial later work by the Vetsource team.

Keep reading