Una aplicación educativa interactiva para aprender fundamentos de JavaScript mediante ejercicios prácticos y validación en tiempo real.
JS CodeWorld Academy es una plataforma educativa interactiva que permite a estudiantes aprender JavaScript de forma práctica. Los ejercicios se ejecutan directamente en el navegador, proporcionando retroalimentación inmediata y validación automática del código.
- 💻 Ejecución en tiempo real: Código JavaScript ejecutado directamente en el navegador
- ✅ Validación automática: Sistema de validadores que comprueban la corrección del código
- 🎨 Interfaz moderna: Diseño con Tailwind CSS y paleta de colores personalizada
- 🔄 Sin dependencias de build: Usa React UMD + Babel standalone (sin bundler)
- 📝 Editor integrado: Área de código con sintaxis resaltada y captura de
console.log - 🎯 Progresión guiada: Sistema de ejercicios secuenciales con dificultad creciente
- 🎓 Feedback educativo: Mensajes personalizados de éxito y ayuda para cada ejercicio
- 🌈 Tema personalizable: Sistema de variables CSS para cambiar colores fácilmente
-
Clona el repositorio (o descarga el código):
git clone <url-del-repositorio> cd js-academy
-
Sirve el proyecto por HTTP (necesario para que Babel cargue scripts externos):
Opción 1: Con Python
python3 -m http.server 8000
Opción 2: Con Node.js
npx http-server -c-1 . -
Abre tu navegador y visita:
http://localhost:8000
- Lee las instrucciones cuidadosamente
- Escribe tu código en el editor proporcionado
- Ejecuta el código para ver el resultado en la consola
- Avanza al siguiente ejercicio una vez completado
- Lee bien las instrucciones antes de empezar a codificar
- Usa
console.log()para depurar tu código - Los validadores comprueban tanto la sintaxis como la lógica
- Puedes reintentar tantas veces como necesites
- React 18.x - Librería de UI (UMD build)
- Babel Standalone - Transpilación de JSX en el navegador
- Tailwind CSS - Framework de utilidades CSS (CDN)
- CSS3 - Variables CSS personalizadas para tematización
js-academy/
├── index.html # Punto de entrada, carga React UMD y Babel
├── src/
│ ├── styles.css # Variables CSS y estilos globales
│ ├── exercises.jsx # Definición de ejercicios (metadatos y validadores)
│ ├── main.jsx # Montaje de la aplicación
│ ├── App.jsx # Control de flujo y navegación entre ejercicios
│ └── components/
│ └── Exercise.jsx # Componente genérico para ejecutar y validar código
└── README.md
-
Exercise.jsx: Componente reutilizable que:- Renderiza el editor de código
- Ejecuta código usando
new Function() - Captura salidas de
console.log - Aplica validadores declarativos
- Muestra mensajes de éxito/error
-
App.jsx: Gestiona:- Estado global de progresión (qué ejercicio está activo)
- Modal de presentación de ejercicios
- Navegación entre ejercicios
-
exercises.jsx: Define cada ejercicio con:id: Identificador únicotitle: Título del ejercicioinstructions: Descripción de la tareatemplate: Código inicialvalidators: Array de funciones de validaciónsuccessMessage: Mensaje al completar
Los validadores son funciones que reciben:
code: Código escrito por el estudianteoutput: Salida capturada deconsole.log
Y retornan:
{ valid: true }si el código es correcto{ valid: false, message: "..." }si hay errores
Para agregar un ejercicio, edita src/exercises.jsx:
{
id: 5,
title: "Tu nuevo ejercicio",
instructions: "Descripción clara de la tarea...",
template: "// Código inicial para el estudiante\n",
validators: [
(code, output) => {
// Tu lógica de validación
if (output.includes("resultado esperado")) {
return { valid: true };
}
return { valid: false, message: "Pista para el estudiante" };
}
],
successMessage: "¡Excelente! Has completado el ejercicio."
}La paleta de colores se define en src/styles.css usando variables CSS:
:root {
--color-primary: #3b82f6;
--color-secondary: #8b5cf6;
/* ... más variables */
}Tailwind CSS está configurado para usar estas variables, permitiendo cambiar todo el tema desde un único archivo.
IMPORTANTE: El código del estudiante se ejecuta usando
new Function(code)directamente en el navegador. Esto es adecuado para un entorno educativo controlado, pero NO es seguro para código arbitrario en producción.
- Implementar ejecución en Web Workers con timeout para evitar bucles infinitos
- Añadir sandboxing más robusto
- Limitar acceso a APIs del navegador
Las contribuciones son bienvenidas. Si deseas mejorar la plataforma:
- Haz un fork del proyecto
- Crea una rama para tu feature (
git checkout -b feature/NuevoEjercicio) - Commit tus cambios (
git commit -m 'Add: Ejercicio de arrays') - Push a la rama (
git push origin feature/NuevoEjercicio) - Abre un Pull Request
- ✨ Añadir más ejercicios de JavaScript
- 🧪 Implementar tests automáticos para validadores
- 🎨 Mejorar el diseño y UX
- 🌐 Añadir soporte multiidioma
- 🔒 Mejorar seguridad con Web Workers
- 📊 Añadir sistema de progreso y estadísticas
Este proyecto está bajo la Licencia MIT.
Sergio MT
Creado con ❤️ para aprender JavaScript.