
“That is how design systems die: not abolished, just bypassed.”
One design system, thirty brands, and an app that could no longer be installed
A hundred components carrying more than thirty white labels — and three years later, the same client asked us back to rescue their Android app.
The client sells software that turns a photograph of a floor plan into a cost estimate and a phased work plan — and sells it under other companies' brands.
We built their central design system in two months, with one engineer. Three years later they brought us back for something entirely different: their Android app had stopped being installable on current devices.
This is the only client in our work who returned — and on a different discipline. That says more than any component.
2022 · The problem
2025 · The constraint
What we did
The design system, 2022, one engineer
Design tokens exported from Figma into JSON and generated into SCSS, with about a hundred components built on top, organized by size, type and kind. Versioned, distributed as a package, with its own documentation.
~100 components in 2 monthsNo component knows its own color
Only a token name. A new client is a new set of values, not new code. That is the whole reason thirty labels are maintainable.
A new brand, no new codeFramework-agnostic on purpose
Two different products consume the library; tying it to a framework would mean every consumer outside that framework needs its own implementation of the same design, which is precisely the problem a design system exists to solve.
Two products, one libraryAt a hundred components, taxonomy is not tidiness
Without consistent organization a library that size becomes a search through filenames — a developer does not find what they need in thirty seconds, concludes it does not exist, and writes their own CSS. That is how design systems die: not abolished, just bypassed.
Thirty seconds to a componentThe Android rescue, 2025, a team of three
We brought the app back so it runs on both current and older devices. Camera permission compliance after a store policy change, dependency upgrades for document viewing, and work moved off the main thread.
New and old devices
Tokens exported from Figma into JSON and generated into SCSS. A component knows a token name, never a value — so a new brand is a new set of values, not new code. Without that, a hundred components across thirty labels is three thousand variants nobody maintains.
The result
- ~100 components carrying 30+ white labels, built by one engineer in two months
- Versioned package with documentation, consumed by two products
- An app that had become uninstallable, returned to both new and old devices
- The same client, back after three years, on an unrelated discipline
What we’d do differently
The documentation was custom rather than a standard tool, which made it one more thing to maintain and one more thing a new developer had to learn. For a library with thirty consuming brands, we would take the boring standard option.
- JavaScript
- CSS
- SCSS
- design tokens
- Figma
- npm
- Android