Saltar al contenido

FF COACHING · BRAND SYSTEM v1.0

De inseguro a
fuerte y confiado.

Manual operativo de la marca FF Coaching. 16 secciones canónicas, 32 componentes primitivos production-ready, tokens versionados, patrones gráficos y descargas. Listo para importar al producto.

Identidad

Identidad.

Quién es FF Coaching, a quién habla, y qué territorio ocupa en la cabeza del avatar.

01 · ESENCIA

Lo que somos en dos frases.

01.01 · STATEMENT

De inseguro a fuerte y confiado.

01.02 · PROPUESTA

Acompañamiento 1:1 para hombres que quieren dejar de sentirse inseguros con su físico y construir una versión más fuerte, segura y disciplinada de sí mismos. Sin PDFs. Sin desaparecer.

02 · ADJETIVOS

Cinco adjetivos justificados.

Cada palabra carga una decisión visual y editorial. Si una pieza no encarna alguno de estos cinco, no es FF.

Directo02.01

Cero rodeos. Una promesa, un siguiente paso. El público objetivo ya está cansado de gurús que se enrollan.

Masculino02.02

Habla a un hombre adulto. Sin condescendencia, sin broseo, sin motivación de plantilla.

Premium02.03

Acompañamiento 1:1, no app fitness barata. La identidad refleja precio y exclusividad relativa.

Disciplinado02.04

El resultado es consecuencia del oficio, no del hype. La marca encarna esa misma postura.

Real02.05

Anti-postureo. Evita stock photos, transformaciones imposibles y promesas sin proof.

03 · POSICIONAMIENTO

A quién hablamos y contra quién competimos.

AVATAR

03.01

Hombre 28-45, entrena o quiere empezar. No se ve como quiere. Ha probado rutinas YouTube, dietas que duran 2 semanas, y un par de coaches que le mandaron un PDF y desaparecieron. Busca acompañamiento real, no más información.

ARQUETIPO

03.02

El Héroe en formación. Quiere transformarse pero necesita un mentor que le marque el camino. No motivador, mentor. El que dice qué hacer cuando él no lo sabe y le obliga a aparecer cuando él fallaría solo.

CLUSTER COMPETIDOR

03.03

Apps fitness genéricas (MyFitnessPal, MyProtein), coaches Instagram de plantilla, gimnasios franquicia. FF sale del cluster por densidad editorial, oficio premium 1:1 y nivel de seguimiento que ningún software replica.

Color

Color.

Paleta off-white editorial con un único acento Signal Blue. Regla 60/30/9/1: background domina, foreground respira, surface contiene, accent aparece como detonante.

01 · PALETA

12 swatches operativos.

Background01.01
#FAFAFA--bg

RGB 250 · 250 · 250

Background principal de toda la marca. 60% de superficie.

Surface01.02
#FFFFFF--surface

RGB 255 · 255 · 255

Cards, paneles, dropdowns. Capa elevada sobre bg.

Surface-201.03
#F4F4F5--surface-2

RGB 244 · 244 · 245

Hovers, segunda capa, bandas alternas (section-band).

Surface-301.04
#E4E4E7--surface-3

RGB 228 · 228 · 231

Borders fuertes, scrollbar tracks, dividers gruesos.

Foreground01.05
#09090B--fg

RGB 9 · 9 · 11

Texto primario, headlines, fondo inverso (section dark).

Accent01.06
#3B82F6--accent

RGB 59 · 130 · 246

ACENTO 1%. CTAs, em itálicas, dots timeline, números 01-NN.

Accent-201.07
#60A5FA--accent-2

RGB 96 · 165 · 250

Hover en links secundarios, glows decorativos.

Accent-dark01.08
#2563EB--accent-dark

RGB 37 · 99 · 235

Hover / active de Accent en botones primarios.

Muted01.09
#71717A--muted

RGB 113 · 113 · 122

Texto secundario, body de soporte. AA sobre bg.

Muted-201.10
#A1A1AA--muted-2

RGB 161 · 161 · 170

Captions mono, labels técnicos. Solo texto grande.

Muted-301.11
#D4D4D8--muted-3

RGB 212 · 212 · 216

Placeholders desactivados, dots inactivos del timeline.

Border01.12
rgba(0,0,0,0.08)--border

RGB 0 · 0 · 0 · 0.08

Borders sutiles, dividers, separadores de cards.

02 · PROPORCIÓN

Ratio 60 · 30 · 9 · 1.

El acento Signal Blue ocupa solo el 1% de la superficie. Cada aparición pesa. Si aparece en el 10% pierde fuerza y la marca se desangra.

60 · BG
30 · FG
9 · SURFACE
1

RATIO DE SUPERFICIE · LANDING TÍPICA

02.01

03 · CONTRASTE

WCAG 2.1 calculado.

Combinaciones reales con ratio numérico y veredicto. Las marcadas FAIL están prohibidas en cualquier superficie productiva.

#ForegroundBackgroundRatioResultadoNota
03.01ForegroundBackground19.3 : 1AAA
03.02ForegroundSurface18.9 : 1AAA
03.03MutedBackground4.5 : 1AA
03.04Muted-2Background2.5 : 1AA · LARGE ONLYSolo texto grande ≥18pt. Prohibido en body.
03.05AccentBackground3.8 : 1AA · LARGE ONLYSolo headlines / CTAs grandes. No body.
03.06WhiteAccent3.9 : 1AA · LARGE ONLYPara CTAs (semibold ≥14px). Prohibido en text small.
03.07Muted-2Accent1.6 : 1FAIL · DO NOT USECombinación prohibida en cualquier contexto.
Tipografía

Tipografía.

Poppins para display y body en pesos ligeros (200/300). JetBrains Mono para todo lo técnico. Firma de marca: em itálica azul como acento de autoridad.

01 · FAMILIAS

Dos familias. Nunca tres.

La variedad sale del peso (200 → 700) y del tracking, no de cambiar de fuente. Italic solo en em.

Aa01.01DISPLAY + BODY

Poppins

200 · 300 · 400 · 500 · 600 · 700 + italic

Geometric sans con personalidad. Cuerpo legible a 14-16px. Peso ligero (200/300) para titulares premium. La italic solo se usa en <em> con color accent — firma única de marca.

Aa01.02TECHNICAL

JetBrains Mono

400 · 500

Monoespaciada para datos, métricas, eyebrows, captions. Aparece en UPPERCASE con tracking 1.5-3.5px según el rol. Da textura técnica vs el Poppins editorial.

02 · JERARQUÍA

9 tokens tipográficos.

De display gigante a caption mono — cada token tiene tamaño, peso, tracking y uso definidos. No improvisar.

display

02.01

clamp(48 → 128px) · -4px

w200 / 300

De inseguro a fuerte y confiado

Hero brutal. Una vez por pantalla.

h1

02.02

clamp(40 → 84px) · -3px

w200 / 300

Acompañamiento, no entrenamiento.

Apertura de sección principal.

h2

02.03

clamp(28 → 56px) · -2px

w200 / 300

Estructura. Seguimiento. Dirección.

Subsección dentro de un bloque.

h3

02.04

20 · -0.5px

w500

Plan de entrenamiento adaptado

Títulos de cards y listas destacadas.

lead

02.05

18 · 1.7

w300

Cero atajos. Cero postureo. Mes a mes hasta tener un físico que represente tu disciplina.

Subheadlines y descripciones de apertura.

body

02.06

15 · 1.65

w300

Cuerpo de texto estándar. Una idea por párrafo, frases cortas, ritmo de lectura limpio.

Texto principal de secciones explicativas.

body-sm

02.07

13 · 1.6

w300

Texto secundario, notas al pie, descripciones complementarias.

Microcopy, hints, descripciones de cards pequeñas.

eyebrow

02.08

11 · 3.5px tracking

w500

EYEBROW · 11PX · 3.5PX

Eyebrows de sección, badges, tags accent.

caption-mono

02.09

11 · 1.5px tracking

w400

CAPTION · 11PX · 1.5PX

Captions, counters NN.MM, labels técnicos.

03 · FIRMA

em itálica azul.

La firma única de marca. Aparece en headlines, body y stats. Si una superficie no la usa, la marca está incompleta.

03.01 · EN VIVO

EN HEADLINE

De inseguro a fuerte.

EN BODY

Acompañamiento real cada semana — peso, fotos, audios, bajones. Los resultados vienen cuando hay alguien detrás que no te suelta.

EN STAT

250+

03.02 · CSS

em {
  font-style: italic;
  color: var(--accent);
  font-weight: 300;
}

Tres líneas. Aplica globalmente a todo <em> en la página. No usar italic en headings ni body normal — solo en em.

Espaciado

Espaciado.

Escala 4 → 160px en saltos significativos. Ritmo vertical pedagógico. Radios premium grandes para cards y hero, pill total para botones.

01 · ESCALA

10 valores significativos.

Cada salto dobla o aumenta 50%. Evita 6/10/14 — rompen el ritmo visual. Si necesitas un valor intermedio, revisa primero si el diseño está mal pensado.

01.01space-14px
01.02space-28px
01.03space-416px
01.04space-624px
01.05space-832px
01.06space-1248px
01.07space-1664px
01.08space-2496px
01.09space-32128px
01.10space-40160px

02 · RITMO VERTICAL

Separación entre elementos.

No improvises padding-y. Esta es la matriz canónica de separación vertical de toda superficie FF.

space-4002.01

160px

HeroPrimera sección
space-3202.02

128px

SecciónSección
space-2402.03

96px

SubsecciónSubsección
space-1602.04

64px

BloqueBloque dentro de subsección
border02.05

1px (gap-px)

CardCard en grid
space-602.06

24px

TextoTexto en stack

03 · RADIOS

Premium grande por defecto.

La marca defaultea a radios grandes (20-32px) como firma premium. Botones siempre pill. Cards siempre rounded-2xl.

--r-sm03.01
8px

Tags, badges pequeños, code inline

--r-md03.02
14px

Inputs, alerts, dropdowns

--r-lg03.03
20px

Cards, popovers

--r-xl03.04
26px

Cards destacadas, modal estándar

--r-2xl03.05
32px

Hero cards, pricing featured, bento

--r-pill03.06
pill

Botones, tabs, paginación, badges

04 · GRIDS

3 breakpoints, 3 grids.

04.01

Mobile

≤640px
4 colsgutter 16pxmargin 24px

Una columna efectiva. Cards full-width.

04.02

Tablet

641-1024px
8 colsgutter 20pxmargin 32px

Layouts de 2 columnas. Bento grids.

04.03

Desktop

≥1025px
12 colsgutter 24pxmargin 48px

Layouts editoriales. Max-width 1240px.

Iconos

Iconos.

Lucide React. Stroke 1.5px, outline only — sin rellenos, sin duotone. Set curado de 29 iconos críticos agrupados por categoría.

01 · SET CURADO

30 iconos por categoría.

Si un icono que necesitas no está aquí, primero pregunta si la superficie lo necesita realmente. La paleta visual cabe.

01.01

NAVEGACIÓN

07 ITEMS
arrow-right
chevron-right
chevron-down
search
plus
x
check
01.02

COMUNICACIÓN

05 ITEMS
mail
phone
message-square
message-circle
send
01.03

ESTADO · FEEDBACK

05 ITEMS
info
circle-help
settings
shield
play
01.04

TIEMPO · AGENDA

03 ITEMS
calendar
clock
timer
01.05

PERSONAS

02 ITEMS
user
users
01.06

ENTRENAMIENTO · MÉTRICAS

08 ITEMS
dumbbell
target
trophy
flame
heart
activity
bar-chart-3
trending-up

02 · REGLAS

Cómo usarlos, qué evitar.

02.01 · DO

  • 01

    Stroke 1.5px siempre.

    Nunca mezclar weights distintos en la misma superficie.

  • 02

    Tamaño en pasos de 4.

    12 · 14 · 16 · 20 · 24px. Nunca 13/15/22.

  • 03

    Color hereda del texto.

    text-current por defecto. Accent solo en CTAs y status.

  • 04

    aria-hidden si va con texto.

    El icono es decorativo cuando el label adyacente describe la acción.

02.02 · DON'T

  • 01

    No mezclar librerías.

    Solo Lucide. Si falta un icono, se compone con primitivos.

  • 02

    No rellenos sólidos.

    Rompen el lenguaje outline editorial de la marca.

  • 03

    No iconos a ≥32px.

    Si necesitas tamaño grande, usa ilustración o el logo.

  • 04

    No emojis como iconos.

    El brand es vectorial y monocromo. Emojis son texto.

Componentes UI

Componentes.

Librería primitiva completa. Cada componente: forwardRef, focus ring visible, aria correcto, disabled/loading exclusivos. 32 piezas — todas importables desde @/app/brand-kit/components/ui.

01 · PRIMITIVOS

Buttons, inputs, badges, avatars.

01

Button · variantes

<Button variant size />

Primary domina la acción crítica. Secondary, subtle y ghost se reservan para acciones de soporte. Link en navegación textual.

02

Button · tamaños y estado

size · loading · disabled

loading bloquea el botón vía disabled={disabled || loading} y publica aria-busy.

03DefaultEn vivoPremiumActivoError

Badge

<Badge tone dot pulse />

Metadata corta. Pulse solo para estados críticos (en cola, error, en vivo).

04Hipertrofia1:1OnlineEspaña

Tag

<Tag />

Etiqueta técnica neutra para chips de categoría.

05

Avatar · solo y grupo

<Avatar /> · <AvatarGroup max />

Sin foto cae a iniciales. AvatarGroup colapsa después del max con un contador.

06
Clientes43+Activos
Historias250+Reales
Cierre60%Tasa

Stat

<Stat label value delta />

Métricas marketing. Display extralight, label en mono uppercase.

07

Solo te escribo yo. Sin newsletter.

Input · Field

<Field label hint error>

Field vincula label, hint y error vía aria-describedby. children es función — recibe id, aria-describedby, aria-invalid.

08

Textarea · Select

<Textarea /> · <Select />

Mismos estados y mismos focus rings que Input.

09

Checkbox · Radio · Switch

form controls

Todos comparten focus ring accent/35 y aria roles nativos (role='switch' en Switch).

10

Aún no hay transformaciones aquí

Sube la primera comparativa antes/después para verla aparecer.

EmptyState

<EmptyState icon title description action />

Para listas vacías, transformaciones sin filtros, paginación vacía.

02 · FEEDBACK

Alerts, banners, loaders, progress.

11

Alert · 4 tonos

<Alert tone title />

role='alert'. Title opcional, body en sans light.

12
Verano empieza pronto. 6 plazas abiertas este mes.

Banner

<Banner action dismissible />

Fondo accent, ancho completo. Usar para anuncios temporales (oferta, plazas).

13

Toast + useToast

useToast()

Provider montado en layout. Hook push() encola notificaciones con duration por defecto 4s.

14
CargandoCargando

Spinner · DotsLoader · Skeleton

loading states

Spinner para bloqueos cortos, DotsLoader para envío de formularios, Skeleton para layouts en carga.

15
74%

Progress · ProgressCircle

<Progress value /> · <ProgressCircle />

Barra horizontal para tareas largas. Circle para resúmenes y stats.

03 · OVERLAY

Modal, drawer, floating elements.

16

Modal

<Modal open onClose />

Portal + backdrop blur. Esc cierra. Focus traps via tabIndex=-1.

17

Drawer

<Drawer side />

Lateral right/left/bottom. Scroll interno, footer fijo opcional.

18

Tooltip · Popover · Dropdown

floating elements

Tooltip = info contextual sobre hover/focus. Popover = contenido rico. Dropdown = menú de acciones.

04 · NAVEGACIÓN

Tabs, breadcrumb, pagination, stepper.

19

Programa enfocado en ganar masa muscular con superávit calórico controlado.

Tabs

<Tabs><TabList><Tab>…

Roving tabindex + flechas izquierda/derecha. Solo el tab activo es tabbable.

20

Breadcrumb

<Breadcrumb items />

aria-current='page' en el último. Separadores ChevronRight 12px.

21

Pagination

<Pagination page total onPageChange />

Compacta con elipsis cuando total > 7. aria-current en página activa.

22
  1. Reservar llamada30 min sin compromiso
  2. DiagnósticoDefinimos objetivo
  3. PlanRecibes tu protocolo
  4. SeguimientoSemanal hasta resultado

Stepper

<Stepper current steps />

Para procesos lineales (onboarding, checkout, alta).

05 · DISCLOSURE

Accordion, collapsible.

23

Accordion

<Accordion type='single'>

single (1 abierto) o multiple. aria-expanded + aria-controls en cada item.

24

Collapsible

<Collapsible trigger>

Versión ligera del Accordion para un solo bloque colapsable.

Cómo importar

import { Button, Field, Input, useToast } from "@/app/brand-kit/components/ui";

function Hero() {
  const { push } = useToast();
  return (
    <Field label="Email" required>
      {(p) => <Input {...p} type="email" placeholder="tu@email.com" />}
    </Field>
  );
}
Sistema gráfico

Sistema gráfico.

Patrones secundarios que respiran sobre la paleta sin competir con el contenido. Todos viven en globals.css como utilidades reutilizables.

01 · UTILIDADES CSS

8 patrones operativos.

Cada uno tiene su clase CSS, su preview y su contexto de uso. Importables desde globals.css.

.grid-bg01.01

Grid de fondo con mask radial. Líneas a 56px, opacidad 0.04. Reservado al hero.

.radial-glow-blue01.02

Dos gradientes elípticos del accent al 8% y 5%. Para hero, CTA, pricing featured.

Sobre band

.section-band01.03

Banda surface-2 con border-top/border-bottom. Separa secciones sin heading adicional.

.diagonal-texture01.04

Líneas a 45º del accent al 6%. Para superficies de soporte (FAQ, footer) sin gritar.

CUPO LIMITADO
.pulse-dot01.05

Pulso accent 2s ease-in-out infinito. Solo badges live, en vivo, escasez.

01
.stroke-number01.06

Números display outline (sin relleno). Para sección Método y numeración 01-10.

FFGLASS
.glass-nav01.07

Translucencia blanca 78% + backdrop-blur 20px. Solo navbar fijo.

Quiero mi plaza →
.shadow-cta01.08

Halo accent + sombra negra suave. Solo botones primarios.

02 · BAR ACCENT SYSTEM

Barras, líneas, dividers.

Gramática visual recurrente. Cada elemento tiene un rol claro — eyebrow, énfasis, callout, separador.

EYEBROW

Horizontal accent · 32×1px

02.01

Eyebrow → línea → label. Marca inicio de subsección.

Underline trio · 3/2/1px

02.02

Énfasis editorial bajo headline. Tres capas decrecientes.

No empecé fuerte. Me hice fuerte.

Vertical accent · 3px

02.03

Callouts, quotes destacados, blockquotes.

Divider con dot

02.04

Separar bloques de contenido similar sin border completo.

03 · REGLAS

Cómo aplicar el sistema.

03.01

Un patrón por sección como máximo. Mezclar grid-bg + radial-glow es la excepción heredada del hero.

03.02

Patrones siempre en fondo, nunca encima de copy.

03.03

Cero degradados purpurinos, cero blobs animados, cero ilustraciones isométricas.

03.04

Si un patrón no aparece aquí, no existe en la marca.

Mockups

Mockups.

Cómo se ve la marca aplicada en producto. Hero de landing, dashboard cliente, chat móvil con Íñigo, social card 1:1. Todos construidos con primitivos de la librería.

01 · LANDING HERO

Aplicación dominante de la marca.

1:1 REAL · CUPO LIMITADO

DEJA DE
ENTRENAR PARA NADA.

250 tíos antes que tú tenían tu mismo gimnasio y la misma sensación de no avanzar. Hoy están donde tú quieres estar.

01.01

Hero landing v3

Aplicación principal: badge, headline brutal, subheadline con números, CTA single-purpose. Esta es la versión productiva.

FF
COACHING
DASHBOARD
Adherencia92%Sem 04
Sesiones14+3 vs s.03
Peso−2.1kgRecomp
Próximas sesionesEsta semana
Push
L · 18:30
Pull
L · 18:30
Pierna
L · 18:30
Full body
L · 18:30
01.02

Dashboard cliente

Stats al pie + agenda semanal. Componentes primitivos (Stat, Tag, Card).

FFDM

¿Cómo lo veis hoy?

Íñigo · 9:14

Subo 2kg en press banca. Listo.

9:21

A por ello. Mantén la pausa abajo.

Íñigo · 9:22
Mensaje…
01.03

Chat móvil con Íñigo

WhatsApp / DM con cliente. La burbuja del cliente va en accent — su voz domina.

EN VIVO

De inseguro a
fuerte y confiado.

ffcoaching.es
01.04

Social card 1:1

IG feed, OG share. Misma firma que landing — grid-bg + radial-glow + em italic. Badge live arriba.

Templates

Templates.

Plantillas listas con copy real. Landing de captura, pricing card, post de blog, email transaccional. Cero Lorem ipsum.

01 · 4 SUPERFICIES

Copy real en cada plantilla.

01.01

LANDING · CAPTURA EMAIL

Empieza hoy gratis.

Llévate la guía que uso con mis clientes para empezar a mejorar tu físico con estructura. Sin coste.

SIN SPAM · SOLO TE ESCRIBO YO

Landing capture

Lead magnet · captura email arriba con promesa concreta + reassurance mono.

01.02

Pricing card · featured

Card destacada con scale + shadow-featured. Lista 6 features máximo + CTA full-width.

01.03
Entrenamiento4 MIN DE LECTURA

Por qué cambiar de rutina cada 4 semanas te frena.

La mayoría rota ejercicios cada mes "para no aburrir el cuerpo". El cuerpo no se aburre — el ego sí. Lo que necesitas es progresión medible en pocos movimientos: añadir 2,5 kg, una repetición más, dos segundos de pausa al inicio del concéntrico.

Cambiar es cómodo. Progresar duele. Y el cuerpo solo responde a lo segundo.

Post blog · long-form

Tag categoría + lectura mono + headline editorial. Body 14-16px con em itálica en frases clave.

01.04
DE: ÍÑIGO · FF COACHINGASUNTO

La guía que pediste. Y una cosa más.

Hola,

Aquí tienes la guía. Ábrela en plan: 20 minutos hoy, marca las dos cosas que vas a aplicar esta semana, cierra.

Tres acciones aplicadas mañana valen más que el libro entero leído sin actuar.

Si quieres que lo veamos juntos antes de empezar, reservas una llamada aquí. Sin compromiso.

— Íñigo

Email transaccional

Subject con em italic. Cuerpo plano sin imágenes — la voz lleva el peso. Link accent.

Voz y tono

Voz.

Cómo escribe la marca. Cinco atributos justificados, vocabulario sí/no, ejemplos de copy real con la firma em itálica azul.

01 · ATRIBUTOS

Cinco atributos justificados.

Si una pieza no encarna alguno de estos cinco, no suena a FF Coaching.

Directa01.01

Una idea por frase. Verbo activo. Sin rodeos, sin disclaimers, sin 'puede que'. El lector ya está cansado de gurús.

Sin humo01.02

Datos antes que adjetivos. Si dices 'transformación' la respaldas con un antes/después o un caso. Si no, no lo digas.

Masculina01.03

Habla a un adulto, no a un adolescente ni a un coach. Vocabulario llano, no broseo, no jerga gym.

Honesta01.04

Si algo no es para todos, lo dices. Si requiere disciplina, lo dices. No vendemos atajos.

Premium01.05

Tono tranquilo y seguro. La autoridad no necesita gritar. Cero exclamaciones.

02 · VOCABULARIO

Palabras que sí, palabras que no.

02.01 · SÍ

acompañamientoestructuradireccióndisciplinaoficiocompromisoclaridaddecisiónsalto de nivelconstruir

02.02 · NO

secretotrucohackfórmula mágicatransformación radical en 7 díasrutina definitivahaz esto y verássúper guíaimparablebestia

03 · COPY REAL

Ejemplos productivos.

Copy en uso en landing, emails y microcopy. Repite la firma em italic azul con criterio.

Headline

De inseguro a fuerte y confiado.

03.01
Subheadline

Vengo de estar flaco. Hoy ayudo a hombres que quieren más de sí mismos a construir el físico y la confianza que merecen.

03.02
CTA primario

Quiero empezar →

03.03
CTA secundario

Ver resultados reales

03.04
Microcopy de error · email inválido

Necesito un email válido para enviarte la guía.

03.05
Email · asunto

La guía que pediste. Y una cosa más.

03.06
Email · primera línea

Ábrela en plan: 20 minutos hoy, marca las dos cosas que vas a aplicar, cierra. Tres acciones aplicadas mañana valen más que el libro entero leído sin actuar.

03.07
Método operativo

Método.

Quién decide qué, dónde viven los assets, cómo se versiona la marca. Si está aquí, no se discute en cada PR.

01 · MATRIZ DE DECISIÓN

Quién decide qué.

Decide / Aprueba / Ejecuta. Si no está aquí, se pregunta al director creativo.

#AssetDecideApruebaEjecuta
01.01Tokens en globals.cssDirector creativoÍñigoFrontend
01.02Copy comercial (hero, CTA)ÍñigoDirector creativoCopy / Claude
01.03Componentes UIFrontendDirector creativoFrontend
01.04Assets sociales (PFP, banner)DiseñoÍñigoDiseño
01.05Cambios de logo (FFLogo)Director creativoÍñigoFrontend
01.06Pricing & ofertaÍñigoFrontend

02 · UBICACIONES

Dónde viven los assets.

02.01
src/app/globals.css

Tokens canónicos (@theme inline)

02.02
src/components/ff-logo.tsx

Logo por código (3 sizes)

02.03
public/video-hero.mp4

Vídeo hero horizontal + vertical

02.04
public/retrato-*.jpg

Retratos Íñigo (BN + color)

02.05
src/app/brand-kit/components/ui/

Librería UI (32 componentes)

02.06
src/proxy.ts

Routing multi-host (Next 16)

03 · VERSIONADO + FLOW

Cómo cambia la marca.

03.01 · VERSIONADO

  • v1.X.0

    Añadir sección, añadir componente, ajustes menores no breaking.

  • v2.0.0

    Cambio de paleta o tipografía. Breaking. Documentar tabla antes/después.

  • vX.Y.Z

    Cada cambio en tokens bumpea versión y se documenta en CHANGELOG.md sin excepción.

03.02 · FLUJO DE CAMBIO

  1. 01

    Proponer cambio en issue o conversación corta. No abrir PR ciego.

  2. 02

    Si afecta tokens: actualizar globals.css primero. El resto se deriva.

  3. 03

    Validar contraste WCAG real (no aproximación) en cualquier nuevo par color/texto.

  4. 04

    Si afecta componentes: añadir entrada en sección 07 y 16 antes de mergear.

  5. 05

    Bumpear versión + entrada en CHANGELOG. Sin esto el merge no entra.

Ecosistema

Ecosistema.

Dónde vive la marca y qué pesa más en cada canal. La identidad no cambia; el énfasis sí.

01 · 6 CANALES

Reglas por superficie.

Tres reglas concretas por canal. Si un canal no aparece aquí, no existe en el ecosistema FF.

Web

ffcoaching.es

01.01
  • 01Headline directo + subheadline con em itálica azul como firma.
  • 02CTA dominante: v3 → Cal.com (link directo, no embed).
  • 03Lead magnet eliminado en v3 — cero distracciones.

Instagram

@inigoo00

01.02
  • 01Reels orientados a oficio, no a baile/tendencia.
  • 02Carrusel: portada display + slides en obsidiana.
  • 03Stories: highlight 'Acceso clientes' lleva a Skool.

YouTube

Long-form

01.03
  • 01Miniaturas: foto real + 3 palabras display + 1 em accent.
  • 02Sin clickbait. Sin flechas rojas.
  • 03Outro fijo: CTA llamada + tarjeta lateral guía.

Comunidad

Skool externo

01.04
  • 01Sustituye a la videoteca propia de la v1.
  • 02Directos en vivo cada viernes.
  • 03Branding mínimo (no replicar toda la web).

Email

Cal.com + transaccional

01.05
  • 01Asunto: una promesa concreta. Usar em itálica en una palabra.
  • 02Cuerpo en sans 16px font-light, máximo 6 párrafos cortos.
  • 03Firma: Íñigo (no FF Coaching). La relación es personal.

WhatsApp

+34 630 02 55 80

01.06
  • 01Primer mensaje siempre desde Íñigo, no automático.
  • 02Voz cercana, sin emojis profesionales.
  • 03CTA a llamada solo después de confirmar fit.
Do's & Don'ts

Reglas.

Lo que separa la marca aplicada con criterio del cover obvio del sector. Ocho a cada lado, todas específicas.

01 · CRITERIO OPERATIVO

8 + 8 reglas concretas.

01.01 · DO

08 PRINCIPIOS
  • 01

    Signal Blue al 1%

    Un acento por pantalla máximo. Si aparece más, se desangra.

  • 02

    Off-white #FAFAFA como base

    60% de superficie. La marca respira en aire claro.

  • 03

    Hero con video real o grid-bg

    Nunca stock photo. La autoridad se construye con material propio.

  • 04

    Eyebrows mono uppercase

    Tracking 3.5px, color accent. Aparecen al inicio de cada subsección.

  • 05

    Titulares weight 200/300

    Tracking -2px o más negativo. Editorial premium, no SaaS.

  • 06

    em itálica azul como firma

    Único acento de autoridad. Repítelo con criterio en cada superficie.

  • 07

    CTA primario en pill accent

    Secundario ghost pill con border. Sin terciarios — el ojo se confunde.

  • 08

    Iconos Lucide outline 1.5px

    Tamaño en múltiplos de 4 (12/16/20/24). Mismo stroke en todos.

01.02 · DON'T

08 LÍMITES
  • 01

    No segundo color de acento

    Rojo, naranja, verde. Cero. Solo Signal Blue para énfasis.

  • 02

    No tercera fuente

    Solo Poppins + JetBrains Mono. La variedad sale del peso, no de la familia.

  • 03

    No accent sobre fg en texto pequeño

    No pasa WCAG AA. Solo en CTAs grandes (≥18pt semibold).

  • 04

    No emojis

    Ni en producto ni en manual. Iconos vectoriales siempre.

  • 05

    No animaciones bouncy

    Easing cubic-bezier(0.22, 1, 0.36, 1), duración ≤300ms.

  • 06

    No degradados purpurinos

    Cero blobs animados, cero isométricos, cero glassmorphism saturado.

  • 07

    No copy de gurú

    'Transformación radical', 'fórmula', 'hack', 'secreto', 'bestia'. Fuera.

  • 08

    No exclamaciones ni mayúsculas gratuitas

    La autoridad no grita. Si lo quieres enfatizar, usa em.

Descargas

Descargas.

Todos los assets oficiales servidos como archivos reales. Cero pendientes, cero links rotos.

01 · BRAND PACK

Todo en un solo ZIP.

La opción rápida: descarga el pack completo y tienes el sistema listo para arrancar otro proyecto, hacer handoff o archivar.

03 · INTEGRACIÓN

Cómo importar tokens en otro proyecto.

Tres líneas en tu globals.css y heredas paleta + tipografía + firma de marca. El resto lo decide cada proyecto destino.

15.03 · GLOBALS.CSS DESTINO

ARCHIVO COMPLETO
@import "tailwindcss";

:root {
  --bg:      #FAFAFA;
  --surface: #FFFFFF;
  --fg:      #09090B;
  --muted:   #71717A;
  --accent:  #3B82F6;
  /* … resto en brand-tokens.css */
}

@theme inline {
  --color-bg:      var(--bg);
  --color-surface: var(--surface);
  --color-fg:      var(--fg);
  --color-muted:   var(--muted);
  --color-accent:  var(--accent);
}

em {
  font-style: italic;
  color: var(--accent);
  font-weight: 300;
}
Librería UI

Librería.

Versión profunda de §07. Cada componente con preview, código copiable y nota de accesibilidad. Importable desde @/app/brand-kit/components/ui.

01 · INSTALACIÓN

Cómo importar en otro proyecto.

5 pasos. La librería UI no depende de shadcn ni de ningún registry — es código propio copiable.

16.01 · 5 PASOS

SHELL
1. Copiar src/app/globals.css (tokens + @theme inline)
2. Copiar src/lib/utils.ts (cn helper)
3. Copiar src/app/brand-kit/components/ui/ → components/brand/ui/
4. npm install clsx tailwind-merge lucide-react
5. import { Button } from "@/components/brand/ui";

02 · CATÁLOGO COMPLETO

15 entradas documentadas.

Cada componente con preview, código copiable y nota de accesibilidad.

02.01 · PRIMITIVO

Button
Primitivo

Button

<Button />

6 variantes × 4 tamaños. loading bloquea y publica aria-busy.

Button
AA
Keyboard. Enter / Space activan. Foco visible vía ring-3 accent/35. ARIA. aria-busy en loading, disabled bloquea interacción.

02.02 · PRIMITIVO

Badge · Tag
Primitivo

Badge · Tag

<Badge /> · <Tag />

Metadata. Badge admite tone, dot, pulse. Tag es etiqueta neutra.

Badge · Tag
En vivoPremiumErrorHipertrofia1:1
AA
Decorativos por defecto — añade aria-label si el valor no aparece en el texto adyacente.

02.03 · FORM

Input · Field
Form

Input · Field

<Field><Input /></Field>

Field vincula label, hint y error con aria-describedby + aria-invalid.

Input · Field

Solo te escribo yo.

AA
ARIA.label[htmlFor] ↔ input[id], errores como aria-describedby + aria-invalid="true".

02.04 · FORM

Textarea · Select
Form

Textarea · Select

<Textarea /> · <Select />

Mismos estados que Input. Select renderiza Chevron decorativo.

Textarea · Select
AA
Select usa el elemento nativo — keyboard y screen reader funcionan sin JS.

02.05 · FORM

Checkbox · Radio · Switch
Form

Checkbox · Radio · Switch

<Checkbox /> · <Radio /> · <Switch />

Wrapping label-as-container para clickable area amplia. Switch usa role='switch'.

Checkbox · Radio · Switch
AA
Click en la label dispara el control. Focus visible con ring-3. Switch publica role="switch" para SR.

02.06 · PRIMITIVO

Avatar · AvatarGroup
Primitivo

Avatar · AvatarGroup

<Avatar /> · <AvatarGroup max />

Iniciales como fallback. Group colapsa con contador +N.

Avatar · AvatarGroup
AA
Si la imagen es decorativa, alt="". Si identifica, alt con nombre real.

02.07 · PRIMITIVO

Stat · EmptyState
Primitivo

Stat · EmptyState

<Stat /> · <EmptyState />

Stat para métricas marketing. EmptyState para listas vacías.

Stat · EmptyState
Clientes43+Activos

Sin datos todavía

Sube tu primer registro.

AA
Stat es presentacional. EmptyState mantiene jerarquía h3 + p semántica.

02.08 · FEEDBACK

Alert
Feedback

Alert

<Alert tone />

4 tonos en línea. Body en sans light. Publica role='alert'.

Alert
AA
role="alert" — el screen reader interrumpe para anunciarlo.

02.09 · FEEDBACK

Toast + useToast
Feedback

Toast + useToast

useToast() · <ToastProvider />

Provider montado en layout. Hook push() encola y auto-cierra a 4s.

Toast + useToast
AA
Region role="region" aria-label. Cada toast role="status" — anunciado sin interrupción.

02.10 · FEEDBACK

Spinner · DotsLoader · Progress · ProgressCircle · Skeleton
Feedback

Spinner · DotsLoader · Progress · ProgressCircle · Skeleton

loading states

Granularidad de feedback según duración esperada.

Spinner · DotsLoader · Progress · ProgressCircle · Skeleton
CargandoCargando
74%
AA
Spinner y loaders publican role="status" + aria-live="polite".

02.11 · OVERLAY

Modal · Drawer
Overlay

Modal · Drawer

<Modal /> · <Drawer />

Portal + backdrop blur. Esc cierra. body overflow hidden mientras abierto.

Modal · Drawer
AA
role="dialog" aria-modal aria-labelledby. Focus al abrir, restaurado al cerrar.

02.12 · OVERLAY

Tooltip · Popover · Dropdown
Overlay

Tooltip · Popover · Dropdown

floating elements

Tooltip = hover info. Popover = contenido rico. Dropdown = menú de acciones.

Tooltip · Popover · Dropdown
AA
Tooltip ↔ aria-describedby. Dropdown ↔ aria-haspopup="menu" + aria-expanded + role="menu".

02.13 · NAVIGATION

Tabs
Navigation

Tabs

<Tabs><Tab /></Tabs>

Roving tabindex + arrow keys. Solo el tab activo es tabbable.

Tabs

Panel A

AA
role="tablist", role="tab", aria-selected, aria-controls. Flechas izq/der mueven foco.

02.14 · NAVIGATION

Breadcrumb · Pagination · Stepper
Navigation

Breadcrumb · Pagination · Stepper

navigation primitives

Pagination con elipsis si total > 7. Stepper para procesos lineales.

Breadcrumb · Pagination · Stepper
  1. Llamada
  2. Diagnóstico
  3. Plan
  4. Seguimiento
AA
Breadcrumb usa aria-label="Migas de pan" + aria-current="page". Pagination aria-current en activa.

02.15 · DISCLOSURE

Accordion
Disclosure

Accordion

<Accordion />

Accordion single o multiple. aria-expanded + aria-controls en cada item.

Accordion

Plan de entrenamiento, nutrición, revisiones semanales.

AA
aria-expanded + aria-controls en cada trigger. Panel con role="region" y aria-labelledby.