Inicio/Zeus Design System

Zeus Design System

2022 → 2026Shared Library

Para Schneider Electric

Construimos Zeigo Activate desde cero. En vez de construir un producto, construimos un design system y dejamos que el producto saliera de ahí. Eso es Zeus: unos 45 component sets en Figma, 22 componentes documentados, 8 familias de tokens, mantenidos en Figma y en código al mismo tiempo. Cuando Zeigo HUB llegó dos años después, la mayoría de sus pantallas ya estaban diseñadas.

Lo único que heredamos fue una paleta. 118 valores de color en 9 grupos, nombrados por el único lugar donde se usaba cada uno: dark-gray-410 textbox normal state, dark-gray-510 textbox hover state. La Shared Library todavía la documenta como Original Colors, al lado de lo que la reemplazó.

Original Colors en la Shared Library. Un color por cada lugar, un nombre por cada color.

Un equipo chico, 2 a 3 diseñadores y 4 a 6 front-end engineers, y cada pantalla volviendo a decidir lo básico: qué gris, qué radio, qué espaciado. Dos o tres rondas de review por pantalla en cosas que debían haberse decidido una vez. El camino habitual es construir el producto primero y extraer el sistema después. Así es como llegás a 118 grises.


La decisión fue hacer de los tokens el contrato entre Figma y código, no de los componentes. Tokens semánticos de superficie y texto, background-page, layer-01 a layer-03, text-standard, text-subdued, text-inverse, más tokens de escala para espaciado, tipografía, radio y elevación. Nombrados una vez, publicados como variables de Figma y como CSS custom properties, consumidos por todos los componentes de los dos lados.

Reglas de uso de los tokens de capa: sobre qué va cada uno, dónde usarlo, dónde no.

Nombrar un sistema de capas para que sobreviva como CSS es un constraint de ingeniería. Prefijo más escala, reglas de orden como layer-02 siempre sobre layer-01. Un diseñador solo se lo pierde, y la paleta se queda en 118 valores nombrados a mano. La jerarquía en sí, la regla de evitar anidamiento profundo, el contraste accesible para pantallas densas de emisiones, eso viene de diseño. Un ingeniero solo entrega una paleta plana y un div con sombra.

La escala de espaciado, en la library y como CSS. Mismos nombres en Figma.

Tres productos tenían que salir sobre un solo set de componentes, así que la marca no podía vivir en los componentes. Vivió en tokens y en un solo componente de logo con una variante por producto: Zeigo, Power, Network, Activate, Hub. Eso es lo que hizo posible integrar después HUB y Network sin forkear.

Cinco productos, un componente, dos variantes cada uno.

Qué se rompió cuando Zeus pasó de Activate a HUB: el color de marca y el logo por producto, y un puñado de tamaños de card para tablas densas. Exactamente lo que se volvió el componente de logo y los tokens de capa.

Organisms: pago y paywall a la izquierda, cards y notificaciones a la derecha.
Emissions Comparison y Donut Chart, con y sin datos.

Antes de que un componente entrara a Zeus lo prototipaba en código, para exponer los estados que Figma no podía: hover, loading, vacío, error, contenido largo, formatos por locale. Site Card es el ejemplo. Figma tenía dos estados. El prototipo en código, alimentado con datos reales de suppliers, necesitaba combinaciones de created, selected y hover que cambiaban el layout. El set de Figma creció a siete estados a partir de lo que mostró el prototipo, no al revés.

Site Card, siete estados.

Los reviews con diseño pasaban en Storybook en vez de en Figma, así el review era sobre estados reales. Branches de Figma para cambios de diseño, branches de Git para cambios de código, merge en los dos. La Shared Library lleva un badge Complete o In progress por página, para que nadie consumiera un componente sin terminar por accidente.

La Shared Library: foundations, tokens y componentes, cada uno con su estado.
Vertical stepper y task list, dos de los organismos que solo tuvieron sentido cuando corrieron con datos reales.

118 →7 semanticTokens de color en uso diario
1 →3Productos sobre un set de componentes
0 →70%Pantallas de HUB sin componente nuevo
2 weeks →3–4 daysHandoff en Figma a PR mergeado, pantalla nueva
2–3 →1Rondas de design review por componente

Lo que no funcionó: 15 de los 22 componentes documentados siguen en In progress. La documentación quedó atrás del código cuando HUB empezó a tomar el tiempo del equipo. Si lo hiciera de nuevo documentaría al mismo ritmo que codeo. Lo que quedó: Zeus V.2, el set de tokens, la library, el Storybook. Tres productos siguen saliendo sobre eso.

Target Card y Tour.

“Working with X has been great. He is reliable and fast. The solutions he designs are creative and empathetic to the end-user experience!”

Stefanos BezanisStefanos Bezanis · Senior Product Manager, Zeigo (Schneider Electric)

Exelobaiza | Design Engineer

ENES
███████╗██╗  ██╗███████╗██╗      ██████╗ ██████╗  █████╗ ██╗███████╗ █████╗
██╔════╝╚██╗██╔╝██╔════╝██║     ██╔═══██╗██╔══██╗██╔══██╗██║╚══███╔╝██╔══██╗
█████╗   ╚███╔╝ █████╗  ██║     ██║   ██║██████╔╝███████║██║  ███╔╝ ███████║
██╔══╝   ██╔██╗ ██╔══╝  ██║     ██║   ██║██╔══██╗██╔══██║██║ ███╔╝  ██╔══██║
███████╗██╔╝ ██╗███████╗███████╗╚██████╔╝██████╔╝██║  ██║██║███████╗██║  ██║
╚══════╝╚═╝  ╚═╝╚══════╝╚══════╝ ╚═════╝ ╚═════╝ ╚═╝  ╚═╝╚═╝╚══════╝╚═╝  ╚═╝
# Zeus Design System ## Schneider Electric — 2022 → 2026 --- [Shared Library](https://zeigo-network-library.vercel.app/) Context: We built **Zeigo Activate from scratch**, and instead of building one product we built a design system and let the product fall out of it. The only inherited material was a legacy palette of **118 color values** named after the one place each was used. My role: I designed the Zeus components in **Figma**, wrote them in **React and TypeScript**, and documented them in the Shared Library: about 45 component sets, 22 documented components, 8 token families, maintained in Figma and code at the same time. Other designers and engineers built the products on top of it; the system itself, across all three layers, is mine. Impact: Three products, Activate, HUB and Network, ship on one component set. When HUB came, **~70% of its screens were assembled from Zeus** without designing or coding a new component, and a new screen went from Figma handoff to merged PR in **3 to 4 days instead of 2 weeks**. We built Zeigo Activate from scratch. Instead of building one product, we built a design system and let the product fall out of it. That is Zeus: about 45 component sets in Figma, 22 documented components, 8 token families, maintained in Figma and in code at the same time. When Zeigo HUB came two years later, most of its screens were already designed. ![](https://res.cloudinary.com/dcy607q9x/image/upload/portfolio/zeus/cover-zeus-v2.png) The only thing we inherited was a palette. **118 color values in 9 groups**, named after the one place each was used: dark-gray-410 textbox normal state, dark-gray-510 textbox hover state. The Shared Library still documents it as Original Colors, next to what replaced it. ![Original Colors in the Shared Library. A color for every place, a name for every color.](https://res.cloudinary.com/dcy607q9x/image/upload/portfolio/zeus/library-original-colors.png) A small team, 2 to 3 designers and 4 to 6 front-end engineers, and every screen re-deciding the basics: which gray, which radius, which spacing. Two or three review rounds per screen on things that should have been settled once. The usual path is build the product first, extract the system later. That path is how you get 118 grays. --- The decision was to make **tokens the contract between Figma and code, not components**. Semantic surface and text tokens, background-page, layer-01 to layer-03, text-standard, text-subdued, text-inverse, plus scaled tokens for space, type, radius and elevation. Named once, published as Figma variables and as CSS custom properties, consumed by every component on both sides. ![Usage rules for the layer tokens: what each sits on, where to use it, where not to.](https://res.cloudinary.com/dcy607q9x/image/upload/portfolio/zeus/library-usage-layers.png) Naming a layer system so it survives as CSS is an engineering constraint. Prefix plus scale, ordering rules like layer-02 always sits on layer-01. A designer alone misses it, and the palette stays at 118 hand-named values. The hierarchy itself, the avoid deep nesting rule, the accessible contrast for data-dense emissions screens, those come from design. An engineer alone ships a flat palette and a div with a shadow. ![The spacing scale, in the library and as CSS. Same names in Figma.](https://res.cloudinary.com/dcy607q9x/image/upload/portfolio/zeus/library-space-tokens.png) --- Three products had to ship on one component set, so brand could not live in components. It lived in tokens and in **one logo component** with a variant per product: Zeigo, Power, Network, Activate, Hub. That is what made the later integration into HUB and Network possible without forking. ![Five products, one component, two variants each.](https://res.cloudinary.com/dcy607q9x/image/upload/portfolio/zeus/organisms-logo-set-5-products.png) What broke when Zeus moved from Activate into HUB: the brand color and logo per product, and a handful of card sizes for data-dense tables. Exactly the things that became the logo component and the layer tokens. ![Organisms: payment and paywall on the left, cards and notifications on the right.](https://res.cloudinary.com/dcy607q9x/image/upload/portfolio/zeus/organisms-payments-paywall.png) ![Organisms: payment and paywall on the left, cards and notifications on the right.](https://res.cloudinary.com/dcy607q9x/image/upload/portfolio/zeus/organisms-cards.png) ![Emissions Comparison and Donut Chart, with and without data.](https://res.cloudinary.com/dcy607q9x/image/upload/portfolio/zeus/organisms-emissions-comparison.png) ![Emissions Comparison and Donut Chart, with and without data.](https://res.cloudinary.com/dcy607q9x/image/upload/portfolio/zeus/organisms-donut-chart.png) --- Before a component entered Zeus I prototyped it in code, to expose the states Figma could not: hover, loading, empty, error, long content, locale formats. **Site Card** is the example. Figma had two states. The code prototype, fed with real supplier data, needed created, selected and hover combinations that changed the layout. The Figma set grew to seven states from what the prototype showed, not the other way around. ![Site Card, seven states.](https://res.cloudinary.com/dcy607q9x/image/upload/portfolio/zeus/organisms-site-card-7-states.png) Designer reviews happened in **Storybook** rather than in Figma, so the review was on real states. Figma branches for design changes, Git branches for code changes, merged in both. The Shared Library carries a Complete or In progress badge per page, so nobody consumed an unfinished component by accident. ![The Shared Library: foundations, tokens and components, each with its status.](https://res.cloudinary.com/dcy607q9x/image/upload/portfolio/zeus/library-sidebar-badges.png) ![Vertical stepper and task list, two of the organisms that only made sense once they ran with real data.](https://res.cloudinary.com/dcy607q9x/image/upload/portfolio/zeus/organisms-vertical-stepper.png) ![Vertical stepper and task list, two of the organisms that only made sense once they ran with real data.](https://res.cloudinary.com/dcy607q9x/image/upload/portfolio/zeus/organisms-task-list-modal-blocked.png) --- - Color tokens in daily use: 118 → 7 semantic - Products on one component set: 1 → 3 - HUB screens built without a new component: 0 → 70% - Figma handoff to merged PR, new screen: 2 weeks → 3–4 days - Design review rounds per component: 2–3 → 1 What didn't work: 15 of the 22 documented components are still marked In progress. Documentation lagged behind code once HUB started pulling the team's time. If I did it again I would document at the same pace as I code. What stayed: Zeus V.2, the token set, the library, the Storybook. Three products still ship on it. ![Target Card and Tour.](https://res.cloudinary.com/dcy607q9x/image/upload/portfolio/zeus/organisms-target-card.png) ![Target Card and Tour.](https://res.cloudinary.com/dcy607q9x/image/upload/portfolio/zeus/organisms-tour.png) > "Working with X has been great. He is reliable and fast. The solutions he designs are creative and empathetic to the end-user experience!" — Stefanos Bezanis, Senior Product Manager, Zeigo (Schneider Electric) --- All case studies: [https://www.exelobaiza.dev/work](https://www.exelobaiza.dev/work) (markdown mirror: [work.md](https://www.exelobaiza.dev/work.md)) ## Contact - LinkedIn: https://www.linkedin.com/in/exequiel-lobaiza/ - GitHub: https://github.com/exelobaiza