Design systems

Jarvis Design System

As design lead on the Jarvis CMS, I built, documented and still maintain the design system behind it: hundreds of components and tokens that keep the product consistent and let developers build from the file without a walkthrough.

Role
Lead product designer
Client
El Confidencial
Year
2023 - present
Jarvis Design System

Context and Design Problem

The new CMS is used by more than 200 journalists and was designed and built at the same time. I needed a system that kept new features consistent and gave developers something precise enough to build from directly.

Technical requirements and constraints

The CMS integrated three frameworks: Plate.js (a Notion-style text editor using shadcn/Tailwind), existing MUI components, and shadcn as the primary design framework. Since converting MUI to shadcn wasn't feasible, I adapted MUI components to reflect shadcn's style, keeping the design cohesive without requiring a full rewrite.

Split media

Typography, Color, Border Radii, and Spacing, and Elevation Styles

Design System Architecture

Atoms

With styles set as tokens, I built the atomic layer first: buttons, dialogs, modals and the other building blocks for more complex components.

Split media

Molecules

From those atoms I built the molecules: components specific to the CMS that weren't native to MUI or shadcn. Each has its own Figma page with base components and usage examples.

Split media

Templates and Variables

I built templates for frequently used screens from the previously created molecules. Because they relied entirely on components and tokens, elements could be modified without breaking the structure.

User Flows

Since the CMS and design system were developed concurrently, I incorporated components into user flows to communicate requirements to developers and enable screen reuse across iterations.

Split media

Final Design System

Hundreds of components and variables across atoms, molecules and templates. Every Jarvis screen is assembled from this library.

Takeaways

The library is connected to Claude through Figma's MCP server. That lets us generate components from the same tokens, audit existing ones for untokenized values, and move toward production-ready code from the file. Handoff time hasn't changed yet; that's the next step.