Sistema de documentos del proyecto:
- Producto y arquitectura técnica:
thefittclub-product.md- Identidad de marca, ancla experiencial y metodología:
thefittclub-brand.md- Implementación de tokens y componentes:
DESIGN.md(raíz del repo)- Voz y tono de la fundadora:
thefittclub-voice.md- Estrategia:
thefittclub-strategy.md
TheFittClub — Sistema de diseño visual (implementación)
Este documento acota cómo se ve la app en código: tokens, tipografía, convenciones de layout y la rúbrica de evaluación de pantallas. La intención emocional (santuario, inteligencia aterrizada) está definida en thefittclub-brand.md §8.
Stack
- Tailwind CSS v4 — sin
tailwind.config.ts; tokens en@themedentro de la hoja global. - Fuente de verdad CSS:
app/styles/app.css(@import "tailwindcss"+ bloque@theme).
Tokens de color y superficie
Definidos en @theme en app/styles/app.css (nombres usables como utilidades Tailwind, p. ej. bg-primary, text-textBody):
- Superficies:
primary,surfaceMuted,surfaceSoft,surfaceMid,darkBg,darkCard - Texto:
textMain,textBody,textSecondary,textMuted - Acento / marca:
signature,signatureDeep,clubGold - Utilidad:
success,danger,whatsapp,borderLight,borderDashed,banner
Los valores hex concretos viven solo en app/styles/app.css para evitar deriva entre doc y código.
Tipografía
En @theme:
- Sans: DM Sans (
--font-sans) - Serif: Cormorant Garamond (
--font-serif)
Uso: combinación premium — serif para titulares / momentos editoriales donde encaje la marca; sans para UI y cuerpo.
Layout y producto
- Variables CSS globales para navegación y dashboard:
--app-navbar-height,--dashboard-sticky-stack-height,--dashboard-scroll-margin(ver comentarios enapp/styles/app.css). - Utilidad
.dashboard-section-anchorpara scroll con márgenes correctos bajo cabeceras sticky.
Reglas para contribuciones UI
- No inventar colores fuera del
@themesalvo transición documentada en este archivo y reflejada enapp/styles/app.css. - Mobile-first; la experiencia debe sentirse “app” coherente con la promesa de marca (ver brand §8).
- i18n: no hardcodear copy; criterio en
.cursorrules(namespaces por página).
Rúbrica de evaluación de diseño — gate obligatorio
Cómo usar: Aplica los 7 criterios en orden. Si una pantalla falla cualquiera de los primeros 4, para ahí — los fallos tempranos no se arreglan con ajustes tardíos. Cuándo aplicar: Cualquier ticket que toque UI (componentes, rutas con vistas, tokens). Gate explícito en el harness de implementación y en QA.
Cada criterio tiene:
- Pregunta de evaluación — la haces en 3–5 segundos, sin leer el contenido.
- Pass — qué tiene que ocurrir para aprobarla.
- Fail — señales de rechazo inmediato.
- Matiz — si la respuesta es “más o menos”, qué pregunta adicional resuelve la duda.
Regla general: si dudas en cualquier criterio, es fail. La duda es la respuesta.
Criterio 1 — Jerarquía tipográfica en 3 segundos
Pregunta: Al mirar la pantalla 3 segundos sin leer, ¿sé inmediatamente qué es lo más importante?
Pass: Hay un elemento dominante claro. El ojo va ahí primero, siempre. Fail: Compiten dos o más elementos de peso similar. No sé dónde mirar. Matiz: Si el elemento dominante no es el que debería serlo según la función de la pantalla, la jerarquía está invertida — también es fail.
Criterio 2 — Presencia del CTA
Pregunta: ¿El botón principal tiene presencia sin gritar? ¿Compite con algo?
Pass: El CTA se encuentra sin buscarlo. Su peso es el adecuado para la acción que pide. Fail: El CTA desaparece entre el contenido. O bien es tan grande/brillante que aplasta la jerarquía. Matiz: Un CTA secundario visible es aceptable si está claramente subordinado al principal. Si los dos pesan igual, es fail.
Criterio 3 — Temperatura cromática
Pregunta: ¿La paleta coincide con santuario? ¿Hay algún tono frío que se cuele sin justificación?
Pass: La superficie es warm-neutral. Los colores de marca aparecen con propósito, no como relleno.
Fail: Azules fríos genéricos, grises neutros sin temperatura, fondos blancos puros #FFFFFF como base de página.
Matiz: Un tono frío puede estar justificado si sirve a un propósito funcional (ej: estado de error, información técnica). Si está ahí “porque queda bien”, es fail.
Criterio 4 — Densidad / respiración
Pregunta: ¿La pantalla respira o me ahoga?
Pass: Hay blanco rítmico — el espacio vacío está distribuido intencionalmente, no relleno. Fail: Cada píxel tiene contenido. No hay pausa visual. O el extremo contrario: tanto espacio que la pantalla parece vacía o no terminada. Matiz: Santuario no es minimalismo estéril — es espacio con propósito. Si el vacío se siente incómodo, añadir un elemento pequeño que ancle; si se siente cargado, eliminar algo.
Criterio 5 — Lectura emocional a 3 segundos
Pregunta: ¿Qué siente la usuaria al abrir esta pantalla?
Pass: Una respuesta clara y específica: calma, confianza, claridad, pertenencia. Fail: “No sé” o “parece una app normal”. Si no produce una respuesta emocional, la pantalla es genérica — falla. Matiz: La respuesta no tiene que ser positiva en todas las pantallas (ej: una pantalla de error puede sentirse como “esto está bajo control”). Pero tiene que ser algo.
Criterio 6 — Anti-vocabulario médico
Pregunta: ¿Hay alguna palabra del vocabulario prohibido?
Palabras prohibidas (lista completa): paciente, diagnóstico, tratamiento, terapia, cura, prescripción, protocolo clínico, rehabilitación médica, intervención, patología, síntoma, pronóstico, enfermedad, lesión (en contexto de diagnóstico), médicamente.
Pass: Cero palabras prohibidas. Fail: Una sola ocurrencia. Sin matices — fail directo. Acción: Reescribir con vocabulario wellness: entrenamiento, progresión, método, fase, activación, bienestar, recuperación física.
Criterio 7 — Anti-señales SaaS genéricas
Pregunta: ¿Podría esta pantalla ser de cualquier app de bienestar / fitness / SaaS?
Señales de rechazo automático:
- Gradientes diagonales violeta-rosa-naranja.
- Iconos Lucide / Heroicons en el hero o en posición prominente.
- Cards con esquinas perfectamente redondeadas + sombra drop genérica.
- Tipografía Inter o similar sin personalidad editorial.
- Imagen de stock de mujer sonriendo con ropa de deporte.
- Animaciones de entrada tipo “bounce” o “slide from left”.
- “Powered by AI” badge, sparkle emoji como indicador de IA.
Pass: Podría ser solo de TheFittClub. Tiene al menos un elemento que solo este producto haría. Fail: Parece una plantilla de Vercel o una demo de Tailwind UI. Matiz: Un elemento genérico en un componente utilitario (ej: un input de formulario) es aceptable. Un elemento genérico en el hero o en el CTA principal es fail.
Calibración (ejemplos reales)
Añadir ejemplos de pass/fail a medida que aparecen. Empieza vacío.
- Ejemplo pass (Criterio 5):
- Ejemplo fail (Criterio 7):
- Criterio que más se incumple en la práctica:
- Criterio que quiero añadir:
Los tokens pueden evolucionar; ante duda, inspeccionar app/styles/app.css como fuente numérica.
Última actualización: 2026-05-15.