# Math Platform - Frontend Frontend de la plataforma de estudio de matemáticas con Next.js 14, TypeScript, shadcn/ui y KaTeX. ## Stack Tecnológico - **Framework**: Next.js 14 (App Router) - **Lenguaje**: TypeScript 5.4 - **UI Components**: shadcn/ui + Radix UI - **Styling**: TailwindCSS - **Math Rendering**: KaTeX + react-katex - **State Management**: Zustand - **HTTP Client**: Axios - **Validation**: Zod + react-hook-form ## Estructura del Proyecto ``` frontend/ ├── src/ │ ├── app/ # Next.js App Router │ │ ├── layout.tsx # Layout raíz │ │ ├── page.tsx # Home page │ │ └── globals.css # Estilos globales │ ├── components/ # Componentes React │ │ ├── ui/ # shadcn/ui components │ │ └── math/ # Componentes matemáticos (KaTeX) │ ├── lib/ # Utilidades │ │ ├── api.ts # Cliente API │ │ ├── utils.ts # Utilidades generales │ │ ├── validators.ts # Esquemas Zod │ │ └── constants.ts # Constantes de la app │ ├── store/ # Zustand stores │ │ ├── useAuthStore.ts # Auth state │ │ └── useModuleStore.ts # Module state │ ├── hooks/ # Custom React hooks │ │ └── useAuth.ts # Auth hook │ └── types/ # TypeScript definitions │ └── index.ts # Tipos globales ├── public/ # Archivos estáticos ├── package.json # Dependencias ├── tsconfig.json # Config TypeScript ├── tailwind.config.js # Config TailwindCSS ├── next.config.js # Config Next.js └── .env.local # Variables de entorno ``` ## Instalación 1. **Instalar dependencias**: ```bash npm install ``` 2. **Configurar variables de entorno**: ```bash cp .env.local.example .env.local ``` Edita `.env.local` con tus configuraciones: ```env NEXT_PUBLIC_API_URL=http://localhost:3001 NEXT_PUBLIC_APP_NAME=Math Platform ``` 3. **Ejecutar en desarrollo**: ```bash npm run dev ``` La aplicación estará disponible en [http://localhost:3000](http://localhost:3000) ## Comandos Disponibles ```bash npm run dev # Servidor de desarrollo npm run build # Build de producción npm run start # Servidor de producción npm run lint # Linting con ESLint npm run type-check # Verificación de tipos npm run format # Formateo con Prettier ``` ## Componentes Disponibles ### UI Components (shadcn/ui) - Button - Card - Input - Label - Dialog - Dropdown Menu - Select - Tabs - Toast - Progress - Avatar - Separator - Tooltip ### Math Components - `MathFormula` - Componente base para renderizar fórmulas LaTeX - `MathBlock` - Fórmulas en modo bloque (display) - `MathInline` - Fórmulas en línea - `MathText` - Texto mixto con fórmulas LaTeX ### Uso de Componentes Matemáticos ```tsx import { MathBlock, MathInline, MathText } from '@/components/math/MathFormula'; // Fórmula en bloque // Fórmula en línea // Texto mixto ``` ## State Management ### Auth Store ```typescript import { useAuthStore } from '@/store/useAuthStore'; const { user, isAuthenticated, login, logout } = useAuthStore(); ``` ### Module Store ```typescript import { useModuleStore } from '@/store/useModuleStore'; const { modules, currentModule, setModules } = useModuleStore(); ``` ## Cliente API ```typescript import { api, apiEndpoints } from '@/lib/api'; // GET request const modules = await api.get(apiEndpoints.modules.list); // POST request const result = await api.post(apiEndpoints.auth.login, { email, password }); ``` ## Validación de Formularios ```typescript import { loginSchema } from '@/lib/validators'; import { useForm } from 'react-hook-form'; import { zodResolver } from '@hookform/resolvers/zod'; const form = useForm({ resolver: zodResolver(loginSchema), defaultValues: { email: '', password: '', }, }); ``` ## Estilos ### TailwindCSS Config El proyecto usa TailwindCSS con configuración personalizada para colores y animaciones. ### CSS Personalizado Estilos adicionales en `src/app/globals.css`: - Animaciones personalizadas - Estilos de scroll - Clases de utilidad - Estilos de impresión - Accesibilidad ## Tipos TypeScript Todos los tipos están definidos en `src/types/index.ts`: - User, Module, Exercise - Progress, Achievement, Ranking - API Response types - Form types ## Rutas ```typescript import { ROUTES } from '@/lib/constants'; ROUTES.HOME // '/' ROUTES.LOGIN // '/auth/login' ROUTES.DASHBOARD // '/dashboard' ROUTES.MODULES // '/modules' ROUTES.EXERCISES // '/exercises' ROUTES.RANKING // '/ranking' ``` ## Logros (Achievements) Los logros están predefinidos en `src/lib/constants.ts`: - **Ejercicios**: Primer Paso, En Marcha, Matemático Dedicado - **Módulos**: Primera Conquista, Maestro del Álgebra - **Rachas**: En Racha, Semana Perfecta - **Ranking**: Top 10, Podium, El Campeón - **Especiales**: Madrugador, Búho Nocturno ## Build de Producción ```bash # Crear build optimizado npm run build # Analizar bundle npm run analyze # Ejecutar producción npm start ``` ## Docker Para usar con Docker, ver el archivo `Dockerfile.frontend` en el directorio `/docker` del proyecto principal. ## Variables de Entorno | Variable | Descripción | Default | |----------|-------------|---------| | `NEXT_PUBLIC_API_URL` | URL de la API backend | `http://localhost:3001` | | `NEXT_PUBLIC_APP_NAME` | Nombre de la aplicación | `Math Platform` | | `NEXT_PUBLIC_API_TIMEOUT` | Timeout de API (ms) | `30000` | ## Scripts de Utilidad ```bash # Type checking npm run type-check # Linting npm run lint # Formateo npm run format # Análisis de bundle npm run analyze ``` ## Convenciones de Código - **TypeScript**: Strict mode enabled - **Componentes**: Functional con hooks - **Estilos**: TailwindCSS utility-first - **Nomenclatura**: camelCase para variables, PascalCase para componentes - **Imports**: Absolute imports con `@/` alias ## Soporte de Navegadores - Chrome (última versión) - Firefox (última versión) - Safari (última versión) - Edge (última versión) ## Licencia Proprietary - Math Platform Team