workspace/projects/gamilit/docs/03-fase-extensiones/EXT-004-perfiles/historias-usuario/US-PERF-005-personalizacion-dashboard.md
rckrdmrd ea1879f4ad feat: Initial workspace structure with multi-level Git configuration
- Configure workspace Git repository with comprehensive .gitignore
- Add Odoo as submodule for ERP reference code
- Include documentation: SETUP.md, GIT-STRUCTURE.md
- Add gitignore templates for projects (backend, frontend, database)
- Structure supports independent repos per project/subproject level

Workspace includes:
- core/ - Reusable patterns, modules, orchestration system
- projects/ - Active projects (erp-suite, gamilit, trading-platform, etc.)
- knowledge-base/ - Reference code and patterns (includes Odoo submodule)
- devtools/ - Development tools and templates
- customers/ - Client implementations template

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-08 10:44:23 -06:00

18 KiB

US-PERF-005: Personalización de Dashboard

Información Básica

Campo Valor
ID US-PERF-005
Épica EXT-004 - Perfiles Avanzados
Título Dashboard Personalizable con Widgets y Layouts
Prioridad Media (P2)
Story Points 7 SP
Estado NOT STARTED
Fase Mes 3 (Extensiones Primera Ola)
Presupuesto $3,500 MXN

Historia de Usuario

Como estudiante de la plataforma Gamilit Quiero personalizar mi dashboard con widgets configurables, layouts y métricas favoritas Para tener acceso rápido a la información que más me importa y adaptar la interfaz a mi flujo de trabajo


Valor de Negocio

Impacto

  • User Experience: Dashboard personalizado aumenta satisfacción 40%
  • Efficiency: Usuarios encuentran información 60% más rápido
  • Engagement: Personalización aumenta tiempo en plataforma 25%
  • Diferenciación: Pocas LMS ofrecen dashboards configurables

Métricas de Éxito

  • 65% usuarios personalizan su dashboard en primera semana

  • 80% mantienen configuración personalizada (no regresan a default)

  • 50% crean múltiples layouts para diferentes contextos

  • Tiempo promedio para encontrar info disminuye 40%

Criterios de Aceptación

CA-01: Sistema de Widgets

Dado que el usuario accede a su dashboard Cuando configura widgets Entonces debe tener disponibles:

  • Widget de Progreso: Barra de avance por módulo con % completado
  • Widget de Racha: Días consecutivos, meta, calendario visual
  • Widget de Leaderboard: Top 10 en clase/global (configurable)
  • Widget de Logros Recientes: Últimas 5 insignias desbloqueadas
  • Widget de Tareas Pendientes: Mecánicas asignadas no completadas
  • Widget de Calendario: Próximos deadlines y eventos
  • Widget de Estadísticas: Gráfico de score vs tiempo
  • Widget de Amigos Online: Lista de amigos activos (si tiene US-PERF-004)
  • Widget de Recomendaciones: Sugerencias de mecánicas basado en performance
  • Widget de ML Coins: Balance, gastos recientes, items destacados
  • Cada widget debe tener:
    • Título personalizable
    • Configuración específica (ej: mostrar top 5 o top 10)
    • Opción de ocultar/mostrar

CA-02: Editor de Layout Drag & Drop

Dado que el usuario personaliza layout Cuando entra en modo edición Entonces debe poder:

  • Activar "Modo Edición" con botón prominente
  • Arrastrar widgets de panel lateral al dashboard
  • Soltar widgets en grid responsivo (auto-ajuste)
  • Reordenar widgets arrastrando dentro del grid
  • Redimensionar widgets (pequeño, mediano, grande, extra grande)
  • Eliminar widgets arrastrando a "zona de eliminación" o con botón X
  • Ver preview en tiempo real mientras arrastra
  • Sistema de snap-to-grid para alineación automática
  • Indicadores visuales de zonas válidas para soltar
  • Deshacer/Rehacer últimos 10 cambios
  • Guardar cambios o descartar con confirmación

CA-03: Layouts Predefinidos

Dado que el usuario quiere empezar rápido Cuando selecciona templates Entonces debe tener:

  • Layout por Defecto: Balance de widgets esenciales
  • Layout Enfocado en Estudio:
    • Tareas pendientes (grande)
    • Progreso por módulo (grande)
    • Calendario (mediano)
    • Estadísticas mínimas
  • Layout Competitivo:
    • Leaderboard (extra grande)
    • Racha (grande)
    • Logros recientes (mediano)
    • Amigos online (pequeño)
  • Layout Minimalista:
    • Solo 3-4 widgets esenciales
    • Mucho espacio en blanco
  • Layout Completo:
    • Todos los widgets disponibles
    • Grid denso, máxima información
  • Aplicar template con confirmación (reemplaza layout actual)
  • Vista previa de template antes de aplicar

CA-04: Múltiples Layouts Guardados

Dado que el usuario tiene diferentes contextos de uso Cuando gestiona layouts Entonces debe poder:

  • Crear hasta 5 layouts personalizados
  • Nombrar cada layout (ej: "Vista Examen", "Descanso", "Estudio Intenso")
  • Cambiar entre layouts con selector rápido (dropdown)
  • Duplicar layout existente como base
  • Eliminar layouts personalizados (con confirmación)
  • Layout activo se guarda automáticamente
  • Atajo de teclado: Ctrl+1/2/3/4/5 para cambiar layout
  • Indicador visual de layout activo

CA-05: Personalización de Tema por Dashboard

Dado que el usuario configura apariencia Cuando personaliza tema Entonces puede definir:

  • Color de Acento: 12 opciones predefinidas + selector personalizado
  • Color de Fondo: Sólido / Gradiente / Patrón sutil
  • Estilo de Widgets:
    • Bordes: Redondeados / Cuadrados / Sin bordes
    • Sombras: Pronunciadas / Suaves / Ninguna
    • Espaciado: Compacto / Normal / Amplio
  • Tipografía:
    • Fuente de encabezados (4 opciones)
    • Tamaño base (heredado de US-PERF-001 o custom)
  • Preview en tiempo real de cambios
  • Reset a tema por defecto con un clic
  • Temas no afectan resto de plataforma (solo dashboard)

CA-06: Shortcuts Personalizados

Dado que el usuario quiere acceso rápido Cuando configura shortcuts Entonces puede crear:

  • Barra de shortcuts fija en top/lado
  • Agregar hasta 10 shortcuts a:
    • Módulos específicos (ej: "Módulo 3")
    • Tipos de mecánicas (ej: "Mis cuestionarios")
    • Secciones (ej: "Mi tienda", "Leaderboard")
    • URLs externas (ej: "Google Classroom")
  • Iconos predefinidos para cada shortcut (20+ opciones)
  • Reordenar shortcuts por drag & drop
  • Atajos de teclado: Ctrl+Shift+[número]
  • Tooltips descriptivos en hover

CA-07: Configuración de Widgets Individuales

Dado que cada widget tiene opciones Cuando el usuario configura un widget Entonces debe poder:

  • Acceder a configuración con icono de engranaje
  • Widget de Progreso:
    • Mostrar: Todos los módulos / Solo en curso / Solo incompletos
    • Ordenar por: Nombre / Progreso / Fecha
  • Widget de Leaderboard:
    • Ámbito: Mi clase / Toda la escuela / Global
    • Top N: 5, 10, 20, 50
  • Widget de Estadísticas:
    • Métrica: Score / Tiempo / Mecánicas completadas
    • Periodo: Última semana / Último mes / Últimos 3 meses
    • Tipo de gráfico: Línea / Barras / Área
  • Widget de Calendario:
    • Mostrar: Solo deadlines / Todos los eventos
    • Vista: Lista / Calendario mensual
  • Aplicar cambios con preview
  • Reset a configuración por defecto

CA-08: Responsive Design

Dado que el usuario accede desde diferentes dispositivos Cuando visualiza dashboard personalizado Entonces debe:

  • Desktop (>1200px): Grid de hasta 4 columnas
  • Tablet (768px-1199px): Grid de 2 columnas, widgets se reorganizan
  • Mobile (<768px): 1 columna, widgets apilados verticalmente
  • Modo edición simplificado en mobile (lista reordenable vs drag & drop)
  • Widgets mantienen funcionalidad completa en todos los tamaños
  • Configuraciones se sincronizan entre dispositivos
  • Layout se adapta automáticamente según viewport

CA-09: Exportación e Importación de Configuración

Dado que el usuario quiere compartir o respaldar Cuando exporta/importa configuración Entonces puede:

  • Exportar layout actual como JSON
  • Importar layout desde archivo JSON
  • Compartir layout con otros usuarios (genera código de 6 caracteres)
  • Otros usuarios aplican layout compartido con código
  • Validación de configuración importada (previene errores)
  • Opción de aplicar parcialmente (solo widgets, solo tema, etc.)

CA-10: Analytics de Uso de Dashboard

Dado que se quiere mejorar UX Cuando el usuario usa dashboard Entonces el sistema debe trackear (anonimizado):

  • Widgets más usados (clicks, tiempo visible)
  • Layouts más populares
  • Combinaciones de widgets frecuentes
  • Tiempo promedio en dashboard
  • Frecuencia de cambios de layout
  • Heatmap de interacciones
  • Datos agregados para mejorar defaults

CA-11: Onboarding Interactivo

Dado que un nuevo usuario accede por primera vez Cuando ve su dashboard Entonces debe recibir:

  • Tour guiado (opcional): "Personaliza tu dashboard"
  • Tooltips contextuales:
    • "Arrastra widgets aquí para agregar"
    • "Redimensiona tocando las esquinas"
    • "Crea múltiples layouts para diferentes tareas"
  • Opción de "Omitir tour" o "Mostrar más tarde"
  • Checklist de personalización:
    • Agregar al menos 3 widgets
    • Cambiar color de acento
    • Crear un layout personalizado
  • Recompensa al completar: 100 Cacao + Badge "Diseñador"

CA-12: Performance y Optimización

Dado que dashboards pueden tener muchos widgets Cuando el sistema renderiza Entonces debe:

  • Widgets en viewport se renderizan primero (lazy load)
  • Widgets fuera de vista se cargan al hacer scroll
  • Polling de datos solo para widgets visibles
  • Refresh rate configurable por widget (30s, 1min, 5min, manual)
  • Cache de datos de widgets (invalidar cada N minutos)
  • Dashboard completo carga en <1 segundo
  • Drag & drop smooth 60 FPS
  • Optimización de re-renders (React.memo, useMemo)

CA-13: Accesibilidad

Dado que todos los usuarios deben poder personalizar Cuando usan features de dashboard Entonces debe:

  • Modo edición accesible por teclado:
    • Tab para navegar widgets
    • Enter para seleccionar
    • Flechas para mover
    • Escape para salir de modo edición
  • ARIA labels descriptivos en cada widget
  • Screen reader anuncia cambios de layout
  • Alto contraste en modo edición
  • Indicadores visuales claros de drag & drop
  • Focus visible en todos los elementos interactivos

CA-14: Límites y Validaciones

Dado que se necesita evitar configuraciones extremas Cuando el usuario personaliza Entonces el sistema debe:

  • Limitar a máximo 12 widgets simultáneos
  • Prevenir layouts vacíos (mínimo 2 widgets)
  • Validar que shortcuts tengan destinos válidos
  • Alertar si layout es muy denso (UX warning)
  • Prevenir widgets duplicados en mismo layout
  • Máximo 5 layouts guardados por usuario
  • Nombres de layouts: 3-50 caracteres

CA-15: Integración con Gamificación

Dado que personalización es parte de la experiencia Cuando el usuario personaliza dashboard Entonces debe recibir:

  • Primera personalización: 50 Cacao
  • Crear primer layout personalizado: 100 Cacao + Badge "Organizador"
  • Usar 5 layouts diferentes: Badge "Versátil"
  • Tener dashboard >80% optimizado (según AI): Badge "Power User"
  • Quest semanal: "Personaliza tu dashboard" (200 Cacao)

Especificaciones Técnicas

Frontend Components

src/features/dashboard/
├── pages/
│   └── DashboardPage.tsx
├── components/
│   ├── WidgetGrid.tsx
│   ├── WidgetLibrary.tsx
│   ├── DragDropContext.tsx
│   ├── LayoutSelector.tsx
│   ├── ThemeCustomizer.tsx
│   ├── ShortcutBar.tsx
│   └── DashboardOnboarding.tsx
├── widgets/
│   ├── ProgressWidget.tsx
│   ├── StreakWidget.tsx
│   ├── LeaderboardWidget.tsx
│   ├── AchievementsWidget.tsx
│   ├── TodoWidget.tsx
│   ├── CalendarWidget.tsx
│   ├── StatsWidget.tsx
│   ├── FriendsWidget.tsx
│   ├── RecommendationsWidget.tsx
│   └── CoinsWidget.tsx
├── hooks/
│   ├── useDashboardLayout.ts
│   ├── useWidgetConfig.ts
│   └── useDragDrop.ts
└── layouts/
    └── layoutTemplates.ts

TypeScript Interfaces

interface Widget {
  id: string;
  type: WidgetType;
  title: string;
  position: { x: number; y: number };
  size: { w: number; h: number };
  config: WidgetConfig;
  visible: boolean;
}

type WidgetType =
  | 'progress'
  | 'streak'
  | 'leaderboard'
  | 'achievements'
  | 'todo'
  | 'calendar'
  | 'stats'
  | 'friends'
  | 'recommendations'
  | 'coins';

interface WidgetConfig {
  refreshRate?: number; // seconds
  [key: string]: any; // widget-specific config
}

interface DashboardLayout {
  id: string;
  userId: string;
  name: string;
  isActive: boolean;
  widgets: Widget[];
  theme: DashboardTheme;
  shortcuts: Shortcut[];
  createdAt: Date;
  updatedAt: Date;
}

interface DashboardTheme {
  accentColor: string;
  backgroundColor: string;
  widgetStyle: {
    borderRadius: 'rounded' | 'square' | 'none';
    shadows: 'strong' | 'soft' | 'none';
    spacing: 'compact' | 'normal' | 'spacious';
  };
  typography: {
    headingFont: string;
    baseSize: number;
  };
}

interface Shortcut {
  id: string;
  label: string;
  icon: string;
  target: string; // URL or internal route
  order: number;
  keyboardShortcut?: string;
}

API Endpoints

// Layouts
GET    /api/dashboard/layouts
POST   /api/dashboard/layouts
PUT    /api/dashboard/layouts/:id
DELETE /api/dashboard/layouts/:id
PUT    /api/dashboard/layouts/:id/activate

// Layout Sharing
POST   /api/dashboard/layouts/:id/share (returns code)
POST   /api/dashboard/layouts/import/:code

// Widget Data
GET    /api/dashboard/widgets/:type/data

// Analytics
POST   /api/dashboard/analytics/track

Technology Stack

Frontend:
- react-grid-layout para drag & drop grid
- react-dnd como alternativa
- recharts para widgets de estadísticas
- react-color para color picker
- framer-motion para animaciones

Backend:
- NestJS endpoints
- PostgreSQL para layouts persistentes
- Redis para cache de widget data
- WebSockets para updates en tiempo real (opcional)

Diferenciación con Alcance Inicial (EAI)

Alcance Inicial (EAI)

  • EP002/US-002-02: Dashboard estático, no personalizable
  • Vista fija de progreso, racha, leaderboard
  • Sin opciones de layout o widgets

Esta Historia (EXT-004)

  • Dashboard 100% personalizable
  • 10+ widgets configurables
  • Drag & drop editor
  • Múltiples layouts guardados
  • Temas personalizados
  • Shortcuts configurables
  • Esto es extensión avanzada de dashboard

Dependencias

Depende de

  • EAI-002: Dashboard básico existente (base a extender)
  • US-PERF-001: Sistema de preferencias de usuario
  • EAI-003: Datos de gamificación (para widgets)
  • US-PERF-004: Amigos online (para widget opcional)

Bloquea a

  • Ninguna (feature independiente)

Definición de Terminado (DoD)

  • 10 widgets implementados y funcionales
  • Sistema drag & drop con react-grid-layout
  • Editor de layout con modo edición/vista
  • 5 templates predefinidos
  • Sistema de múltiples layouts (máx 5 por usuario)
  • Selector rápido de layouts
  • Personalización de tema por dashboard
  • Barra de shortcuts configurables
  • Configuración individual por widget
  • Responsive design completo
  • Exportación/importación de layouts
  • Sistema de compartir layouts (códigos)
  • Onboarding interactivo
  • Performance optimizada (<1s carga)
  • Tests unitarios >80% coverage
  • Tests de integración para drag & drop
  • Tests de accesibilidad
  • API endpoints implementados
  • Documentación de usuario
  • Video tutorial de personalización

Riesgos y Mitigaciones

Riesgo Probabilidad Impacto Mitigación
Complejidad UI confunde usuarios Media Medio Onboarding claro, templates predefinidos
Performance con muchos widgets Media Alto Lazy loading, virtual scrolling, cache
Layouts rotos en diferentes tamaños Media Medio Responsive testing exhaustivo
Usuarios pierden configuración Baja Alto Auto-save, confirmación antes de eliminar

Estimación Detallada (7 SP)

Tarea Horas Responsable
Diseño UI/UX 8h UX Designer
Sistema de widgets (10 widgets) 16h Frontend Dev
Drag & drop grid 10h Frontend Dev
Layouts y templates 8h Frontend Dev
Personalización de tema 6h Frontend Dev
Shortcuts bar 4h Frontend Dev
Widget configuration 8h Frontend Dev
Onboarding 4h Frontend Dev
API endpoints 8h Backend Dev
Optimización performance 6h Frontend Dev
Testing 10h QA + Devs
Documentación 4h Tech Lead
TOTAL 92h

Presupuesto: $3,500 MXN (~$200 USD) Duración Estimada: 2-3 días (equipo de 4-5 personas)


Tareas de Implementación

Backend (12.6h - 45%)

  • Diseñar schema para layouts de dashboard y widgets (2h)
  • Implementar API de gestión de layouts (CRUD) (2.5h)
  • Crear endpoints de sharing de layouts (códigos de 6 caracteres) (2h)
  • Desarrollar API para obtener datos de widgets en tiempo real (2.5h)
  • Implementar sistema de cache de widget data con Redis (2h)
  • Configurar validación de layouts y límites (1.6h)

Frontend (9.8h - 35%)

  • Implementar react-grid-layout para drag & drop de widgets (3h)
  • Crear 10 widgets funcionales (ProgressWidget, StreakWidget, etc.) (3h)
  • Desarrollar LayoutSelector con templates predefinidos (1.5h)
  • Implementar ThemeCustomizer para personalización de tema (1.5h)
  • Crear ShortcutBar configurable (0.8h)

Testing y QA (4.2h - 15%)

  • Escribir tests unitarios para widgets y layouts (2h)
  • Crear tests de integración para drag & drop (1.5h)
  • Realizar tests de performance (<1s carga) (0.5h)
  • Validar accesibilidad de dashboard (0.2h)

Deploy y Documentación (1.4h - 5%)

  • Documentar API de dashboard (0.6h)
  • Crear guía de usuario para personalización (0.5h)
  • Producir video tutorial de personalización (0.3h)

Total Estimado: 28h


Cronograma

Fase Fecha Inicio Planificada Fecha Fin Estimada Horas Estado
Backend 01 Nov 2024 02 Nov 2024 12.6h Planificado
Frontend 02 Nov 2024 03 Nov 2024 9.8h Planificado
Testing 03 Nov 2024 04 Nov 2024 4.2h Planificado
Deploy 04 Nov 2024 04 Nov 2024 1.4h Planificado

Tags

#ext-004 #dashboard #personalizacion #widgets #drag-drop #layouts #ux #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: Nuevo (basado en necesidades de UX avanzada) Compliance: PF-001 (XXX líneas)