# US-PERF-001: Personalización Avanzada de Perfil ## Información Básica | Campo | Valor | |-------|-------| | **ID** | US-PERF-001 | | **Épica** | EXT-004 - Perfiles Avanzados | | **Título** | Sistema de Personalización y Gestión de Perfil Personal | | **Prioridad** | Alta (P1) | | **Story Points** | 8 SP | | **Estado** | NOT STARTED | | **Fase** | Mes 3 (Extensiones Primera Ola) | | **Presupuesto** | $4,000 MXN | --- ## Historia de Usuario **Como** estudiante de la plataforma Gamilit **Quiero** personalizar completamente mi perfil con avatar, bio, intereses y preferencias visuales **Para** expresar mi identidad, adaptar la plataforma a mis necesidades y tener una experiencia única --- ## Valor de Negocio ### Impacto - **Engagement**: Usuarios personalizan perfil = mayor conexión emocional - **Retention**: Perfiles completos aumentan permanencia 35% - **Personalización**: Usuarios pueden adaptar plataforma a preferencias - **Identidad**: Sentido de pertenencia y ownership ### Métricas de Éxito - >80% usuarios personalizan avatar en primera semana - >60% completan bio y al menos 3 intereses - >50% modifican al menos 2 preferencias de apariencia - Tiempo en plataforma aumenta 15% con perfil completo --- ## Criterios de Aceptación ### CA-01: Gestión de Avatar **Dado** que un estudiante accede a su perfil **Cuando** gestiona su avatar **Entonces** debe poder: - Elegir de galería de 50+ avatares predefinidos (categorías: animales, personajes, abstractos) - Subir imagen personalizada (JPG/PNG, máx 2MB) - Recortar/ajustar imagen con herramienta visual - Ver preview del avatar en diferentes tamaños - Eliminar avatar personalizado y volver a predeterminado ### CA-02: Información Personal y Bio **Dado** que el estudiante personaliza su perfil **Cuando** edita información personal **Entonces** puede ingresar: - **Nombre de Usuario**: único, 3-20 caracteres, alfanumérico con guión bajo - **Nombre Completo**: editable (hereda de registro) - **Biografía**: hasta 500 caracteres, rich text básico (negrita, cursiva, enlaces) - **Intereses**: seleccionar hasta 10 de lista predefinida + agregar personalizados - **Grado Académico**: selector (Primaria, Secundaria, Preparatoria) - **Fecha de Nacimiento**: opcional, solo año visible públicamente - Validación en tiempo real de disponibilidad de username ### CA-03: Preferencias de Apariencia **Dado** que el usuario configura apariencia **Cuando** ajusta preferencias visuales **Entonces** puede configurar: - **Tema**: Claro / Oscuro / Automático (según sistema) - **Tamaño de Fuente**: Pequeño / Medio / Grande / Extra Grande - **Idioma**: Español / Inglés - **Densidad de Interfaz**: Compacta / Cómoda / Espaciosa - **Animaciones**: Activadas / Reducidas / Desactivadas - Cambios aplicados en tiempo real con preview - Persistencia en todos los dispositivos del usuario ### CA-04: Configuración de Privacidad **Dado** que el estudiante gestiona privacidad **Cuando** configura opciones de privacidad **Entonces** puede definir: - **Visibilidad de Perfil**: Público / Solo Amigos / Privado - **Mostrar en Leaderboard**: Sí / No - **Permitir Mensajes de**: Todos / Solo Amigos / Nadie - **Mostrar Racha**: Sí / No - **Mostrar Logros**: Sí / No - **Compartir Estadísticas**: Sí / No - Tooltips explicativos para cada opción - Preview de cómo se ve perfil según configuración ### CA-05: Historial de Actividad Personal **Dado** que el usuario accede a historial **Cuando** visualiza su actividad **Entonces** debe ver: - Timeline de últimas 50 actividades (scroll infinito para más) - Tipos de eventos: - Mecánicas completadas (título, fecha, puntuación) - Logros desbloqueados (nombre, descripción, fecha) - Subidas de nivel (nuevo nivel, fecha) - Compras en tienda (item, fecha, costo) - Interacciones sociales (opcional según privacidad) - Filtros: Todas / Completadas / Logros / Compras - Búsqueda de actividades específicas - Export de historial a CSV ### CA-06: Estadísticas Personales Avanzadas **Dado** que el estudiante accede a estadísticas **Cuando** visualiza su progreso detallado **Entonces** debe ver: - **Resumen General**: - Total de mecánicas completadas / total disponibles - Score promedio general - Tiempo total invertido en plataforma - Racha actual y máxima racha - **Distribución por Módulo** (gráfico circular): - % completado por cada módulo (1-5) - Score promedio por módulo - **Evolución Temporal** (gráfico de línea): - Score progression últimas 30 mecánicas - Tendencia: mejorando / estable / declinando - **Top Fortalezas y Debilidades**: - Top 3 áreas fuertes (mayor score) - Top 3 áreas de mejora (menor score) - **Comparativa** (opcional, si privacidad permite): - Mi posición en clase - Mi score vs promedio de clase - Exportar estadísticas como PDF o imagen ### CA-07: Preferencias de Notificaciones **Dado** que el usuario configura notificaciones **Cuando** gestiona sus preferencias **Entonces** puede definir: - **Email**: - Quest completado: ON/OFF - Logro desbloqueado: ON/OFF - Mensaje recibido: ON/OFF - Resumen semanal: ON/OFF - **Push** (si mobile): - Racha en riesgo: ON/OFF - Quest disponible: ON/OFF - **In-App**: - XP ganado: ON/OFF - Cacao ganado: ON/OFF - Subida de nivel: ON/OFF - Horario de silencio: desde [HH:MM] hasta [HH:MM] - Opción "Silenciar todo" temporal (1h, 6h, 24h, 1 semana) ### CA-08: Guardado y Persistencia **Dado** que el usuario modifica su perfil **Cuando** guarda cambios **Entonces** el sistema debe: - Validar todos los campos antes de guardar - Mostrar loading spinner durante guardado - Confirmar cambios guardados con toast notification - Manejar errores con mensajes claros y específicos - Revertir a valores anteriores si falla guardado - Opción "Descartar Cambios" si no quiere guardar - Detectar cambios sin guardar al salir (modal de confirmación) - Auto-guardar en algunas secciones (toggles de preferencias) - Sincronizar cambios en todos los dispositivos del usuario ### CA-09: Responsive y Accesibilidad **Dado** que el usuario accede desde cualquier dispositivo **Cuando** visualiza o edita su perfil **Entonces** debe: - Funcionar correctamente en 320px - 2560px - Layout adaptativo: tabs verticales (desktop) → dropdown (mobile) - Forms optimizados para mobile (inputs grandes, fácil tap) - Navegación por teclado completa - ARIA labels en todos los controles - Contraste WCAG 2.1 AA mínimo - Screen reader compatible - Touch targets mínimo 44x44px - Labels claros y tooltips explicativos - Soporte para modo alto contraste ### CA-10: Seguridad y Validación **Dado** que el perfil contiene datos sensibles **Cuando** el usuario modifica información **Entonces** el sistema debe: - Validar username único en tiempo real - Sanitizar inputs (prevenir XSS) - Validar formatos de email - Validar tamaño y tipo de archivos (avatar) - Rate limiting en actualizaciones (máx 10 cambios/min) - Audit log de cambios de perfil (backend) - Verificar email si cambia email principal - Requerir contraseña actual para cambios críticos - Proteger contra ataques CSRF - Encriptar datos sensibles en DB --- ## Especificaciones Técnicas ### Frontend Components ``` src/pages/profile/ ├── ProfilePage.tsx ├── sections/ │ ├── AvatarSection.tsx │ ├── BioSection.tsx │ ├── AppearanceSection.tsx │ ├── PrivacySection.tsx │ ├── ActivityHistorySection.tsx │ ├── StatsSection.tsx │ └── NotificationsSection.tsx ├── components/ │ ├── AvatarGallery.tsx │ ├── AvatarUploader.tsx │ ├── InterestsPicker.tsx │ ├── PrivacyPreview.tsx │ ├── ActivityTimeline.tsx │ └── StatsChart.tsx └── hooks/ ├── useProfile.ts └── useUnsavedChanges.ts ``` ### TypeScript Interfaces ```typescript interface UserProfile { userId: string; username: string; displayName: string; avatar: { type: 'preset' | 'custom'; url: string; }; bio: string; interests: string[]; grade: string; birthYear?: number; appearance: AppearancePreferences; privacy: PrivacySettings; notifications: NotificationPreferences; } interface AppearancePreferences { theme: 'light' | 'dark' | 'auto'; fontSize: 'small' | 'medium' | 'large' | 'xlarge'; language: 'es' | 'en'; density: 'compact' | 'comfortable' | 'spacious'; animations: 'full' | 'reduced' | 'none'; } interface PrivacySettings { profileVisibility: 'public' | 'friends' | 'private'; showInLeaderboard: boolean; allowMessagesFrom: 'all' | 'friends' | 'none'; showStreak: boolean; showAchievements: boolean; shareStats: boolean; } interface NotificationPreferences { email: { questCompleted: boolean; achievementUnlocked: boolean; messageReceived: boolean; weeklyDigest: boolean; }; push: { streakAtRisk: boolean; questAvailable: boolean; }; inApp: { xpGained: boolean; cacaoGained: boolean; levelUp: boolean; }; quietHours: { enabled: boolean; start: string; // HH:mm end: string; // HH:mm }; } ``` ### API Endpoints ```typescript // GET /api/profile/:userId // PUT /api/profile/:userId // POST /api/profile/:userId/avatar // GET /api/profile/:userId/activity // GET /api/profile/:userId/stats // POST /api/profile/:userId/validate-username ``` --- ## Definición de Terminado (DoD) - [ ] Componente ProfilePage implementado - [ ] Secciones de avatar, bio, apariencia, privacidad, historial, stats - [ ] Galería de avatares (50+ predefinidos) - [ ] Upload y crop de avatar personalizado - [ ] Selector de intereses con opciones personalizadas - [ ] Configuración de apariencia con preview en tiempo real - [ ] Configuración de privacidad con preview de perfil - [ ] Historial de actividad con filtros y búsqueda - [ ] Estadísticas avanzadas con gráficos (Chart.js/Recharts) - [ ] Configuración de notificaciones completa - [ ] Sistema de guardado con validación y auto-save - [ ] Warning de cambios sin guardar - [ ] Responsive design completo (mobile, tablet, desktop) - [ ] Tests unitarios >80% coverage - [ ] Tests de integración para flujos completos - [ ] Tests de accesibilidad (WCAG 2.1 AA) - [ ] API endpoints implementados y documentados - [ ] Validaciones server-side - [ ] Audit logging de cambios - [ ] Documentación de usuario - [ ] Guía de privacidad --- ## Dependencias ### Depende de - **EAI-001**: Sistema de autenticación básico - **EAI-003**: Sistema de logros y gamificación - **EAI-004**: Analytics básico ### Bloquea a - **EXT-007**: Portal de Comunidad (perfiles sociales) --- ## Riesgos y Mitigaciones | Riesgo | Probabilidad | Impacto | Mitigación | |--------|--------------|---------|------------| | Usuarios pierden cambios sin guardar | Media | Medio | Warning al salir, auto-save en toggles | | Avatar personalizado inapropiado | Media | Medio | Moderación manual + filtro automático | | Configuraciones complejas confunden | Media | Bajo | Tooltips, valores por defecto sensatos | | Performance en carga de historial | Baja | Medio | Paginación, lazy loading, índices DB | --- ## Estimación Detallada (8 SP) | Tarea | Horas | Responsable | |-------|-------|-------------| | Diseño UI/UX | 6h | UX Designer | | Avatar gallery + upload | 8h | Frontend Dev | | Bio y personalización | 6h | Frontend Dev | | Apariencia y tema | 6h | Frontend Dev | | Privacidad y permisos | 6h | Frontend Dev | | Historial de actividad | 8h | Frontend Dev | | Estadísticas y gráficos | 10h | Frontend Dev | | Notificaciones | 6h | Frontend Dev | | API endpoints | 10h | Backend Dev | | Validaciones | 4h | Backend Dev | | Testing | 10h | QA + Devs | | Documentación | 4h | Tech Lead | | **TOTAL** | **84h** | | **Presupuesto**: $4,000 MXN (~$230 USD) **Duración Estimada**: 2-3 días (equipo de 4-5 personas) --- ## Tareas de Implementación ### Backend (14.4h - 45%) - [ ] Diseñar schema de base de datos para perfiles extendidos (2h) - [ ] Implementar API endpoint PUT /api/profile/:userId (2h) - [ ] Implementar API endpoint POST /api/profile/:userId/avatar (2h) - [ ] Desarrollar servicio de validación de username único (1.5h) - [ ] Implementar sistema de upload y crop de avatares con Sharp (2h) - [ ] Crear endpoints de historial de actividad con paginación (2h) - [ ] Implementar agregaciones para estadísticas personales (2h) - [ ] Configurar audit logging de cambios de perfil (0.9h) ### Frontend (11.2h - 35%) - [ ] Crear componente ProfilePage con tabs (1.5h) - [ ] Implementar AvatarSection con galería y uploader (2h) - [ ] Desarrollar BioSection con rich text básico (1.5h) - [ ] Crear AppearanceSection con preview en tiempo real (2h) - [ ] Implementar PrivacySection con preview de perfil (1.5h) - [ ] Desarrollar ActivityHistorySection con filtros (1.5h) - [ ] Crear StatsSection con gráficos (Chart.js/Recharts) (1.5h) - [ ] Implementar sistema de auto-save y warning de cambios sin guardar (0.7h) ### Testing y QA (4.8h - 15%) - [ ] Escribir tests unitarios para componentes de perfil (2h) - [ ] Crear tests de integración para flujos completos (1.5h) - [ ] Realizar tests de accesibilidad WCAG 2.1 AA (1h) - [ ] Validar responsive design en múltiples dispositivos (0.3h) ### Deploy y Documentación (1.6h - 5%) - [ ] Documentar API endpoints en Swagger (0.8h) - [ ] Crear guía de usuario para personalización de perfil (0.5h) - [ ] Preparar guía de privacidad (0.3h) **Total Estimado**: 32h --- ## Cronograma | Fase | Fecha Inicio Planificada | Fecha Fin Estimada | Horas | Estado | |------|--------------------------|-------------------|-------|--------| | Backend | 28 Oct 2024 | 29 Oct 2024 | 14.4h | Planificado | | Frontend | 29 Oct 2024 | 31 Oct 2024 | 11.2h | Planificado | | Testing | 31 Oct 2024 | 01 Nov 2024 | 4.8h | Planificado | | Deploy | 01 Nov 2024 | 01 Nov 2024 | 1.6h | Planificado | --- ## Tags #ext-004 #perfiles-avanzados #personalizacion #avatar #preferencias #privacidad #estadisticas #historial #mes-3 --- **Creado**: 2025-11-02 **Última Actualización**: 2025-11-02 **Autor**: Sistema de Migración - Subagente EXT 4-6 **Estado**: Pendiente de Aprobación **Versión**: 1.0 **Origen**: Migrado desde EP005/US-005-05-settings-page.md (features avanzadas extraídas) **Compliance**: PF-001 (393 líneas < 400L límite)