2025-12-23 11:36:48 -03:00

OpenCCB: Open Comprehensive Course Backbone

OpenCCB es una infraestructura de código abierto para plataformas de gestión de aprendizaje y contenido (LMS/CMS), construida con rendimiento, seguridad y escalabilidad en mente.

🚀 Arquitectura Consolidada

El proyecto ha sido optimizado para reducir la complejidad de la infraestructura, consolidando los servicios de backend con sus respectivos frontends en contenedores unificados:

  1. Studio + CMS (Puerto 3000/3001):
    • Frontend: Next.js app para administración y creación de contenido.
    • Backend: API de Rust para gestión (CMS).
  2. Experience + LMS (Puerto 3003/3002):
    • Frontend: Next.js app para la experiencia del estudiante.
    • Backend: API de Rust para entrega de cursos y calificaciones (LMS).
  3. Database: PostgreSQL compartido.
  4. AI Services: Faster-Whisper para transcripción automática.

Requisitos del Sistema

OpenCCB es altamente escalable. A continuación se detallan los requisitos recomendados según la carga de usuarios concurrentes:

Componente Pequeño (100 u.) Mediano (500 u.) Grande (1000+ u.)
CPU 4 vCPUs 8 vCPUs (AVX2) 16+ vCPUs
RAM 8 GB 16 GB 32 GB+
Almacenamiento 50 GB SSD 200 GB NVMe 500 GB+ NVMe
AI (Opcional) N/A (Solo CPU) NVIDIA 8GB+ VRAM Multi-GPU / Cloud API
OS Ubuntu 22.04 LTS Ubuntu 22.04+ Cloud Managed (K8s)

Note

Los requisitos de AI son específicos para la función de transcripción local (Whisper). Si se utiliza una API externa, el requisito de GPU desaparece.

🛠 Stack Tecnológico

  • Backend: Rust (Edition 2024), Axum, SQLx.
  • Frontend: React, Next.js (App Router), Tailwind CSS, Lucide React.
  • Base de Datos: PostgreSQL 16.
  • Infraestructura: Docker & Docker Compose.
  • IA: Faster-Whisper (Transcriptor de video).

📦 Guía de Inicio Rápido

Requisitos Previos

  • Docker y Docker Compose.
  • Node.js 18+ (para desarrollo local).
  • Rust (para desarrollo local).

Ejecución con Docker (Recomendado)

docker-compose up --build

Esto iniciará todos los servicios:

Desarrollo Local

Studio & CMS

# Iniciar backend CMS
cd services/cms-service
cargo run

# Iniciar frontend Studio
cd web/studio
npm install
npm run dev

Experience & LMS

# Iniciar backend LMS
cd services/lms-service
cargo run

# Iniciar frontend Experience
cd web/experience
npm install
npm run dev

🔌 Manual del Desarrollador (API)

1. Autenticación y Cuentas

Gestión de registro, login y perfiles organizacionales.

POST /auth/register

Crea una nueva organización y el usuario administrador inicial.

  • Lógica Inteligente: Si organization_name está vacío, se utiliza el dominio del email. El primer usuario es marcado como role: admin.
  • Cuerpo de la Petición ( AuthPayload ):
    {
      "email": "string",
      "password": "string",
      "full_name": "string",
      "organization_name": "string",
      "role": "string (admin | instructor | student)"
    }
    
  • Respuesta Exitosa (200 OK) ( AuthResponse ):
    {
      "token": "string (JWT)",
      "user": {
        "id": "uuid",
        "email": "string",
        "full_name": "string",
        "role": "string",
        "organization_id": "uuid"
      }
    }
    
# Registrar un nuevo administrador y empresa
curl -X POST "http://localhost:3001/auth/register" \
     -H "Content-Type: application/json" \
     -d '{"email": "admin@empresa.com", "password": "pass", "organization_name": "OpenCCB Corp"}'

2. Gestión de Contenidos (CMS)

Herramientas para instructores y administradores.

POST /courses

Crea un nuevo curso vinculado a la organización del usuario.

  • Lógica: El instructor_id se asigna automáticamente desde el token JWT.
  • Cuerpo ( CreateCourseRequest ):
    {
      "title": "string",
      "pacing_mode": "string (self_paced | instructor_led)"
    }
    
# Crear curso básico
curl -X POST "http://localhost:3001/courses" \
     -H "Authorization: Bearer $TOKEN" \
     -d '{"title": "Curso de Rust", "pacing_mode": "self_paced"}'

POST /lessons

Agrega contenido multimedia o evaluaciones a un módulo.

  • Configuración Graduable: Si is_graded es true, los puntos sumarán al XP del estudiante en el LMS.
  • Cuerpo ( CreateLessonRequest ):
    {
      "module_id": "uuid",
      "title": "string",
      "content_type": "string (video | reading | quiz)",
      "content_url": "string (opcional)",
      "is_graded": "boolean",
      "grading_category_id": "uuid (opcional)"
    }
    
# Agregar lección de video
curl -X POST "http://localhost:3001/lessons" \
     -H "Authorization: Bearer $TOKEN" \
     -d '{"module_id": "...", "title": "Intro", "content_type": "video", "is_graded": false}'

3. Experiencia de Aprendizaje (LMS)

Endpoints para estudiantes y seguimiento de progreso.

POST /enroll

Inscribe al usuario en un curso.

  • Lógica: Verifica que el curso pertenezca a la misma organización que el usuario.
  • Cuerpo ( EnrollPayload ):
    {
      "course_id": "uuid"
    }
    
# Inscribirse en un curso
curl -X POST "http://localhost:3002/enroll" \
     -H "Authorization: Bearer $TOKEN" \
     -d '{"course_id": "uuid-del-curso"}'

POST /grades

Registra el puntaje de una lección y actualiza la gamificación.

  • Lógica Inteligente: Actualiza automáticamente el XP del usuario y despacha webhooks si el curso se completa.
  • Cuerpo ( GradeSubmissionPayload ):
    {
      "course_id": "uuid",
      "lesson_id": "uuid",
      "score": "float (0.0 a 1.0)",
      "metadata": "object (opcional)"
    }
    
# Enviar calificación de 90%
curl -X POST "http://localhost:3002/grades" \
     -H "Authorization: Bearer $TOKEN" \
     -d '{"course_id": "...", "lesson_id": "...", "score": 0.9}'

4. IA y Analíticas Avanzadas

Funcionalidades inteligentes y métricas de negocio.

POST /chat (Streaming)

Conversación en tiempo real con la base de conocimientos.

  • Nueva Sesión: Omite session_id. La API creará uno nuevo y generará un título automático.
  • Continuar Sesión: Envía el session_id devuelto anteriormente.
  • RAG (Base de Conocimiento): Envía "use_kb": true para que la IA busque en los documentos de S3.
  • Cuerpo ( ChatPayload ):
    {
      "username": "string",
      "prompt": "string",
      "session_id": "uuid (opcional)",
      "use_kb": "boolean"
    }
    
# Iniciar chat con RAG
curl -X POST "http://localhost:8000/chat" \
     -H "Content-Type: application/json" \
     -d '{
           "username": "juan",
           "prompt": "Explícame qué es Docker en una frase",
           "use_kb": true
         }'

Respuesta: Stream de texto plano. Al final incluye un JSON con el ID de sesión: {"session_id": "..."}.

GET /courses/{id}/analytics/advanced

Métricas de retención y análisis de cohortes.


5. Multi-tenancy and Global Management (Super Admin)

OpenCCB is built for multi-tenancy. Organizations are isolated, but a Super Admin can manage everything.

Super Admin Definition

  • Default Organization ID: 00000000-0000-0000-0000-000000000001
  • Any user with role: admin in this organization is a Super Admin.

Global Courses

Courses created by Super Admins in the Default Organization are automatically marked as Global.

  • They appear in the catalog of all organizations.
  • Users from any organization can enroll in global courses.

Cross-Tenant Publishing

Super Admins can publish courses to any organization. When publishing through the Studio, a premium Organization Selector (with search-as-you-type) allows choosing the target destination.

X-Organization-Id Header

Super Admins can simulate the context of any organization by sending this header in their requests:

curl -H "Authorization: Bearer $SUPER_ADMIN_TOKEN" \
     -H "X-Organization-Id: $TARGET_ORG_ID" \
     http://localhost:3001/courses

GET /organizations

Returns a searchable list of all organizations. (Admin only).


🏆 Premium UI Components

  • Organization Selector: A searchable combobox for managing large lists of tenants.
  • Glassmorphism Design: Consistent aesthetic across Studio and Experience portals.
  • Micro-animations: Enhanced feedback for publishing and content management.

📄 Licencia

Este proyecto es código abierto y está disponible bajo los términos de la licencia especificada en el repositorio.

S
Description
No description provided
Readme 13 MiB
Languages
TypeScript 54.3%
Rust 28.8%
HTML 10.3%
PLpgSQL 2.7%
Shell 2.4%
Other 1.4%