Loop Design System
Building a scalable and accessible Design System with AI integration
Diseño y desarrollo desde cero de un Design System escalable, accesible (WCAG2.2.) y con arquitectura de variables complejas, optimizado para el prototipado rápido con AI (Claude)
Product
Actions
Role
Lead Product designer
Solo Product designer
Client
Link
Davant el repte de crear la nova plataforma SaaS i les noves aplicacions de l’empresa, vaig assumir el repte de conceptualitzar i desenvolupar un Design System complet des de zero, amb l’afegit que implica fer-ho com a únic dissenyador de l’empresa. Els principals esculls d’aquest prjecte eren els següents:
- Foundations i sistema de variables des de zero: Vaig dissenyar una estructura rigurosa i clara a partir de variables primitives i semàntiques per garantir una lògica de disseny fàcil d’utilitzar i flexible i que incorporés també la fàcil integració de Light i dark mode o altres modes necesaris.
- Accessibilitat WCAG 2.2 nativa: Era imprescindible des del primer dia que tot el sistema complís rigurosament amb les normatives d’accessibilitat, garantint una experiència inclusiva.
- Ecosistema multi-producte: Dissenyar una base unificada que funcionés tant a la nova plataforma SaaS com a les altres aplicacions del ecosistema.
- Integració a Claude AI: Vaig fer la integració del nou design system a Claude permetent accelerar la creació i programació de nous prototips.
Foundations & variables architecture
Un Design System està format principalment per 3 blocs: Design Foundations, Components Library i Icons Library. Les Design Foundations representen el bloc més important i, a la pràctica, es un arxiu on es defineix tot el sistema de variables, grids, breakpoints, etc. i també tota la documentació i regles d’ús del design system. Es imprescindible per la seva construcció i ús adequat tant per desenvolupadors com, per exemple, per fer la integració del Design System amb AI i obtenir resultats òptims.
Per aquest projecte vaig desenvolupar un sistema de variables que combinés la facilitat d’ús en la seva aplicació amb la flexibilitat de tenir unes variables que permetessin fer totes les combinacions necessaries pel disseny assegurant l’usabilitat, l’accessibilitat i l’aplicació de diferents de modes de color o spacing sense generar errors.
Pictograms, icons & border radius
Per una banda vaig crear una sèrie de variables exclusivament primitives per el tamany de “Pictograms”, “Icons” i “Border radius”. Per aquestes variables vaig defenir escales de valors genèrics que defineixen la mida (XL, L, M, S…) del tipus “icon-size-M” o “radius-XL”. Per una plataforma SaaS o productes de gestió, aquestes variables solen ser més que suficients i et permeten modificar sense problema el valor cru de cada variable (per exemple que “icon-size-M” passi de “12” a “16”).
Spacing, layouts y breakpoints
Spacing
En el anterior design system de l’empresa havíem utilitzat valors crus per definir l’spacing (4, 8, 12, 16…), així que vaig analitzar tots els valors utilitzats i per quins usos es feien servir. Això em va permetre crear un sistema de variables semàntiques de spacing per utilitzar en uns usos molt concrets i també afegir 3 modes de mida de pantalla per poder aplicar una mateixa variable amb valors diferents segons el mode. Alguns exemples de les variables són les de tipus “stack” que s’utilitzen per definir l’espai entre dos elements de diferent jerarquía com un titol i el body o les de tipus “gap” per separar dos elements del mateix nivell com dos blocs de text.
Layouts
Vaig definir també unes variables de spacing que em van permetre crear un únic estil de layout flexible anomenat “Content layout”. En comptes de crear un layout amb valors crus, vaig vincular els valors a variables de spacing que definien el número de columnes, el marge exterior i l’espai entre columnes segons el tamany del dispositiu (els 3 modes definits a les variables).
Breakpoints
Aquestes variables, tot i que sembla que a Figma no tinguin una implicació directe, són molt útils de cara al desenvolupament o al prototipat amb IA i van totalment relacionades amb els 3 modes de spacing que hem definit. Els 3 modes indiquen els diferents tamanys de pantalla amb els que treballem, en aquest cas: “Compact” (<600px), “Medium” (600-1023px) i “Expanded” (≥1024px)i els breakpoints permeten donar l’ordre que es faci el canvi d’un mode a un altre. Així doncs tenim els breakpoints “breakpoint-medium” (aplica a 600px) i “breakpoint-expanded” (aplica a 1024px)
Tipography
En un text la tipografia es defineix a través d’estils. Els estils principals són, segons el seu ús: Display, Headline, Title, body i label. Cada estil conté a la vegada subestils definits segons el tamany i el pes, per exemple: “Body-M-moderate” o “Body-M-subtle” on “M” defineix el tamany i “moderate” o “subtle” el pes.
Tot i que a priori no sería imprescindible definir variables per tipografia, tenir-les et permet tenir un sistema molt més escalable, modular i fàcil de modificar en el futur. Això s’aconsegueix definint variables semàntiques per tots els valors que defineixen un estil de tipografia (font family, font size, font weight…). Per exemple, per font size podem definir variables com “Body-M”(amb valor 14px) que aplicaria als estils anomenats també “Body-M”. Si en algun moment volguessim afegir modes (per exmeple, modes per diferents brandings que utilitzin un únic design system) el sistema ja estaría preparat.
Colors
Primitive variables
Per els colors en primer lloc vaig definir les variables primitives que després permeten alimentar les semàntiques. Hi ha design systems que anomenen a les primitives directament pel nom del color sense cap context (per exemple:Red, Blue, Yellow), jo, en canvi, vaig crear una part de les primitives que ja donen un primer context i defineixen la seva funció ( Brand, Neutral, Informative, success…) ja que les variables semàntiques d’aquest sistema, com veurem més endavant, fan referència a on s’aplica el color i no a la funció del color. Després vaig afegiir unes altres variables primitives que defineixen únicament color (Cyan, Violet, Pink…) ja que només s’utilitzen quan es necessiten colors extra per definir, per exemple, categories.
Finalment, en aquest bloc de primitives també vaig definir unes variables d’opacity que permeten d’onar opacitat de manera controlada a algunes variables semàntiques.
Semantic variables
Vaig aconseguir crear un sistema format per variables semàntiques que definissin on s’han de fer servir sense necessitat de definir una variable per cada un dels components. Hi ha sistemes que, per exemple, crean una variable específica pel fons d’un botó i això acaba comportant tenir un sistema amb moltíssimes variables i amb poca eacalabilitat ja que cap variable d’aquestes es reutilitzable en altres components. El meu sistema a més em va permetre poder afegir light i dark mode i que sempre funcionés perfectament amb una aplicació relativament senzilla de variables semàntiques. A part totes les variables tenen la seva propia documentació per assegugar-ne un correcte ús.
El sistema es basaba en definir el següents grups de variables que defineixen on s’han d’usar: Surface, border, text, icon, focus, interactive, state-layers, i effects. A Surface, per exemple, trobem variables per utilitzar a les surfaces de qualsevol component amb diferents colors, usos i intensitats, per exemple:
- “surface-primary” i “surface-primary-subtle”, mateix lloc (surface), mateix ús (primary) i diferent intensitat.
Per poder aplicar text sobre aquesta surface trobem les variables de text, per exemple:
- “Text-primary” i “text-primary-strong”, mateix lloc (text), mateix ús (primary) i diferent intensitat.
Aquests exemple de variables que hem posat es podrien combinar utilitzant “text-primary-strong” sobre “surface-primary-subtle” que garantitza un bon contrast. En canvi sobre “surface-primary”com que es un color intens, per matenir el contrast, hauríem d’usar “text-base-inverse” que correspon al color de text base invertit (en light mode sería text blanc).
Components library
Cada component té les seves particularitats però hi ha una sèrie de premises esencials que tot component hauria de complir:
- Variables perfectament aplicades: colors, spacing, radius, etc: Això garanteix, el correcte desenvolupament i aplicació de modes com el dark mode.
- Ser responsive: No ens podem trobar amb un component que de cop no s’adapti correctament, quedi el text tallat, etc.
- Contemplar variants de components per a diferents tipus de plataforma: Aquest design system s’havia d’usar tant en desktop com aplicacions de mobile. Per regla general vaig definir que a mobile s’usava text a 16px (Body-L) i components a 48px (Size: L) i a desktop com que es un SaaS amb info compacte seria text a 14px (Body-M) i components a 48px (Size: M). Això nomñes representa una norma general que obviament té les seves excepcions i casos concrets d’ús que s’havia de definir a la documentació de cada component i al document de “Read me” de les Foundations.
- Crear components escalables amb totes les funcions necesaries: Construir bé cada component amb les propietats, auto-layouts, etc adequats es imprescindible per no haver de fer modificacions més endavant.
- Garantir la normativa d’accessibilitat WCAG 2.2.: Cada component i, en general, tots els dissenys han de complir amb els estàndards d’accessibilitat: Contrast, mida, llegibilitat, comprensió, facilitat d’ús, etc. Tot això s’explica a la secció d’Accessibility compliance.
A continuació podem veure alguns exemples de components, com estan construïts i com funcionen que al final és la millor manera d’entende tots els comceptes que hem vist fins ara:
aiworkflow description
Components library
Cada component té les seves particularitats però hi ha una sèrie de premises esencials que tot component hauria de complir:
- Variables perfectament aplicades: colors, spacing, radius, etc: Això garanteix, el correcte desenvolupament i aplicació de modes com el dark mode.
- Ser responsive: No ens podem trobar amb un component que de cop no s’adapti correctament, quedi el text tallat, etc.
- Contemplar variants de components per a diferents tipus de plataforma: Aquest design system s’havia d’usar tant en desktop com aplicacions de mobile. Per regla general vaig definir que a mobile s’usava text a 16px (Body-L) i components a 48px (Size: L) i a desktop com que es un SaaS amb info compacte seria text a 14px (Body-M) i components a 48px (Size: M). Això nomñes representa una norma general que obviament té les seves excepcions i casos concrets d’ús que s’havia de definir a la documentació de cada component i al document de “Read me” de les Foundations.
- Crear components escalables amb totes les funcions necesaries: Construir bé cada component amb les propietats, auto-layouts, etc adequats es imprescindible per no haver de fer modificacions més endavant.
- Garantir la normativa d’accessibilitat WCAG 2.2.: Cada component i, en general, tots els dissenys han de complir amb els estàndards d’accessibilitat: Contrast, mida, llegibilitat, comprensió, facilitat d’ús, etc. Tot això s’explica a la secció d’Accessibility compliance.
A continuació podem veure alguns exemples de components, com estan construïts i com funcionen que al final és la millor manera d’entende tots els comceptes que hem vist fins ara:
Les Web Content Accessibility Guidelines (WCAG) 2.2 representen l’estàndard internacional de normatives i directrius d’accessibilitat. Publicades oficialment pel W3C (World Wide Web Consortium). La versió 2.2. amplia les anteriors (2.0 i 2.1) i posa especial focus en millorar l’accessibilitat per a usuaris amb discapacitats cognitives, de la parla i limitacions en dispositius mòbils.
Com que aquestes guidelines són molts extenses i poc pràctiques per fer-ne ús al dia a dia, vaig redactar una guia d’accessibilitat disponible en aquesta web i que es pot consultar accedint a aquest link i que representa un resum pràctic de les directrius d’accessibilitat de WCAG 2.2.
L’accessibilitat s’ha d’integrar com una part intrinseca del procés de disseny i desenvolupament i s’ha d’aplicar des de l’inici, quan comencem a crear el design system. Portat a la pràctica, alguns exemples de punts als que fan referència les normatives d’accessibilitat són els següents:
- Target size (àrea clicable) mínim de 24px
- Contrast mínim (AA) de XXX per textos, de XXX per altres elements…,
- Prioritzar accions senzilles com clics, evitant accions complexes com swipes o scroll laterals si no es imprescindible.
- Tots els elements han de permetre el focus i han de tenir un focus order, és a dir, poder navegar a través del teclat de manera intuitiva a través d’elements amb focus.
- Evitar l’aparició delements inesperats per l’usuari. Per exemple, modals que s’obren de manera inesperada tallant la interacció de l’usuari, pot ser un problema per usuaris amb problemes cognitius
- Prevenir errors en formularis: informar als usuaris de l’estat d’elements com un field, permetre la validació d’un formulari sense fer-ho automàticament, permetre desfer accions o avisar d’accions irreversibles.
- Tenir en compte que l’estat deshabilitat dels components no apareix en navegadors si no hi a una etiqueta específica.
VIDEO
Tenir un design system disenyat, construit i documentat amb rigor és imnprescindible per poder fer la integració amb IA i aconseguir resultats òptims. Jo vaig fer la integració del design system amb Claude i això va permetre que l’equip de produte pogués realitzar prototips de treball, que jo li pogués demanar a Claude que em realitzés dissenys a Figma seguint rigurosament el design system i que l’equip de desenvolupament pogués treballar amb la integració del codi amb el design system i Claude.