Una plantilla lista para usar que te permite crear aplicaciones web interactivas para talleres educativos con sistema de misiones, equipos, puntuación y seguimiento en tiempo real.
- Backend: Node.js + Fastify + Socket.IO + SQLite
- Frontend: React + Vite + Styled Components
- Base de Datos: SQLite con sistema de migraciones
- Validación: Zod para esquemas de datos
- Testing: Jest configurado para backend y frontend
- Docker: Configuración lista para despliegue
- ✅ Sistema de sesiones con códigos únicos
- ✅ Gestión de equipos con nombres personalizados
- ✅ Sistema de misiones progresivas (3 misiones + fase final)
- ✅ Sistema de pistas con penalización configurable
- ✅ Temporizadores configurables por sesión
- ✅ Tablero de puntuación en tiempo real
- ✅ Vista para profesores con control total
- ✅ Vista para equipos con interfaz intuitiva
- ✅ Exportación de resultados a CSV
- ✅ Websockets para actualizaciones en tiempo real
- ✅ Rate limiting y medidas de seguridad
- Node.js 18+ y npm
- (Opcional) Docker y Docker Compose
# 1. Clonar/copiar este proyecto
cd mision-template
# 2. Instalar dependencias de todo el proyecto
npm run install:all
# 3. Configurar el backend
cd api
cp env.example .env
npm run migrate
# 4. Iniciar en modo desarrollo
cd ..
npm run devEl frontend estará en http://localhost:5173 y el backend en http://localhost:3000
docker-compose up --buildEdita api/src/mission-configs.js:
// 1. Define las plantillas de tus misiones
export const missionTemplates = {
m1: {
name: 'Misión 1: Tu título aquí',
description: 'Descripción de la misión. Usa {placeholders} para valores dinámicos',
hints: [
'🔍 Pista 1: Primera pista con {placeholder}',
'📍 Pista 2: Segunda pista',
'🎯 Pista 3: Tercera pista con la solución'
]
},
// ... más misiones
};
// 2. Define los valores concretos para cada misión
export const equationSets = {
basic: [
{
key: 'm1',
// Agrega aquí todos los valores que necesites
// Estos reemplazarán los {placeholders} en las plantillas
},
// ... más configuraciones
]
};Edita api/src/validators.js para definir cómo se validan las respuestas de cada misión.
Los componentes principales están en:
web/src/components/team/- Vista de equiposweb/src/components/teacher/- Vista de profesorweb/src/components/common/- Componentes compartidos
En api/src/index.js encontrarás la configuración de:
- Puntos por misión completada
- Penalización por pistas
- Tiempo límite por misión
- Bonificaciones
mision-template/
├── api/ # Backend
│ ├── src/
│ │ ├── index.js # Servidor principal
│ │ ├── mission-configs.js # ⭐ PERSONALIZA TUS MISIONES AQUÍ
│ │ ├── validators.js # ⭐ VALIDA RESPUESTAS AQUÍ
│ │ ├── tasks.js # Lógica de misiones
│ │ ├── store.js # Estado en memoria
│ │ ├── config/ # Configuraciones de seguridad
│ │ ├── database/ # Conexión a BD
│ │ ├── middleware/ # Middleware de seguridad
│ │ ├── migrations/ # Esquema de base de datos
│ │ └── routes/ # Endpoints API
│ └── package.json
├── web/ # Frontend
│ ├── src/
│ │ ├── App.jsx # Componente principal
│ │ ├── components/
│ │ │ ├── common/ # Componentes reutilizables
│ │ │ ├── teacher/ # Vista del profesor
│ │ │ └── team/ # ⭐ Vista de equipos (PERSONALIZA)
│ │ ├── hooks/ # Hooks personalizados
│ │ └── state/ # Estado global
│ └── package.json
├── docs/ # Documentación
├── docker-compose.yml # Configuración Docker
└── package.json # Scripts del proyecto
Crea un archivo .env en la carpeta api/:
# Servidor
PORT=3000
NODE_ENV=development
# Base de datos
DB_PATH=./data/database.db
# Seguridad
ALLOWED_ORIGINS=http://localhost:5173,http://localhost:3000
RATE_LIMIT_MAX=100
RATE_LIMIT_TIMEWINDOW=60000
# Websockets
WS_CORS_ORIGIN=http://localhost:5173- Profesor crea sesión → Genera código único
- Equipos se unen → Ingresan código y nombre de equipo
- Profesor configura tiempos → Establece duración de cada misión
- Inicia el taller → Misión 1 se activa para todos
- Equipos resuelven misiones → Pueden pedir pistas (con penalización)
- Validación automática → Sistema valida respuestas
- Progresión → Al completar una misión, se desbloquea la siguiente
- Fase final → Después de las 3 misiones
- Exportación → Profesor descarga resultados en CSV
# Backend
cd api
npm test
# Frontend
cd web
npm test
# Con cobertura
npm run test:coverageEl archivo render.yaml está listo para desplegar en Render.
docker-compose up -d- Backend: Fastify, Socket.IO, SQLite, Zod, Math.js
- Frontend: React, Vite, Styled Components
- Testing: Jest, React Testing Library
- Deploy: Docker, Render
docs/API.md- Documentación completa de la APIdocs/DEVELOPMENT.md- Guía de desarrollo
Esta es una plantilla base. Siéntete libre de:
- Agregar más misiones
- Personalizar la interfaz
- Mejorar las validaciones
- Agregar nuevas funcionalidades
MIT - Usa esta plantilla libremente para tus proyectos educativos.
🎓 Perfecto para: Talleres de matemáticas, física, química, programación, y cualquier disciplina que requiera resolución de problemas interactivos con equipos.