Plataforma para aprender a programar escribiendo código, pensada para estudiantes del CETI Guadalajara. Lecciones cortas, un editor con compilador de verdad y retos que se califican contra casos de prueba. Todo en español y dentro del navegador: sin instalar compiladores, sin configurar un IDE.
Hoy hay cuatro cursos:
| Curso | Materia | Lenguaje | Contenido |
|---|---|---|---|
cpp-desde-cero |
Programación en C++ | C++ (cpp17-wandbox) |
10 unidades · 67 lecciones · 80 prácticas |
csharp-poo-1 |
Programación Orientada a Objetos | C# (csharp-mono-6.12) |
16 unidades (14 publicadas) · 73 lecciones · 64 prácticas |
modelos-metodos-desarrollo-software |
Modelos y métodos de desarrollo de software | C# (csharp-mono-6.12) |
10 unidades · 44 lecciones · 32 prácticas |
bases-de-datos |
Bases de datos | SQL (sql-sqlite3-wandbox) |
20 unidades · 92 lecciones · 51 prácticas |
En total: 56 unidades · 276 lecciones · 1187 pasos · 227 prácticas.
Cada curso trae su propio lenguaje y su propio compilador. El curso es la fuente de verdad: el editor, el resaltado, los diagnósticos, el compilador con el que se califica y el agrupamiento de métricas salen de ahí, nunca de lo que mande el cliente.
90 % práctica, 10 % teoría. El texto explica lo justo y en seguida hay que escribir código. Ninguna lección termina en lectura.
- En el CETI, muchos maestros explican copiando código al pizarrón sin desmenuzar la lógica.
- Mimo, Sololearn y Codecademy no siguen el temario que se lleva en clase.
- Reprobar programación casi nunca es flojera: es falta de un recurso donde practicar con retroalimentación inmediata.
Esta plataforma es ese recurso. No es un producto oficial del CETI: es una iniciativa independiente.
Cada lección encadena pasos de cinco tipos y siempre desemboca en código propio. El reto final no se autoevalúa: se compila y se ejecuta contra casos de entrada/salida, incluidos casos ocultos, y el resultado decide si la lección se marca como terminada.
Un intento real con el error clásico de la división entera (/ 3 en vez de / 3.0). El
feedback no dice «incorrecto»: muestra la salida esperada contra la tuya, señala la línea
y la columna donde se separan, y guarda un caso oculto para que la solución no se ajuste
al ejemplo. Las pistas se revelan una por una.
El curso insignia, con más detalle. Los otros tres cursos (POO con C#, Modelos y métodos de desarrollo de software, Bases de datos) siguen la misma mecánica —teoría corta, ejemplos ejecutables, retos calificados contra casos de prueba— sobre su propio temario; ver la tabla de arriba para sus números.
| Qué | Cuánto |
|---|---|
| Unidades | 10, del primer cout a las matrices |
| Lecciones | 67 |
| Pasos de lección | 314 — teoría, ejemplos ejecutables, preguntas, completar código y retos |
| Retos calificados | 116, con 171 casos de prueba (algunos ocultos) |
| Ejercicios de práctica | 80 más, fuera del camino de lecciones, con sus 225 casos |
| Idioma | Español de México, en todo el contenido y la interfaz |
El curso está escrito como curso: el temario avanza de cout a cin, tipos, control de
flujo, ciclos, funciones, printf/scanf, arreglos, archivos y matrices, y cada unidad
apoya en la anterior. No es un playground con ejercicios sueltos.
El avance se mide en lecciones colocadas, no en tiempo de pantalla: cada bloque de la columna es una lección, y el rail muestra en qué unidad vas. Alrededor hay XP, niveles, racha, logros y amigos del CETI para comparar avance.
| Capa | Tecnología |
|---|---|
| Frontend | Next.js 16 (App Router) · React 19 · TypeScript |
| UI | Tailwind 4 · shadcn/ui · Radix · Lucide |
| Editor | Monaco (el de VS Code), con autocompletado propio por lenguaje (C++, C#, SQL) |
| Datos | PostgreSQL + Prisma |
| Auth | Better Auth (correo/contraseña + Google) |
| Ejecución de código | Adapter: Wandbox (default), Piston o Judge0 — público o self-hosted |
| Hosting | Vercel (app) y el servicio de ejecución aparte |
Tres decisiones que explican el resto:
- El executor es un adapter.
getCodeExecutor()elige proveedor segúnCODE_EXECUTOR_PROVIDER; cambiar de Wandbox a un Judge0 propio es una variable de entorno, no un refactor. La app no sabe quién compila. - El contenido vive en TypeScript tipado (
prisma/content/*.ts), no en un CMS: da autocompletado y errores en compilación. El seed haceupsert, así que recargar el curso no borra el progreso de nadie. - Una sola vía para el progreso.
completeStepysubmitExerciseson Server Actions y son el único lugar donde se suma XP, se actualiza la racha y se marca una lección.
→ Arquitectura y decisiones · Configuración y variables · Cómo escribir contenido nuevo · Despliegue paso a paso
Necesitas Node 20+ y una base PostgreSQL (Supabase gratis, Docker o una local).
npm install
cp .env.example .env.local # completa DATABASE_URL y BETTER_AUTH_SECRET
npm run db:push # crea el schema
npm run db:seed # carga los 4 cursos y sus 56 unidades
npm run dev # http://localhost:3000El ejecutor por defecto es la API pública de Wandbox: no pide llave ni tarjeta, así que
los retos se compilan desde el primer arranque. Si prefieres Piston o un Judge0 propio,
cámbialo con CODE_EXECUTOR_PROVIDER — ver docs/configuracion.md.
npm run lint # ESLint
npm run typecheck # TypeScript sin emitir
npm test # Vitest: progreso y XP, salida del executor, rate limit y contenidoProyecto independiente, sin relación oficial con el CETI. Si detectas un error en una lección o en un reto, la app tiene un botón para reportarlo y el repo tiene issues abiertas.


