# GAMILIT Frontend

Frontend para la plataforma educativa gamificada GAMILIT.

## Stack Técnico

- **Framework:** React 19.2.0
- **Build Tool:** Vite 7.1.10
- **Language:** TypeScript 5.9.3 (strict mode)
- **Styling:** Tailwind CSS 4.1.14
- **Router:** React Router DOM 7.9.4
- **State Management:** Zustand 5.0.8
- **Forms:** React Hook Form 7.65.0 + Zod 4.1.12
- **HTTP Client:** Axios 1.12.2
- **WebSocket:** Socket.io Client 4.8.1
- **Icons:** Lucide React 0.545.0
- **Animations:** Framer Motion 12.23.24
- **Charts:** Recharts 3.3.0
- **Testing:** Vitest + React Testing Library
- **Storybook:** 7+ (configurado)

## Arquitectura

Feature-Sliced Design (FSD)

```
src/
├── shared/                 # Código compartido (68 hooks, components reutilizables)
├── services/               # API clients (11 servicios), WebSocket
├── app/                    # Providers (AuthContext, layouts, routing)
│   ├── providers/          # AuthContext, ThemeProvider
│   ├── layouts/            # Layouts de aplicación
│   └── routes/             # Configuración de rutas (18 rutas)
├── features/               # Features de negocio (10 features)
│   ├── auth/               # Autenticación (16 componentes, 5 hooks)
│   ├── gamification/       # Gamificación (74 componentes, 15 hooks)
│   └── mechanics/          # Mecánicas educativas (33 tipos implementados)
└── apps/                   # Aplicaciones (student, teacher, admin)
    └── student/pages/      # 28 páginas implementadas
```

## Rutas Implementadas (React Router v7.9.4)

### Públicas (5 rutas)
- `/login` - Login de usuarios
- `/register` - Registro de usuarios
- `/forgot-password` - Recuperación de contraseña
- `/reset-password` - Reset de contraseña
- `/verify-email` - Verificación de email

### Protegidas (13 rutas)
- `/` - Redirect a dashboard
- `/dashboard` - Dashboard principal del estudiante
- `/progress` - Progreso del estudiante
- `/modules/:moduleId` - Detalle de módulo educativo
- `/exercises/:exerciseId` - Ejercicio individual
- `/achievements` - Logros del estudiante
- `/leaderboard` - Tabla de clasificación
- `/missions` - Misiones diarias/semanales
- `/profile` - Perfil del usuario
- `/settings` - Configuración
- `/friends` - Lista de amigos
- `/shop` - Tienda de ML Coins
- `/inventory` - Inventario de powerups
- `/guilds` - Equipos/Gremios

## Sistema de Autenticación

Implementado en `src/app/providers/AuthContext.tsx`:

- Login/Logout con JWT
- Registro de usuarios
- Recuperación y reset de contraseña
- Verificación de email
- Protected routes con componente `ProtectedRoute`
- Persistencia de sesión en localStorage
- Auto-refresh de token

## API Configuration

### Definición de Rutas

**REGLA OBLIGATORIA:** TODAS las rutas API deben estar definidas en:
`src/services/api/apiConfig.ts`

Este archivo es el ÚNICO source of truth para rutas de API. NUNCA hardcodees rutas fuera de apiConfig.ts.

### Uso Correcto

✅ **CORRECTO:**
```typescript
import { API_ENDPOINTS } from '@/services/api/apiConfig';

// Usar endpoints centralizados
await apiClient.get(API_ENDPOINTS.admin.dashboard.alerts);
await axiosInstance.get(API_ENDPOINTS.teacher.classrooms);
await apiClient.post(API_ENDPOINTS.auth.login, credentials);
```

❌ **INCORRECTO:**
```typescript
// Hardcoded routes - PROHIBIDO
await apiClient.get('/v1/admin/dashboard/alerts');
await axiosInstance.get('/v1/teacher/classrooms');
await apiClient.post('/v1/auth/login', credentials);

// BASE_URL hardcoded - PROHIBIDO
const BASE_URL = '/v1/teacher';
await apiClient.get(`${BASE_URL}/classrooms`);
```

### Agregar Nueva Ruta

1. Agregar a `apiConfig.ts`:
```typescript
export const API_ENDPOINTS = {
  admin: {
    newFeature: '/v1/admin/new-feature',
    newFeatureDetail: (id: string) => `/v1/admin/new-feature/${id}`,
  },
};
```

2. Usar en código:
```typescript
import { API_ENDPOINTS } from '@/services/api/apiConfig';

// Simple endpoint
await apiClient.get(API_ENDPOINTS.admin.newFeature);

// Endpoint con parámetros
await apiClient.get(API_ENDPOINTS.admin.newFeatureDetail('123'));
```

### Validación Automática

El linter detectará automáticamente rutas hardcodeadas:

```bash
npm run lint
# Error: API routes must be imported from apiConfig.ts
# Do not hardcode routes starting with /v1/
```

**Beneficios:**
- Cambio centralizado de rutas
- Autocomplete y type safety
- Detección automática de errores
- Fácil refactorización
- Documentación implícita de todos los endpoints

## Scripts

```bash
npm run dev         # Desarrollo
npm run build       # Build producción
npm run preview     # Preview build
npm test            # Tests
npm run test:ui     # Tests con UI
npm run lint        # Linter
npm run format      # Formatear
npm run storybook   # Storybook dev
```

## Path Aliases

- `@/*` → `src/*`
- `@shared/*` → `src/shared/*`
- `@components/*` → `src/shared/components/*`
- `@hooks/*` → `src/shared/hooks/*`
- `@utils/*` → `src/shared/utils/*`
- `@types/*` → `src/shared/types/*`
- `@services/*` → `src/services/*`
- `@app/*` → `src/app/*`
- `@features/*` → `src/features/*`
- `@pages/*` → `src/pages/*`

## Features Implementadas

1. **Autenticación** (auth) - 16 componentes, 5 hooks, 3 stores
2. **Gamificación** (gamification) - 74 componentes, 15 hooks, 11 stores
3. **Mecánicas Educativas** (mechanics) - 33 tipos de ejercicios
4. **Portal de Estudiante** - 28 páginas completas
5. **Sistema de Progreso** - Tracking y analytics
6. **Social Features** - Friends, guilds, classrooms

## Mecánicas Educativas (33 tipos)

El sistema incluye 33 tipos diferentes de ejercicios implementados en `src/features/mechanics/`:

- **Módulo 1 (Literal):** Crucigrama, Línea de Tiempo, Sopa de Letras, Mapa Conceptual, Emparejamiento
- **Módulo 2 (Inferencial):** Puzzle Contexto, Rueda Inferencias, Construcción Hipótesis, Detective Pistas, Análisis Fotografías
- **Módulo 3 (Crítica):** Tribunal Opiniones, Matriz Perspectivas, Análisis Fuentes, Debate Deliberativo, Podcast Argumentativo
- **Módulo 4 (Digital):** Quiz TikTok, Análisis Memes, Fact-Checking, Navegación Crítica, Infográfico Interactivo
- **Módulo 5 (Creativo):** Ensayo Argumentativo, Video Carta, Call to Action

## Testing

- **Tests unitarios:** 8 archivos
- **Coverage actual:** ~13% (necesita mejora urgente)
- **Coverage objetivo:** ≥70%
- **Gap:** -57 puntos

**Tests implementados:**
- EmailVerificationPage.test.tsx
- LoginPage.test.tsx
- RegisterPage.test.tsx
- UserManagementPage.test.tsx
- DeactivateUserModal.test.tsx
- authStore.test.ts
- LiveLeaderboard.test.tsx
- useSanitizedHTML.test.ts

## Guía de Estilo

- Mobile-first responsive design
- Dark mode support (configurado)
- Accesibilidad WCAG 2.1 AA
- Gamificación integrada en toda la UI
- Animaciones con Framer Motion

## Documentación Adicional

- **Inventario completo:** `docs/90-transversal/inventarios/FRONTEND_INVENTORY.yml`
- **Correcciones aplicadas:** Ver sección `corrections_2025_11_09` en inventario
- **Arquitectura de rutas:** Ver sección `routing` en inventario (18 rutas documentadas)
- **Usuarios de prueba:** `USUARIOS-PRUEBA-2025-11-09.md`
