Learning Management System — Nivel Avanzado · Next.js 15 + NestJS
Un ecosistema LMS propio de la editorial, desarrollado desde cero con stack TypeScript end-to-end, diseñado para escalar del nivel avanzado al nivel complejo sin reescritura.
Se construye un LMS multitenant con panel central para la editorial y sub-paneles por institución. Los colegios acceden al contenido digital de las series contratadas —mini-juegos React, evaluaciones y materiales por unidad— con sistema completo de gestión para docentes y estudiantes.
Panel maestro: colegios, series, licencias, contenido y analíticas globales cross-institución.
Subdominio propio. El admin gestiona grados, paralelos, docentes y estudiantes de forma aislada.
Mini-juegos interactivos, evaluaciones programables, seguimiento de progreso y mensajería en tiempo real.
Stack definitivo: Frontend en Next.js 15 (React, App Router, RSC). Backend en NestJS + TypeORM + PostgreSQL. Todo TypeScript — los tipos de la API se comparten entre frontend y backend vía un Nx Monorepo. La decisión de NestJS no es solo por continuidad: es la arquitectura que permite migrar al nivel complejo (microservicios + Kafka) sin reescribir, solo extrayendo módulos.
Cada decisión técnica está justificada por la escalabilidad futura, no solo por el presente.
El monorepo Nx no es solo organización de código — es la decisión que hace posible compartir interfaces TypeScript entre Next.js y NestJS, y que permite extraer módulos NestJS como microservicios independientes en el nivel complejo sin cambiar su código interno.
EvaluationDto, el frontend Next.js falla en compilación antes de llegar a
producción. Cero errores de integración API.
Por qué NestJS y no Express u otro framework Node: NestJS tiene un sistema de
módulos con inyección de dependencias que replica exactamente la arquitectura de microservicios —
solo que todo corre en el mismo proceso. Cuando llegue el momento de separar un módulo,
@nestjs/microservices permite cambiar el transporte de in-process a Kafka con
un cambio de configuración. Express no tiene ese concepto — hay que reescribir la comunicación desde
cero.
Todo lo marcado con ✓ está incluido en el precio. Las exclusiones están documentadas explícitamente.
| Funcionalidad | Estado | Detalle |
|---|---|---|
| Gestión de usuarios, roles e instituciones | ||
| Panel Super Admin de la editorial (multitenant) | ✓ | Gestión de colegios, series, licencias y analíticas globales |
| Panel Admin por colegio — subdominio propio | ✓ | Cada colegio accede a su espacio aislado. Sin visibilidad cruzada |
| Panel del docente | ✓ | Cursos asignados, evaluaciones, progreso de estudiantes, mensajería |
| Panel del estudiante | ✓ | Contenido de su grado/serie, evaluaciones y mensajes del docente |
| Multi-paralelo por grado (3°A, 3°B, 3°C) | ✓ | Sin límite de paralelos. Cada uno es un curso independiente |
| Docente asignado a múltiples cursos y grados | ✓ | Un docente puede tener 4°A, 4°B y 5°A simultáneamente |
| Carga masiva de estudiantes por Excel/CSV | ✓ | Plantilla descargable. El sistema crea las cuentas automáticamente |
| Autenticación JWT + guards por rol (NestJS Passport) | ✓ | Tokens con refresh. Cada rol ve solo lo que le corresponde |
| Gestión de licencias con vencimiento automático | ✓ | Fecha inicio/fin. Acceso bloqueado automáticamente al vencer |
| Contenido y recursos didácticos | ||
| Mini-juegos interactivos en React + Canvas API (6 tipos base) | ✓ | Quiz imagen · Clasificación · Audio-card · Drag&drop · Completar · Identificación |
| CMS de contenido para la editorial (sin código) | ✓ | La editorial carga y organiza el contenido de cada unidad desde un panel |
| Docente agrega URLs externas (Wordwall, Kahoot, Quizlet) | ✓ | Link visible como tarjeta en el dashboard del estudiante |
| Docente incrusta iframes (H5P, Educaplay, LearningApps) | ✓ | Embed dentro del LMS con whitelist de dominios seguros |
| PWA — instalable en tablet y celular sin app store | ✓ | Instalable en Android e iOS Safari. Push web incluido. Offline parcial |
| Evaluaciones y control docente | ||
| Evaluaciones predefinidas por la editorial | ✓ | Disponibles por defecto en cada unidad. La editorial las carga desde el CMS |
| Docente habilita / deshabilita evaluaciones | ✓ | Control total por curso sobre qué contenido es visible |
| Programación con fecha y hora de cierre automático | ✓ | BullMQ cierra la evaluación automáticamente al llegar la fecha |
| Docente personaliza evaluaciones de la editorial | ✓ | Copia editable privada. El original de la editorial no se altera |
| Docente crea evaluaciones propias desde cero | ✓ | Banco de preguntas del docente. Tipos: opción múltiple, V/F, completar, abierta |
| Corrección de respuestas abiertas (manual por el docente) | ✓ | El docente revisa y califica. El estudiante ve la nota y el comentario |
| Límite de tiempo y orden aleatorio de preguntas | ✓ | Anti-trampa básico: cada estudiante ve un orden diferente |
| Comunicación y retroalimentación | ||
| Mensajería docente ↔ estudiante en tiempo real | ✓ | WebSocket vía @nestjs/websockets + Socket.io. Tiempo real sin recargar |
| Retroalimentación escrita del docente por evaluación | ✓ | Comentario por actividad. El estudiante lo ve en su perfil |
| Notificaciones por email (Resend + React Email) | ✓ | Nueva evaluación, vencimiento próximo, retroalimentación recibida |
| Notificaciones push web (PWA — VAPID) | ✓ | Push en el navegador del celular o tablet sin app nativa |
| Analítica y reportes | ||
| Dashboard del docente: progreso de su curso | ✓ | Notas, completitud por actividad, estudiantes inactivos. Chart.js |
| Dashboard institucional: comparativo grados y paralelos | ✓ | El admin del colegio ve el desempeño general de su institución |
| Dashboard global de la editorial | ✓ | Uso por colegio, serie más activa, licencias próximas a vencer |
| Eventos de uso a ClickHouse (analítica OLAP) | ✓ | Cada acción del estudiante genera un evento. Sin afectar PostgreSQL |
| Exportación de reportes en PDF y Excel | ✓ | El docente exporta notas de su curso. El admin exporta reportes institucionales |
| No incluido en este nivel | ||
| Retroalimentación en audio o video del docente | ✗ | Módulo adicional — 2–3 semanas |
| Gamificación: puntos, insignias y logros | ✗ | Módulo adicional — 6–8 semanas |
| App móvil nativa (Flutter o React Native) | ✗ | Propuesta separada. La PWA cubre el 80% del uso móvil |
| Videoconferencia / aula virtual integrada | ✗ | Se puede vincular Google Meet o Zoom sin costo. Integración nativa = nivel complejo |
| IA generativa (corrección automática, RAG, rutas adaptativas) | ✗ | Nivel complejo — requiere pgvector + LangChain + LLM API |
| Portal de padres de familia | ✗ | Módulo adicional — requiere definición de alcance |
10 módulos concretos, cada uno con pruebas funcionales y documentación antes de pasar al siguiente.
Configuración del workspace Nx con Next.js + NestJS. Librerías compartidas de tipos (libs/shared). GitHub Actions para tests automáticos en cada PR y deploy a staging. Entornos desarrollo, staging y producción configurados.
NestJS Passport + JWT con refresh tokens. Guards por rol (editorial / institución / docente / estudiante). Restablecimiento de contraseña. Primera sesión con cambio obligatorio. Middleware de tenant para aislar los datos de cada institución.
Gestión de instituciones: crear, editar, suspender, asignar series y licencias. Creación de cuentas de admin de colegios. Dashboard analítico global. Reportes cross-institución. CMS para cargar el contenido de cada unidad por serie y grado.
Creación de grados y paralelos. Carga masiva de estudiantes (Excel/CSV + plantilla). Matrícula de docentes y asignación a cursos. Dashboard institucional con comparativo entre grados. Exportación de reportes PDF/Excel.
Vista de series, unidades y actividades disponibles. Tarjetas de contenido (mini-juegos, evaluaciones, enlaces, embeds). Progreso personal por unidad. Notificaciones de nuevas evaluaciones y retroalimentación del docente.
Componentes React reutilizables: quiz opción múltiple con imagen, clasificación por categorías, audio-card (escucha y selecciona), drag & drop, completar texto e identificación de imagen. Retroalimentación visual/sonora, registro de resultados en la API, navegación entre preguntas.
Vista de todos sus cursos. Habilitar/deshabilitar actividades. Programación de evaluaciones con fecha de cierre automático (BullMQ). Creación de evaluaciones propias (banco de preguntas). Personalización de evaluaciones de la editorial. Calificación de respuestas abiertas. Dashboard de progreso por estudiante y por curso.
Chat docente ↔ estudiante vía WebSocket (@nestjs/websockets + Socket.io). Retroalimentación escrita por evaluación. Historial persistido en PostgreSQL. Notificaciones in-app con badge. Email con Resend + React Email. Push web VAPID para la PWA.
Pipeline de eventos desde NestJS hacia ClickHouse (sin afectar PostgreSQL). Dashboards con Chart.js: progreso por unidad, tasas de completitud, promedios por grado. Tabla de notas con AG Grid. Exportación a PDF (pdfmake) y Excel (exceljs) desde el panel del docente y del administrador.
Configuración PWA completa: manifiesto, service worker, caché offline parcial, push VAPID. Despliegue en la opción de infraestructura elegida por el cliente. CI/CD de producción. Documentación técnica del monorepo y de los módulos NestJS. Manual de usuario por rol (PDF). Capacitación al equipo de la editorial.
Cada fase cierra con entregables verificables. El cliente aprueba antes de iniciar la siguiente.
Levantamiento de requisitos con la editorial. Diseño completo en Figma de los 4 paneles (editorial, colegio, docente, estudiante). Setup del Nx Monorepo: Next.js + NestJS + libs/shared. Base de datos: esquema TypeORM, entidades y primeras migrations. CI/CD desde el día 1. Entregable: prototipo Figma aprobado + monorepo funcionando en staging.
Sistema completo de autenticación JWT multitenant. Panel Super Admin de la editorial (colegios, series, licencias). Panel Admin del colegio (grados, paralelos, docentes, carga masiva de estudiantes). CMS básico de contenido. Entregable: la editorial puede crear colegios y el admin del colegio puede cargar su estructura.
Dashboard del estudiante con navegación de series/unidades. Los 6 tipos de mini-juego en React + Canvas API. Motor de evaluaciones completo: predefinidas, programadas, banco de preguntas del docente, personalización, respuestas abiertas. Registro de resultados. Entregable: un estudiante puede acceder al contenido, hacer un juego y completar una evaluación.
Mensajería en tiempo real vía WebSocket. Retroalimentación escrita. Pipeline de eventos a ClickHouse. Dashboards con Chart.js. Exportación PDF/Excel. Panel del docente completo: progreso de estudiantes, gestión de evaluaciones, programación con BullMQ. Entregable: flujo docente-estudiante completo funcionando en staging.
Configuración PWA completa (service worker, offline, manifiesto). Notificaciones push VAPID. Notificaciones por email (Resend). Pruebas funcionales con 2–3 colegios piloto reales. Corrección de bugs y ajustes de UX según feedback. Prueba de carga: 2,000 estudiantes en examen simultáneo. Entregable: plataforma validada por usuarios reales.
Despliegue en la infraestructura de producción elegida. Documentación técnica del monorepo (arquitectura, módulos NestJS, guía de despliegue). Manuales de usuario por rol en PDF. Capacitación al equipo de la editorial. Soporte activo durante el primer mes de operación real.
El desarrollo es idéntico en los tres casos. Solo varía el costo mensual de operación que asume la editorial.
DevGrafik configura e instala el sistema en la opción elegida. La configuración está incluida en el precio de desarrollo. Los costos mensuales los paga la editorial directamente a cada proveedor.
Los costos de infraestructura no están incluidos en el precio de desarrollo. Son gastos operativos mensuales que la editorial paga directamente. DevGrafik hace la configuración inicial como parte del proyecto. Se recomienda la Opción A para equipos sin DevOps dedicado: Neon PostgreSQL tiene scale-to-zero real (costo mínimo fuera del horario escolar) y Railway escala el NestJS automáticamente durante picos de exámenes.
Precio fijo por el desarrollo completo del nivel avanzado según el alcance descrito en esta propuesta.
ROI estimado: Con 50 colegios clientes a $150.000 COP/mes de licencia, la editorial genera $7.500.000 COP/mes. El desarrollo se recupera en ~25 meses. Con 100 colegios, en ~13 meses. Además, cada colegio que adopta el LMS tiene un costo de cambio mucho mayor que uno que solo compra el libro físico — aumenta la retención y los contratos multi-año.
| Alcance | El precio cubre las funcionalidades marcadas con ✓ en la tabla del Capítulo 3. Cualquier funcionalidad adicional se cotiza por escrito antes de iniciar. |
| Cambios de alcance | Hasta 2 ajustes por fase sin costo, siempre que no superen el 10% del esfuerzo de esa fase. Cambios mayores se cotizan y aprueban por escrito. |
| Propiedad del código | Al completar el pago total, la editorial recibe el código fuente completo (repositorio privado en GitHub a nombre de la editorial) con historial de commits. |
| Infraestructura | Los costos mensuales de hosting, bases de datos y servicios de terceros son responsabilidad de la editorial. DevGrafik configura el entorno como parte del proyecto. |
| Garantía de calidad | Todos los módulos se entregan con tests automatizados documentados. Bugs reportados en los primeros 60 días post-lanzamiento se corrigen sin costo adicional. |
| Soporte post-lanzamiento | 30 días de soporte técnico incluido. Soporte extendido disponible bajo contrato de mantenimiento mensual independiente. |
| Confidencialidad | DevGrafik mantiene absoluta confidencialidad sobre el contenido, datos de usuarios y lógica de negocio de la editorial durante y después del proyecto. |
| Vigencia de la propuesta | Precios y condiciones válidos por 30 días calendario desde la fecha de emisión. |
La firma de ambas partes constituye la aceptación formal del alcance, precio y condiciones descritos en este documento.
Al firmar esta propuesta, la editorial acepta el alcance descrito en el Capítulo 3, el precio indicado en el Capítulo 7 y el plan de pagos acordado. DevGrafik se compromete a ejecutar el proyecto según el cronograma del Capítulo 5 con los 10 entregables del Capítulo 4.
Fecha de emisión: Abril 2026 · Válida 30 días · Next.js 15 + NestJS · $185.000.000 COP