RAP-Rec está construido sobre un conjunto de bibliotecas de código abierto ampliamente adoptadas en el ecosistema JavaScript. Cada dependencia cumple un rol específico dentro del flujo de evaluación VAP y fue elegida por su estabilidad, tamaño de comunidad y compatibilidad con la arquitectura de cliente puro.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/mafab9125/PDG_SISTEMA_RECOMENDADOR/llms.txt
Use this file to discover all available pages before exploring further.
Dependencias de producción
El siguiente bloque muestra el contenido exacto del campodependencies en package.json:
Dependencias de desarrollo
Tecnologías principales
React 19 y React DOM 19
React 19 y React DOM 19
Framework de interfaz de usuario que gestiona el árbol de componentes y el ciclo de vida del estado. RAP-Rec usa los hooks
useState y useEffect en App.tsx para implementar la máquina de estados de 7 pasos. react-dom es el paquete de renderización que monta la aplicación en index.html desde src/main.tsx.Vite 6
Vite 6
Herramienta de compilación y servidor de desarrollo. Vite transforma los módulos ES nativos del navegador para obtener tiempos de arranque casi instantáneos. En producción, genera un bundle optimizado con
vite build. El servidor de desarrollo se configura en el script dev con el puerto fijo 3000 y escucha en todas las interfaces (0.0.0.0).TypeScript 5.8
TypeScript 5.8
Superset tipado de JavaScript. Todas las interfaces del dominio (
Course, Competency, UserProfile, VAPEvaluation, AppState) están definidas en src/types.ts. El script lint ejecuta tsc --noEmit para verificar los tipos sin emitir archivos. TypeScript se usa en modo estricto a través de la configuración de Vite.Estilos y animaciones
Tailwind CSS 4 + @tailwindcss/vite
Tailwind CSS 4 + @tailwindcss/vite
Framework de CSS utilitario integrado directamente en el pipeline de Vite mediante el plugin
@tailwindcss/vite. El sitio define colores de marca Icesi como tokens personalizados (icesi-blue, icesi-orange, icesi-green, icesi-red, icesi-purple) que se usan en toda la interfaz para mantener la identidad visual de la Universidad Icesi.Framer Motion 12 (motion/react)
Framer Motion 12 (motion/react)
Biblioteca de animaciones declarativas para React. En
App.tsx, cada paso de la máquina de estados se envuelve en un componente <motion.div> con transiciones de entrada y salida (opacity, y, x). El componente <AnimatePresence> gestiona las transiciones entre pasos para evitar saltos bruscos de contenido. La barra de progreso usa motion.div con animate={{ width }} para animar el porcentaje completado.tailwind-merge y clsx
tailwind-merge y clsx
Utilidades para construir strings de clases CSS condicionales de forma segura.
clsx permite combinar clases con lógica booleana; tailwind-merge resuelve conflictos cuando dos clases de Tailwind afectan la misma propiedad CSS (por ejemplo, bg-blue-500 y bg-red-500). Ambas se usan conjuntamente en los componentes para aplicar estilos condicionales según el estado activo de cada elemento.Visualización de datos
Chart.js 4 + react-chartjs-2
Chart.js 4 + react-chartjs-2
Chart.js es la biblioteca de gráficos subyacente que renderiza en un elemento
<canvas>. react-chartjs-2 provee los componentes <Radar> y <Doughnut> que se usan directamente en el paso 7. El gráfico Radar muestra los 5 puntajes VAP del aspirante en escala de 0 a 5. El gráfico Doughnut se usa en la vista del director para visualizar la distribución de brechas por competencia.Los módulos de Chart.js se registran explícitamente en App.tsx:Inteligencia artificial
@google/genai — SDK principal de Gemini
@google/genai — SDK principal de Gemini
SDK oficial de Google para llamar a la API de Gemini desde JavaScript o TypeScript. En Las tres funciones del servicio (
src/services/gemini.ts, se instancia con:extractProfile, evaluateVAP, getAIRecommendation) usan ai.models.generateContent() con el parámetro responseMimeType: "application/json" para forzar respuestas estructuradas que se pueden parsear directamente.Modelo: gemini-3-flash-preview
Modelo: gemini-3-flash-preview
El modelo usado en las tres funciones del servicio de IA es La variante
"gemini-3-flash-preview", definido como constante en la cima de src/services/gemini.ts:flash prioriza velocidad y costo reducido frente a las variantes pro, lo que es adecuado para el caso de uso de RAP-Rec donde se necesitan múltiples llamadas en secuencia durante una misma sesión.Procesamiento de documentos
pdfjs-dist 5 — Extracción de texto PDF
pdfjs-dist 5 — Extracción de texto PDF
Biblioteca oficial de Mozilla para parsear y renderizar PDFs en el navegador. RAP-Rec la importa de forma dinámica (El texto se extrae página por página mediante
await import('pdfjs-dist')) para evitar que aumente el tamaño del bundle principal. El worker de PDF.js se carga desde CDN:page.getTextContent() y se concatena antes de enviarse a Gemini.mammoth — Extracción de texto DOCX
mammoth — Extracción de texto DOCX
Convierte documentos
.docx (Office Open XML) a texto plano. RAP-Rec usa exclusivamente mammoth.extractRawText(), que descarta el formato visual y devuelve solo el contenido textual. Esto es suficiente para que Gemini pueda estructurar el perfil del aspirante a partir del CV.Iconografía
Lucide React
Lucide React
Biblioteca de iconos SVG como componentes React. RAP-Rec usa iconos de Lucide en toda la interfaz para señalar acciones y estados:
Upload, FileText, BarChart3, BrainCircuit, CheckCircle2, AlertCircle, GraduationCap, Calendar, Clock, DollarSign, entre otros. Los iconos se importan individualmente para que el compilador pueda eliminar los no utilizados (tree-shaking).Referencias relacionadas
Arquitectura
Visión general de la SPA, estructura de directorios e interfaces TypeScript del dominio.
Configuración
Variables de entorno, puerto de desarrollo y constantes del servicio de IA.
Integración con Gemini
Detalles del SDK, modelo, reintentos y parsing de respuestas JSON.
Extracción de perfil
Prompt de extracción, temperatura 0.1 y sanitización del objeto
UserProfile.