CodeGym es un entorno ligero, seguro y completamente local para practicar ejercicios de JavaScript.
Utiliza Web Workers como sandbox, permitiendo ejecutar código del usuario sin riesgo para la página principal, con soporte para:
- Ejecución aislada en un Worker
- Timeout configurable
- Pruebas automáticas por ejercicio
- DOM virtual simple para ejercicios con HTML
- Persistencia de progreso en
localStorage - Lista de ejercicios cargados dinámicamente
Crear un espacio tipo “gimnasio de programación” donde cualquier persona pueda practicar JavaScript desde lo más básico hasta manipulación del DOM, eventos, JSON y lógica general.
El proyecto funciona sin backend, sólo requiere abrir validador.html en el navegador.
CodeGym/
│
├── index.html # Página principal con el validador
└── exercises/
├── basics.js # Ejercicios de lógica básica
├── arrays.js # Ejercicios de arreglos
├── strings.js # Ejercicios de strings
├── dom.js # Ejercicios con DOM virtual
├── events.js # Ejercicios de eventos
├── json.js # Ejercicios con JSON
└── index.js # Registro de todos los ejercicios
Cada archivo de ejercicio debe exportar una lista de objetos con esta estructura:
{
id: "unique-id",
title: "Título del ejercicio",
description: "Descripción corta del ejercicio",
template: "Código inicial que verá el alumno",
tests: [
"sum(2,2) === 4",
"typeof sum === 'function'"
],
html: "<button id='btn'>Click</button>" // opcional
}| Campo | Uso |
|---|---|
id |
Debe ser único. Se usa para guardar progreso. |
title |
Nombre del ejercicio. |
description |
Explicación visible para el usuario. |
template |
Código inicial en el editor. |
tests |
Lista de expresiones evaluadas en el Worker. |
html |
HTML opcional para ejercicios que usan DOM virtual. |
- Crea un archivo en
exercises/, por ejemplo:
exercises/loops.js
- Dentro del archivo exporta tus ejercicios:
exercises.push({
id: "loop-basic-1",
title: "Suma de 1 a N",
description: "Escribe una función que sume los números del 1 al N.",
template: `function sumToN(n) {
// tu código aquí
}`,
tests: [
"sumToN(5) === 15",
"sumToN(1) === 1"
]
});- Edita
exercises/index.jsy agrega:
import './loops.js';- ¡Listo! Aparecerá automáticamente en la lista.
El código del usuario se ejecuta en un Web Worker aislado, con:
- Timeout configurable
- Sin acceso al DOM real
- Sin acceso al
windowglobal - DOM simulado controlado
- El Worker se destruye al terminar
No requiere servidor:
- Descarga el proyecto
- Abre
index.htmlen tu navegador - Empieza a resolver ejercicios
Se aceptan mejoras, nuevos ejercicios y optimizaciones al sandbox.
Proyecto creado por AldoIs Mendoza
https://imagukrei.com