CAMPUS-AI — Enterprise Educational Streaming Platform (Express + Preact + PostgreSQL)
Este proyecto no es un simple campus virtual; es una reingeniería completa de la experiencia educativa, diseñada para operar a escala institucional. Implementa los mismos principios arquitectónicos que permiten a plataformas como Coursera y Platzi gestionar miles de estudiantes simultáneamente: arquitectura monolítica optimizada, comunicación en tiempo real, procesamiento de pagos y personalización algorítmica con modelos de lenguaje (LLM).
🏗️ Backend Enterprise (Express + @vigilio/express-core)
Para manejar la complejidad de un catálogo educativo distribuido, perfiles multi-rol y evaluaciones en tiempo real, el backend se estructura como un ecosistema de servicios modulares utilizando Express 4 con el framework propietario @vigilio/express-core:
- Arquitectura Inspirada en NestJS: Un sistema de decoradores TypeScript (
@Controller,@Get,@Post,@Validator,@Pipe,@Injectable) que transforma Express en un framework enterprise con inyección de dependencias, middlewares declarativos y guards de autorización. - 20 Módulos de Dominio: Cada módulo es una unidad autónoma (schemas → entities → DTOs → controllers → services → APIs) que encapsula una responsabilidad de negocio: desde la gestión de cursos hasta la facturación electrónica con Niubiz.
- Code-First Schema Approach: Definición de esquemas con
@vigilio/valibotque sirven como Single Source of Truth — el mismo schema valida el body en el frontend (react-hook-form), en el controlador (@Validator) y define la estructura del modelo (Sequelize entity). - WebSocket Gateway (Socket.IO): Servidor de comunicación bidireccional en tiempo real para chat, notificaciones push y sincronización de estado entre clientes conectados simultáneamente.
🏗️ Ingeniería de Datos & Persistencia (PostgreSQL + Sequelize ORM)
La plataforma está diseñada para la integridad referencial y el rendimiento en consultas complejas utilizando una base de datos relacional robusta:
- ORM Tipado (Sequelize-TypeScript): Modelos definidos con decoradores TypeScript que garantizan type-safety end-to-end. Las 11 entidades del módulo
cursose relacionan a través de@BelongsTo,@HasMany,@BelongsToManyy@HasOne, formando un grafo relacional de más de 40 tablas. - Migraciones Versionadas: 56 archivos de migración secuenciales que permiten recrear, versionar y revertir el estado completo de la base de datos con un solo comando (
npm run db:migrate:fresh). - Soft Delete Empresarial: Todas las entidades críticas implementan
paranoid: true, garantizando que los registros eliminados sean recuperables y auditables sin pérdida de datos. - Índices Compuestos Únicos: Constraints como
unique_name_siglas_campaña_idprevienen duplicados a nivel de base de datos, no solo de aplicación.
🔐 Seguridad & Autenticación de Grado Enterprise
Un sistema de seguridad multicapa que protege tanto la API como las sesiones de usuario:
- Passport.js Dual Strategy: Autenticación local (usuario + contraseña con bcrypt) y JWT para protección stateless de endpoints, operando en paralelo con sesiones persistentes en PostgreSQL (
connect-session-sequelize). - Helmet CSP (Content Security Policy): Políticas de seguridad HTTP configuradas por directiva —
scriptSrc,connectSrc,frameSrc,imgSrc— que previenen XSS, clickjacking e inyección de contenido. - Sistema Anti-Brute Force: Campo
intentos_sessioncon bloqueo temporal porintentos_session_date, protegiendo contra ataques de fuerza bruta con estados progresivos (activo→bloqueado→bloqueo-definitivo). - HMAC Integrity Verification: Verificación criptográfica de integridad de datos sensibles con
VITE_HMAC_KEY. - Google reCAPTCHA v3: Integración en formularios críticos para distinguir tráfico humano de bots automatizados.
- Cookies Seguras en Producción:
secure: true,httpOnly: true,trust proxyhabilitado, con expiración de sesión a 3 días y limpieza automática cada hora.
👥 Sistema de Roles & Control de Acceso Granular
Una jerarquía de 5 niveles que gobierna el acceso a cada endpoint y vista de la plataforma:
| Rol | Alcance | Acceso |
|---|---|---|
🔴 super-admin |
Global | Control total: usuarios, empresa, facturación, configuración del sistema |
🟠 administracion |
Institucional | Gestión de empresa, usuarios, órdenes, facturas y notas |
🟡 academico |
Académico | CRUD de cursos, secciones, campañas, programas y multimedia |
🟢 docente |
Enseñanza | Clases, asistencia, actividades, evaluaciones y calificaciones |
🔵 estudiante |
Aprendizaje | Mis cursos, actividades, chat, pagos y perfil |
Los Guards actúan como middleware decorativos que interceptan la request antes de llegar al controller, validando el role del usuario autenticado contra los permisos requeridos del endpoint.
🚀 Stack de Rendimiento Extremo
| Capa | Tecnología | Rol |
|---|---|---|
| Server Framework | Express 4 + @vigilio/express-core |
API REST con decoradores NestJS-like |
| Frontend Runtime | Preact + @preact/signals |
UI reactiva ~3KB (vs React 42KB) |
| Router SPA | wouter-preact | Routing declarativo sin overhead |
| Data Fetching | @vigilio/preact-fetching |
React Query alternative con cache |
| Formularios | react-hook-form + @vigilio/valibot |
Validación isomórfica (client + server) |
| Base de Datos | PostgreSQL 16 + Sequelize-TypeScript | ORM tipado con migraciones |
| Real-Time | Socket.IO | WebSocket bidireccional |
| Styling | TailwindCSS 4 | Utility-first con Vite plugin |
| Bundler | Vite 7 + HMR | Build < 2s, Hot Module Replacement |
| Testing | Vitest | Test runner integrado con Vite |
| IA | Groq SDK + OpenAI | LLM de baja latencia |
| Pagos | Niubiz Gateway | Pasarela de pago Perú |
| wkhtmltopdf | Generación de documentos | |
| Push | web-push (VAPID) | Notificaciones nativas del navegador |
| Nodemailer | Transaccional + marketing |
💎 Características Técnicas a Detalle
1. Motor de Gestión Académica (Módulo Curso)
El núcleo funcional de la plataforma — un sistema completo de gestión de contenido educativo.
- Modelo Relacional Profundo: Un
Cursose compone deSecciones→Programas→ProgramaItems→ProgramaSubItems, permitiendo estructurar contenido con hasta 4 niveles de profundidad jerárquica. - Multi-Campaña: Cada curso pertenece a una
Campaña(período académico), permitiendo reutilizar la estructura curricular entre ciclos sin duplicar datos. - Multimedia Asociada: Entidad dedicada
CursoMultimediapara gestionar videos de presentación, imágenes de portada y recursos descargables de cada curso, con procesamiento de imágenes via Sharp. - Inscripción Relacional (N:M): Tabla intermedia
CursoUserque registra la relación entre estudiantes y cursos, con metadatos de inscripción (fecha, estado, progreso). - Slug SEO-Friendly: Cada curso genera automáticamente un
slugúnico para URLs limpias (/curso/inteligencia-artificial-2025).
2. Sistema de Evaluación y Calificación
Una plataforma completa de assessment educativo.
- Tipos de Actividad Configurables:
ActividadTypepermite definir categorías (examen, tarea, práctica, proyecto) conActividadTypeCursopara asignar tipos específicos por curso. - Motor de Preguntas: Cada
Actividadcontiene múltiplesPreguntas, y cada pregunta tiene múltiplesOpciones— soportando exámenes de opción múltiple, verdadero/falso y respuesta abierta. - Calificación por Estudiante:
ActividadUserregistra la relación estudiante-actividad con notas, fechas de entrega y estado, mientrasRespuestaUseralmacena cada respuesta individual para análisis posterior. - Cronómetro Integrado: Hook
useCronometropara exámenes con tiempo límite, con detección de inactividad (useInactiviy) para prevenir abandono.
3. Chat en Tiempo Real (Socket.IO)
Comunicación instantánea entre todos los actores de la plataforma.
- Arquitectura de Salas: Cada
Chatactúa como una sala Socket.IO conChatMembers(participantes permanentes) yChatUsers(participantes por invitación). - Confirmación de Lectura: Entidad
MessageSeenque registra cuándo cada participante leyó cada mensaje, permitiendo el icono de "doble check" tipo WhatsApp. - Context de Socket:
socket.context.tsxen el frontend mantiene una conexión WebSocket persistente durante toda la sesión del usuario, reconectando automáticamente en caso de desconexión.
4. Pasarela de Pagos & Facturación Electrónica
Un flujo financiero completo desde la selección del curso hasta la emisión de comprobante.
- Tarifas Dinámicas: Cada curso puede tener múltiples
Tarifas(precio regular, early bird, corporativo) conTarifaStudentpara precios personalizados por estudiante. - Sistema de Cupones:
Couponcon validaciones de uso, fecha de expiración y porcentaje/monto fijo de descuento. - Integración Niubiz: Pasarela de pago líder en Perú, con tokenización de tarjetas y procesamiento seguro PCI-DSS.
- Facturación Electrónica SUNAT: Generación de
Invoice(facturas/boletas) yNote(notas de crédito/débito) integradas con el sistema de facturación electrónica, con cálculo automático de IGV configurable víaVITE_IGV. - Generación de PDFs: Comprobantes renderizados con
wkhtmltopdfpara descarga e impresión.
5. Inteligencia Artificial Integrada
Potenciando la experiencia educativa con modelos de lenguaje de última generación.
- Groq SDK: Integración con modelos LLM de ultra-baja latencia (respuestas en <500ms) para asistencia académica, generación de contenido y retroalimentación automatizada.
- OpenAI Compatible: SDK de OpenAI como fallback, permitiendo intercambiar modelos según costo/latencia/calidad sin cambios en la interfaz.
- Casos de Uso: Generación automática de preguntas de examen, resúmenes de contenido, asistente virtual para estudiantes y análisis de respuestas abiertas.
6. Notificaciones Push Nativas (Web Push VAPID)
Sistema de engagement que mantiene a los usuarios informados sin depender de la app abierta.
- Protocolo VAPID: Claves pública/privada configuradas para envío seguro de notificaciones sin intermediarios.
- Subscripción por Usuario: Cada
Useralmacena susubscriptionpush con flagenabled_notifications_webpushpara opt-in/opt-out. - PWA Ready:
vite-plugin-pwahabilitado para instalación como aplicación nativa con soporte offline y notificaciones en segundo plano.
📁 Arquitectura de Módulos (20 Servicios)
Cada módulo sigue el patrón Schema-Driven Architecture con la siguiente estructura interna:
servicio/
├── schemas/ → Single Source of Truth (validación con valibot)
├── entities/ → Modelos ORM (Sequelize-TypeScript decorators)
├── dtos/ → Data Transfer Objects (derivados del schema)
├── controllers/ → Endpoints REST (@Controller, @Get, @Post, @Validator)
├── services/ → Lógica de negocio (inyección de dependencias)
├── apis/ → Hooks frontend (useQuery, useMutation)
├── components/ → UI específica del módulo (Preact + Signals)
├── libs/ → Utilidades internas (client/ y server/ separados)
├── guards/ → Protección por roles
├── middlewares/ → Interceptores de request
├── strategies/ → Passport.js strategies
├── sockets/ → WebSocket controllers (Socket.IO)
├── hooks/ → Hooks frontend específicos
├── seeders/ → Datos iniciales
└── types/ → TypeScript types
Mapa de Dependencias entre Módulos
┌─────────────────────────────────────────────────────────┐
│ 🔐 AUTH (Passport) │
│ local + JWT strategies │
└──────────────────────┬──────────────────────────────────┘
│
┌──────────────────────▼──────────────────────────────────┐
│ 👥 USER (Core Entity) │
│ 5 roles · photos · subscriptions · soft-delete │
└───┬────────┬────────┬────────┬────────┬────────┬────────┘
│ │ │ │ │ │
▼ ▼ ▼ ▼ ▼ ▼
┌───────┐┌───────┐┌───────┐┌───────┐┌───────┐┌───────┐
│ CURSO ││ CHAT ││PAYMENT││EMPRESA││NOTIF. ││EMAIL │
│11 ent.││5 ent. ││4 ent. ││5 ent. ││2 ent. ││2 ent. │
└───┬───┘└───────┘└───┬───┘└───────┘└───────┘└───────┘
│ │
▼ ▼
┌───────┐ ┌───────────┐
│ CLASE │ │FACTURACION│
│3 ent. │ │ 3 ent. │
└───┬───┘ └───────────┘
│
▼
┌──────────┐
│ACTIVIDAD │
│ 7 ent. │
└──────────┘
🖥️ Frontend — Arquitectura SPA Multi-Panel
La interfaz se divide en 3 experiencias de usuario completamente diferentes:
| Panel | Ruta | Audiencia | Características |
|---|---|---|---|
| 🌐 Web Pública | / |
Visitantes | Landing, catálogo de cursos, página "Nosotros" |
| 🎓 Campus | /campus/* |
Estudiantes | Dashboard, mis cursos, actividades, horario (react-big-calendar), biblioteca, buzón, pagos, perfil, programas |
| 🔧 Interno | /interno/* |
Admin/Docentes | Dashboard con Chart.js, CRUD de cursos completo, gestión de estudiantes, novedades (TinyMCE/Quill), cupones, órdenes, facturación, configuración |
14 Hooks Reutilizables
| Hook | Propósito |
|---|---|
useSocket |
Conexión WebSocket persistente con auto-reconnect |
useSSE |
Server-Sent Events para actualizaciones unidireccionales |
useCronometro |
Cronómetro de exámenes con precisión de milisegundos |
useTemporizador |
Countdown timer para deadlines de actividades |
useInactiviy |
Detección de inactividad (cierre de sesión automático) |
useIntersectionObserver |
Lazy loading de contenido y scroll infinito |
useDropdown |
Lógica de menús con accesibilidad |
useClickOutside |
Cierre de modales al hacer clic fuera |
useCopyToClipboard |
Copiar códigos de cupón al portapapeles |
useMediaQuery |
Responsive breakpoints reactivos |
useDebounceOnBlur |
Búsqueda optimizada con debounce |
usePressTimeOut |
Long-press para acciones contextuales (mobile) |
useTypingEffect |
Efecto typewriter para la integración con IA |
useVisible |
Toggle de visibilidad con animación |
4 Contexts Globales
| Context | Responsabilidad |
|---|---|
auth.context |
Usuario autenticado, rol activo, token JWT |
campus.context |
Estado completo del campus (~13KB de lógica) — cursos activos, secciones, progreso |
global_fetch.context |
Configuración base de fetching (headers, interceptors, base URL) |
socket.context |
Instancia Socket.IO compartida con lifecycle management |
~95 Componentes UI Reutilizables
src/components/
├── extras/ → 47 componentes (cards, badges, loaders, tooltips, etc.)
├── form/ → 14 componentes (inputs, selects, file uploads, rich text)
├── table/ → 16 componentes (sorting, filtering, pagination, export)
├── icons/ → 10 componentes SVG optimizados
└── web_form/ → 8 componentes de formularios públicos (contacto, registro)
🛡️ Calidad de Software & DevOps
- Testing con Vitest: Suite de pruebas integrada con el mismo bundler de desarrollo (Vite), eliminando discrepancias entre entorno de test y producción.
- Linting con Biome: Reemplazo de ESLint + Prettier en un solo binario Rust de alto rendimiento — formateo y linting en <100ms para todo el codebase.
- 56 Migraciones de Base de Datos: Historial completo de evolución del esquema, permitiendo rollback a cualquier punto (
npm run db:rollback) y recreación desde cero (npm run db:migrate:fresh). - Docker Multi-Stage:
Dockerfileoptimizado condocker-compose.yml(desarrollo) ydocker-compose.production.yml(producción) para despliegue consistente. - PM2 Process Manager: Gestión de procesos Node.js en producción con auto-restart, monitoreo de memoria y clustering.
- Pino Logger: Logging estructurado en JSON de alto rendimiento (~30x más rápido que Winston), con
pino-prettypara desarrollo legible. - Morgan HTTP Logger: Request logging integrado con Pino para trazabilidad completa de cada petición HTTP.
**CAMPUS-AI** — No es solo un campus virtual. Es una plataforma educativa enterprise construida con TypeScript de extremo a extremo, donde 20 módulos de dominio, 40+ tablas relacionales, comunicación en tiempo real, pagos con Niubiz, facturación SUNAT e inteligencia artificial convergen en un monolito optimizado para máxima productividad y escalabilidad institucional.
