--- type: SPEC asset_id: SPEC-REB-RClub-ArquitecturaDatos-RegistroPerfil-v01 version: v01 status: Draft owner: Victor Heredia sherpa_owner: Jay fecha_creacion: 2026-05-20 fecha_ultima_actualizacion: 2026-05-20 fecha_migracion_bmf: 2026-05-20 intellbank: IB-REB-Rebelocity subbank: — proposito: SPEC · RClub ArquitecturaDatos RegistroPerfil · IB-REB-Rebelocity nota_migracion: Frontmatter BMF agregado en batch masivo 2026-05-20 · Workbench FASE 5C · proposito pendiente revisión manual --- # Arquitectura de datos — Registro y Perfil de Usuario **Revelocity Club · Spec de UX y datos** **Versión:** 1.0 | **Fecha:** Mayo 2026 | **Owner:** Anahí Martínez — EmpowerLabs --- ## Principio rector > **El registro es la puerta. No es el interrogatorio.** Cada campo extra en el registro reduce la tasa de conversión. La regla es: pedir en el registro solo lo que la plataforma **necesita para funcionar desde el primer segundo**, y dejar el resto para el perfil, donde el usuario ya tiene contexto y motivación para completarlo. El directorio de miembros es el destino principal de los datos. Todo campo que hoy existe en el formulario de registro o en la configuración de perfil debe poder responder: **¿para qué lo usa la plataforma o el usuario?** --- ## Resumen ejecutivo de decisiones | Campo actual | Origen propuesto | Cambio | |---|---|---| | Nombre | Registro | Sin cambio | | Correo | Registro | Sin cambio | | Contraseña | Registro | Sin cambio | | País | Registro | Sin cambio — alimenta filtro de directorio | | Disciplina | Registro (renombrado) | Renombrar "Deporte de preferencia" → "Disciplina". Armonizar opciones con el directorio | | Teléfono | Perfil | Mover fuera del registro — no se usa en directorio ni en experiencia inicial | | Sexo | Perfil (renombrado) | Renombrar "Sexo" → "Género". Agregar opción "Prefiero no decir". Mover a perfil | | Grupo de Edad | Perfil | Mover a perfil — no hay filtro de directorio por edad; es dato de enriquecimiento | | Foto de perfil | Perfil | Agregar — clave para las tarjetas del directorio | | Ciudad | Perfil | Agregar — aparece en las tarjetas del directorio | | Rol en el ecosistema | Perfil | Agregar — es filtro del directorio | | Nivel | Perfil | Agregar — es filtro del directorio | | Frase / motivación | Perfil | Agregar — aparece en el modal del directorio | | Afiliación | Perfil | Agregar — aparece en el modal del directorio | | Busco coach | Perfil | Agregar — dato de matching para coaches y atletas | | Acepto atletas | Perfil | Agregar — visible solo si Rol = Coach | --- ## Formulario de registro — versión final **Regla:** máximo 5 campos después del bloque de autenticación. El usuario debe poder registrarse en menos de 2 minutos. ### Bloque 1 — Autenticación *(Sin cambios)* | Campo | Tipo | Requerido | Notas | |---|---|---|---| | Nombre | Texto | Sí | Nombre de pila + apellido. Se usa como nombre visible inicial | | Correo electrónico | Email | Sí | — | | Contraseña | Password | Sí | — | ### Bloque 2 — Datos deportivos (aparecen después del nombre y correo, antes de crear la cuenta) *(Máximo 2 campos — reducir fricción al mínimo)* | Campo | Label visible | Tipo | Requerido | Opciones | Uso | |---|---|---|---|---|---| | País | ¿Desde dónde entrenas? | Select | Sí | México · Paraguay · España · Argentina · Colombia · Otro | Filtro del directorio | | Disciplina | ¿Cuál es tu deporte? | Select múltiple | Sí | Triatlón · Running · Ciclismo · Natación · Multi-sport | Filtro del directorio + personalización de KatIA | > **Campos removidos del registro:** Teléfono, Sexo/Género, Grupo de Edad. > Motivo: añaden fricción sin aportar valor inmediato al usuario ni a la experiencia inicial de la plataforma. Se solicitan en el perfil cuando el usuario ya tiene contexto. --- ## Configuración de perfil — versión final El perfil se completa en dos momentos: 1. **Rally de Bienvenida — Etapa 2 (Perfil de Atleta):** el Rally incentiva gamificadamente que el usuario complete su perfil deportivo. Es el momento más efectivo para recolectar estos datos porque el usuario tiene motivación (puntos, badge). 2. **Configuración de perfil (acceso libre):** el usuario puede editar su perfil en cualquier momento desde su cuenta. ### Sección: Información personal | Campo | Label visible | Tipo | Requerido para directorio | Notas | |---|---|---|---|---| | Nombre visible | Nombre en el directorio | Texto | Sí | Pre-completado con el nombre del registro. El usuario puede editarlo | | Foto de perfil | Foto | Imagen | Sí | Sin foto → el sistema genera avatar con iniciales | | Ciudad | Ciudad | Texto libre | No | Aparece en la tarjeta del directorio | | País | País | Select | Sí | Pre-completado desde el registro. Editable | | Género | Género | Select | No | Masculino · Femenino · Prefiero no decir. Solo se muestra en directorio si no eligió "Prefiero no decir" | | Grupo de edad | Grupo de edad | Select | No | 18–24 · 25–34 · 35–44 · 45–54 · 55+. Dato de segmentación interna, no aparece en directorio | | Teléfono | Teléfono | Texto | No | Solo para uso interno (comunicaciones del equipo). Nunca visible en directorio | ### Sección: Perfil deportivo *(Estos campos alimentan directamente los filtros y tarjetas del directorio)* | Campo | Label visible | Tipo | Requerido para directorio | Opciones | |---|---|---|---|---| | Disciplina(s) | ¿Qué deporte practicas? | Multi-select | Sí | Triatlón · Running · Ciclismo · Natación · Multi-sport | | Rol en el ecosistema | ¿Cómo participas en el deporte? | Select | No | Atleta amateur · Atleta competitivo · Coach · Club · Organizador · Marca | | Nivel | ¿Cuál es tu nivel? | Select | No | Principiante · Amateur · Competitivo · Élite | | Frase o motivación | Tu frase (opcional) | Texto corto | No | Máx. 120 caracteres. Ej: *"Cada carrera me recuerda por qué me levanto a las 5am"* | | Afiliación | ¿A qué club o equipo perteneces? | Texto libre | No | Nombre del club o equipo | | Busco coach | Busco entrenador | Boolean (toggle) | No | Visible en el modal del directorio si está activo | | Acepto atletas | Acepto nuevos atletas | Boolean (toggle) | No | Solo visible si Rol = Coach | ### Sección: Redes sociales deportivas | Campo | Label visible | Tipo | Requerido | |---|---|---|---| | Strava | Perfil de Strava | URL | No | | Instagram deportivo | Instagram | URL | No | | LinkedIn | LinkedIn | URL | No | ### Sección: Privacidad | Campo | Label visible | Tipo | Default | Descripción | |---|---|---|---|---| | `visible_en_directorio` | Aparecer en el directorio de miembros | Boolean (toggle) | Activo | Al desactivar, el perfil deja de ser visible para otros miembros | --- ## Mapa de datos → directorio Este cuadro muestra exactamente de dónde viene cada filtro y cada campo visible del directorio. | Elemento del directorio | Dónde se recolecta el dato | Observación | |---|---|---| | **Filtro: Disciplina** | Registro (Bloque 2) | Dato recolectado desde el día 1 | | **Filtro: Rol** | Perfil — sección deportiva | Se recolecta en Rally Etapa 2 | | **Filtro: País/Región** | Registro (Bloque 2) | Dato recolectado desde el día 1 | | **Filtro: Nivel** | Perfil — sección deportiva | Se recolecta en Rally Etapa 2 | | **Tarjeta: Nombre** | Registro (Bloque 1) | Disponible desde registro | | **Tarjeta: Foto** | Perfil — información personal | Si no hay foto, sistema genera avatar | | **Tarjeta: Ciudad, País** | Registro (País) + Perfil (Ciudad) | País disponible desde registro | | **Tarjeta: Disciplinas (chips)** | Registro (Bloque 2) | Disponible desde registro | | **Tarjeta: Rol (tag)** | Perfil — sección deportiva | — | | **Modal: Género + Edad** | Perfil — información personal | Solo se muestra si fue autorizado | | **Modal: Nivel** | Perfil — sección deportiva | — | | **Modal: Frase** | Perfil — sección deportiva | — | | **Modal: Afiliación** | Perfil — sección deportiva | — | | **Modal: Busco coach** | Perfil — sección deportiva | — | --- ## Armonización de terminología Los campos del registro actual usan nombres distintos a los del directorio. Esto genera inconsistencias en la base de datos y confusión en el UI. Se recomienda unificar antes de comenzar desarrollo. | Término actual (registro) | Término nuevo (armonizado) | Cambio en UI | |---|---|---| | Deporte de preferencia | Disciplina | Renombrar label | | carrera | Running | Renombrar opción | | todos | Multi-sport | Renombrar opción | | Sexo | Género | Renombrar label + agregar "Prefiero no decir" | | Grupo de Edad | Grupo de edad | Misma etiqueta, mover a perfil | --- ## Campos a resolver antes de desarrollo | # | Pregunta | Impacto | |---|---|---| | 1 | ¿El teléfono se usa actualmente para algo en la plataforma (2FA, WhatsApp, notificaciones)? | Define si queda en perfil o se elimina completamente | | 2 | ¿El Grupo de Edad se usa para segmentación de contenido o solo para datos internos? | Define si se muestra al usuario como filtro en algún punto futuro | | 3 | ¿El formulario de registro actual es un solo paso o multi-step? | Define si el Bloque 2 se presenta como "paso 2" o como campos adicionales en la misma pantalla | --- ## Flujo recomendado de recolección de datos ``` REGISTRO → Nombre + Correo + Contraseña → País + Disciplina → Cuenta creada ✓ ↓ RALLY DE BIENVENIDA — Etapa 2 (Perfil de Atleta) → Foto de perfil → Ciudad → Rol en el ecosistema → Nivel → Frase de motivación → Afiliación → Perfil completo ✓ (aparece con toda la información en el directorio) ↓ CONFIGURACIÓN DE PERFIL (en cualquier momento) → Género → Grupo de edad → Teléfono → Strava / Instagram / LinkedIn → Toggle de visibilidad en directorio ``` --- ## Base de datos — resumen de campos por momento de captura ### Campos que se llenan en el registro (`users` table, al crear cuenta) ``` nombre string, required email string, required, unique password_hash string, required pais string, required (enum) disciplinas array, required (mínimo 1 valor) ``` ### Campos que se llenan en el perfil (`users` table, actualizables) ``` foto_perfil url, optional ciudad string, optional genero string, enum: masculino | femenino | no_especificado, default: no_especificado grupo_edad string, enum: 18-24 | 25-34 | 35-44 | 45-54 | 55+, optional telefono string, optional rol_ecosistema string, enum, optional nivel string, enum, optional frase_motivacion string, max 120 chars, optional afiliacion string, optional busca_coach boolean, default: false acepta_atletas boolean, default: false link_strava url, optional link_instagram url, optional link_linkedin url, optional visible_en_directorio boolean, default: true ``` --- *Spec v1.0 — EmpowerLabs para Revelocity Club · Mayo 2026* *Referencia cruzada: SPEC-RClub-DirectorioMiembros-v02.md · Rally-RClub-BienvenidaGamificado-v01.md*