MCDS · MiCapi

Portafolio · Diseño de producto

Un sistema, no una librería de pantallas.

MCDS es el design system de MiCapi, una app financiera mobile-only. Cada decisión visual vive tokenizada en código, cada token tiene un porqué documentado, y cada pantalla se blindá con tests. Este sitio está maquetado con los mismos tokens que muestra.

Mobile-only · 360 dp 2 modos calibrados a mano 1 solo color de acción 48 componentes 95 goldens · light + dark

El sistema

De el token a la pantalla, en cuatro capas

Un token es la unidad más pequeña de diseño con nombre: un color, una medida, una duración. Nada se escribe «a ojo» — todo valor visual de la app sale de un archivo con nombre, uso y porqué. Sobre esos ladrillos se sube el resto.

01 · Tokens

theme/ — el vocabulario

Color, tipografía, espaciado, radios, elevación, movimiento e íconos. Diez archivos que nombran cada valor: primary-500, space-4, radius-lg, motion-modal. Regla dura: ningún widget escribe un color o una medida literal — si no está acá, no existe.

02 · Foundation

foundation/ — la física

Lo que se mueve y brilla: transiciones de página, shimmer, stagger, la geometría del isotipo. Piezas sin pantalla que los componentes usan para sentirse de la misma familia.

03 · Components

components/ — las piezas

48 widgets con variantes cerradas: botones, campos, sheets, skeletons, segmented, alerts. Cada uno documenta sus decisiones en el propio código, con fecha.

04 · Features

features/ — el producto

15 dominios (onboarding, KYC, comprar, vender, swap, retirar, historial…) que solo consumen las capas de abajo. Una pantalla nueva hereda el sistema entero sin copiar nada.

Tokens de color

Un verde petróleo, once neutrales, cero atajos

Los primitivos son la paleta cruda de marca. Los semánticos son roles con trabajo (fondo, texto, acción, estado) que cambian entre modos — el dark no es un espejo oscurecido del light: son superficies calibradas por separado. Tocá un color para copiar su hex.

Primitivos de marca

Escala neutral única (calibrada light + dark)

Una sola acción. primary-500 es el único color de botón primario del sistema. Si todo compite, nada destaca: el verde de acción se reserva para el siguiente paso real del usuario — un CTA por pantalla.

Tokens semánticos — mismos roles, dos calibraciones

RolLightDark
bg fondo de pantalla#FFFFFF#0F1A19
bgElevated cards#FFFFFF#16221F
fg texto primario#1A1F1E#E4ECEB
fgMuted secundario#4A5250#B9C2BF
action CTA#0D6B63#0D6B63
link interactivo#0D6B63#27A89C
chipBg / chipFg#C8EDE9rgba(39,168,156,.18)
success#2A8C52#6BC892
warning#C97A00#E8AE4D
error#C0392B#E88E83
scrim velo modalrgba(10,31,30,.5) — el mismo en ambos: verde de marca, no negro

Tabla completa en app_colors.dart: 38 roles semánticos, cada uno con su par light/dark y su porqué en el docstring.

El isotipo, token por token

Pila inferior — primary-500: lo acumulado#0D6B63
Pila media — primary-300#27A89C
Pila superior#7FD8CE
Tallo y hoja derecha — el crecimiento#C8842F
Hoja izquierda#E3A356
Plato — único con par light/dark (crema / primary-700)#F8EFE2

La marca tiene sus propios tokens, separados de los roles de UI: la identidad no se presta para pintar pantallas.

Tokens de tipografía

Inter para la interfaz, mono para el dato

Dos familias con trabajos distintos: Inter habla (títulos, cuerpo, etiquetas) y JetBrains Mono cuenta (montos, precios, hashes, direcciones de wallet) — siempre con cifras tabulares para que las columnas de dinero no bailen.

Inter — escala de UI

display · 36/600/1.2Ahorrar es crecer
headingXl · 28/600/1.2Tu portafolio
heading · 22/600/1.2Comprar cripto
title · 18/600/1.35Verificación de identidad
body · 16/400/1.5El monto llega a tu billetera en minutos, sin letra pequeña.
label · 14/500/1.5Continuar
caption · 14/400/1.5Monto estimado
micro · 12/400/1.5Texto legal e hints van en 12.
eyebrow · mono 11/700Saldo disponible

JetBrains Mono — escala de dato

amountHero · 36/6000,0031 BTC
amountLg · 28/500$ 1.240.500
amount · 22/500$ 245.000
mono · 14/400bc1qar0srrr7xfkvy5…643dnkcq2mwq

Cifras tabulares — demo en vivo

Con tabular-nums ✓

$ 999.999

Proporcionales

$ 999.999

Los mismos números contando: a la izquierda los dígitos ocupan siempre lo mismo; a la derecha el ancho baila con cada 1. En una columna de saldos, ese baile es ruido.

Tokens de espacio y forma

Base 4, y tres márgenes que se ganaron el puesto

Todo gap y padding sale de una escala de paso 4. Ningún número suelto.

Escala de espaciado

xs4
sm8
md12
lg16
xl20
xxl24
xxxl32
s6464
s8080

Margen lateral de pantalla — tres familias medidas

Operación

16

Hubs, listas y flujos de dinero: pantallas densas, borde a borde.

Funnel

20

Formularios de verificación: campos que se llenan una vez, un paso más de aire.

Focal

24

Una sola cosa en pantalla: login, bienvenida, resultado.

No son tres números de gusto: son un censo de las pantallas reales, custodiado por un test. La próxima pantalla nace eligiendo una familia, no un número.

Radios — cada arco con su uso

sm6 · chips
md10 · botones, inputs
lg12 · cards
xl16 · sheets
sheet20 · bottom sheet
pill999 · botón CTA

Y una regla de tamaño: el touch target mínimo es 48 dp — lo medible de la accesibilidad no se negocia.

Tokens de elevación y movimiento

Borde por defecto; la sombra es la excepción

Las cards se separan por borde, no por sombra — la sombra se reserva para el dinero (cards de saldo) y lo que flota. En light, la sombra va tintada de verde de marca; nunca un gris muerto.

Tres niveles, un máximo por pantalla

e1
e2
e3

Duraciones — 100 / 200 / 300 / 350 ms

Elegí una y tocá la pista.

Curvas

standard · drawer · accelerate · travel (con su rebote).

La curva travel es una desviación documentada del DS — aprobada con fecha para los indicadores que viajan entre opciones. Y todo el movimiento respeta «reducir animación» cuando el usuario lo pide.

Componentes

Variantes cerradas, estados previstos

Los mismos componentes de la app, reconstruidos acá con los tokens. Cada uno trae sus reglas — la gracia del sistema no es tener piezas bonitas sino decisiones ya tomadas.

AppButton — pill, Inter 700, tracking 0.04em, press scale(0.98)

Regla: un botón primario por pantalla. El deshabilitado usa colores tokenizados, no una capa de opacidad.

Campos — normal, foco y bloqueado

El foco pinta el ring del token focusRing.

Dinero = mono con cifras tabulares, siempre.

Bloqueado = fondo propio + borde dashed + candado. Una señal de tres partes, no un simple apagado.

Estados y avisos

Compra confirmada

El BTC ya está en tu billetera MiCapi.

Red congestionada

La confirmación puede tardar unos minutos más.

No se pudo completar

Tu dinero no salió del origen. Podés reintentar.

Filas, chips y montos

Compraste BTCHoy, 14:32 + 0,000412
Retiro a NequiAyer, 09:10 − $ 180.000
Swap BTC → USDT8 oct, 20:05 +2,4 %

Balance card

Saldo disponible

$ 1.240.500

+3,1 % hoy

Skeleton (shimmer)

Carga = la forma del dato que viene, nunca spinners de nada.

Empty state

Todavía no hay movimientos

Cuando compres o vendas, va a aparecer acá.

AppSegmented — indicador viajero con rebote

La píldora viaja con la curva travel (easeOutBack): el rebote leve explica hacia dónde se movió la selección. Tocá una opción.

Del mockup al flujo real — piezas con regla propia

Bottom sheet + velo

El velo no es negro: es verde de marca al 50 % — atenúa lo pintado sin abrir un pozo en el lienzo. Entrada 300 ms con curva drawer.

OTP de verificación

Seis cajas mono, avance automático y pegado inteligente. Escribí o pegá un código.

El código llega por SMS.

Tasa viva + dot de frescura

Donde hay una tasa que respira, un dot dice si sigue viva. El gráfico se dibuja; no aparece.

$ 78.912.400 hace 5 s

Check dibujado, sin confeti

El éxito se dibuja con un trazo sobrio de 420 ms. Nada de celebración — es dinero, no un juego.

Dirección agrupada, nunca truncada

Cuando el usuario debe verificar una dirección, se muestra completa en bloques de 4, con los extremos reforzados — agrupar ≠ truncar.

Dirección de retiro

Wallet registrada: Ahorros ✓

Copy feedback inline

Al copiar, el propio control dice «Copiado ✓» 1,5 s. Sin SnackBar — el feedback vive donde estaba el dedo.

Método

Lo que hace sistema un sistema: cómo se sostiene

Un design system no es un PDF bonito — es un contrato verificable. Así se trabaja acá.

Dos fuentes de verdad, cada cosa en la suya

Lo visual manda en el código y sus goldens; lo legal vive en un vault documental y entra verbatim, jamás parafraseado. Un mockup y la app difieren → gana la app, salvo ficha abierta.

Goldens a 360 dp, light y dark

Cada pantalla tiene capturas de referencia; un cambio visual que rompe el golden rompe el build. Los 95 goldens corren en CI con las fuentes reales — no aproximaciones.

Gate antes de integrar

analyze + test en verde para merge; tocar una línea roja financiera o legal exige el test que la blinde. El contraste de los pares críticos lo verifica un script, no el ojo del diseñador.

Errata con memoria

El sistema lleva un acumulador de correcciones. La cuenta histórica: 13 de 14 veces, el equivocado era el mockup y no la app. Por eso la fuente visual se invirtió al código — con fecha y evidencia.

Decisiones con fecha y porqué

Cada token trae su historia en el docstring: por qué el velo modal es verde y no negro, por qué el dark no es espejo del light, por qué esa curva se desvía. Nada es «así porque sí».

Accesibilidad medible

Touch targets de 48 dp, contraste AA verificado por pares, prefers-reduced-motion respetado, semántica de lector de pantalla probada con volcados reales — no supuesta.

Esto fue el brief

El sistema completo son 70 láminas de referencia.

Marca y voz, color, forma, motion, cada componente con anatomía y estados, los patrones de los flujos de dinero y las pantallas — tal como fueron documentados, en claro y oscuro.