Tu ruta de trabajo
El proceso recomendado: crear un curso, editar sus semanas en Markdown y comprobar el resultado en el navegador.
Qué puedes construir
Una presentación general, hasta 8 semanas independientes, actividades HTML locales, ilustraciones, diagramas Mermaid, gráficos Chart.js, fórmulas y notas del docente.
Qué no hace por sí solo
Las preguntas del laboratorio son locales; Seminar, encuestas y preguntas multiusuario requieren un servidor adicional. No hay sincronización de notas ni calificaciones con Moodle de forma automática.
Requisitos de instalación
Solo necesitas Node.js (incluye npm), un editor de texto y un navegador moderno. No hace falta saber React.
- Node.js 20.19 o posterior (recomendado: la versión LTS de nodejs.org). npm se instala junto con Node.js.
- Editor: Visual Studio Code u otro editor de texto plano.
- Navegador: Chrome, Edge o Firefox actualizados.
- Git (opcional): solo para publicar en GitHub Pages.
node -v # debe mostrar v20.19.0 o superior
npm -vnode no se reconoce, cierra y vuelve a abrir la terminal después de instalar Node.js.Instalación y creación de un curso
Un único comando descarga el generador desde npm y crea una carpeta nueva con el curso completo. No crees cursos dentro de otro proyecto.
npm create openclass-uniminuto-revealjs@latest mi-curso
cd mi-curso
npm install
npm run devnpm run dev abre el portal en http://localhost:8600/. Si ese puerto está ocupado, usa npm run dev -- --port 8610.
Con los fondos y logotipos institucionales
El paquete público trae un tema neutro con la misma composición. Si tu institución te entregó la carpeta de recursos institucionales, aplícala al crear el curso (o después, con --update-theme):
npm create openclass-uniminuto-revealjs@latest mi-curso -- --assets "RUTA\recursos-institucionales"--assets solo copia imágenes (png, jpg, webp, svg) sobre public/, con los mismos nombres de archivo. No publiques esos recursos si no tienes autorización.
Otras opciones del generador
npx create-openclass-uniminuto-revealjs@latest --help # ayuda
npx create-openclass-uniminuto-revealjs@latest mi-curso --iot # nombre inicial «Introducción a Internet de las Cosas»
npx create-openclass-uniminuto-revealjs@latest mi-curso --install # crea e instala dependenciashttp://localhost:8610/. No necesitas iniciar varios procesos en la misma carpeta.¿Qué encontrarás al abrir el portal?
Acceso a la presentación general, semanas activas, demostración de layouts, laboratorio y esta guía. Las semanas se muestran según generation.activeWeeks.
Carpetas y archivos que sí debes editar
El contenido académico permanece separado del código React y de los fondos institucionales.
mi-curso-iot/
├── openclass.config.json # Datos del curso y semanas activas
├── slides.md # Presentación general
├── semanas/
│ └── micursoiot_semana1.md # Contenido de Semana 1
├── plantillas/semana.md # Base para semanas nuevas
├── demo-completa.md # Demostración «TEMÁTICA DE PRUEBA» (referencia)
├── docs/
│ ├── GUIA-DOCENTE.md # Resumen de esta guía
│ └── IA/ # Instrucciones, plantilla y prompt para IA
├── public/
│ ├── imagenes/ # Fotografías y diagramas
│ ├── videos/ # Vídeos locales y subtítulos .vtt
│ ├── actividades/ # Microactividad, quiz y simuladores HTML
│ ├── galeria/ # Vistas previas de los 13 layouts
│ └── fondos/ # Fondos de portada, internas y cierre
├── src/theme.css # Tema aprobado (evita modificarlo)
├── guia/index.html # Esta página
├── galeria/ # Galería de layouts (/galeria/)
└── dist/ # Se genera después del buildLos proyectos de Slidev y openclass-prueba-reveal son independientes. No copies node_modules ni dist desde ellos.
Configura nombre, periodo y semanas
Edita openclass.config.json con un editor de texto como VS Code. No elimines claves existentes.
{
"course": {
"shortName": "micursoiot",
"fullName": "Internet de las Cosas",
"year": "2026",
"description": "OpenClass de sensores, conectividad y aplicaciones"
},
"generation": {
"weeksTotal": 8,
"activeWeeks": [1, 2],
"overwriteWeekContent": false
}
}weeks. El shortName se usa en las rutas y nombres de archivo; no lo cambies después de editar las semanas sin revisar sus nombres.Modifica weeks[n].title, date, centralTheme y activity para ajustar la semana correspondiente.
Al portal publicado solo llegan course.fullName, description, year y el título y el tema de las semanas activas; las semanas que no están en activeWeeks no se publican. La activación de cada semana se define en weeks[].opening (ver Diseñar la semana).
Activa y desarrolla las ocho semanas
Cada semana usa un Markdown propio y una ruta dentro del portal. Tus cambios académicos no se sobrescriben al regenerar los accesos.
npm run semana -- 2 --title "Sensores y actuadores" --date "2026-11-04" --theme "Medición y control"
npm run config
npm run dev -- --port 8610El comando crea (si no existe) semanas/micursoiot_semana2.md y activa su enlace en el portal. Edita allí el contenido. Para una semana ya existente, evita --force-content: esa opción sí puede reemplazar el Markdown.
npm run semana -- 3 --title "Comunicación IoT" --date "2026-11-11"
# Abrir luego /semanas/micursoiot_semana3/Modificar una semana existente
Abre semanas/<curso>_semanaN.md en VS Code, edita y guarda: con npm run dev abierto, el navegador se actualiza solo. Para cambiar el título o la fecha que muestra el portal, edita weeks[N-1] en openclass.config.json o vuelve a ejecutar npm run semana -- N --title "…" (el Markdown se conserva).
Modificar la presentación general
La presentación general del curso está en slides.md y se abre en /general/. Sigue las mismas reglas de Markdown y layouts que las semanas; preséntala en la primera sesión (objetivos, metodología, evaluación).
Diseña la semana: apertura, recorridos y continuidad
Antes de redactar las diapositivas, define qué aprenderán los estudiantes, cómo participarán en cada recorrido y qué evidencias mostrarán. Este capítulo resume el contrato pedagógico que también siguen los archivos de docs/IA/.
1. Ruta de la semana
El portal muestra solo las semanas publicadas (generation.activeWeeks), en orden, con su número, título y tema. Dentro de cada presentación, después de la activación, incluye una diapositiva oc-l-text «Ruta de la semana» que responda:
- Qué se aprenderá: el tema y los resultados de aprendizaje que tú defines (no inventes resultados institucionales).
- Cómo se relaciona con las semanas anteriores.
- Qué conceptos y problemas se abordarán: el caso conductor.
- Cómo participar en cada recorrido.
- Qué podrá demostrar el estudiante al finalizar.
- Cómo consultar la presentación después: queda publicada en el portal del curso.
## Ruta de la semana
<!-- .slide: class="oc-demo oc-l-text" data-background-image="{{BASE_URL}}fondos/slide-05-template.png" data-background-size="cover" -->
Esta semana estudiamos la comunicación entre servicios a partir de un caso de pagos en línea.
- **Venimos de:** la semana 2, donde definimos qué es un servicio.
- **Problema:** ¿qué pasa si un servicio deja de responder?
- **Cómo participar:** sesión por Zoom o Teams, recorrido guiado o estudio autónomo.
- **Al finalizar podrás:** explicar cuándo conviene un mensaje síncrono o uno asíncrono.
- **Para repasar:** esta presentación sigue disponible en el portal del curso.
Notes:
Propósito: ubicar la semana en la ruta del curso. Tiempo: 2 minutos. Transición: presentar el caso.2. Portada, tema y dinámica de apertura
npm run semana -- N genera las tres primeras diapositivas desde openclass.config.json: portada (course.fullName, «SEMANA N», título y fecha), tema central (centralTheme) y activación. Define la activación en weeks[].opening antes de generar la semana:
{
"number": 3,
"title": "Comunicación entre servicios",
"centralTheme": "Mensajes, colas y eventos",
"opening": {
"question": "¿Qué ocurre en una tienda en línea si el servicio de pagos tarda un minuto en responder?",
"participation": "hipotesis-grupal",
"durationMinutes": 2
}
}participation | Qué hacen los estudiantes en la reunión |
|---|---|
respuesta-individual | Cada persona escribe su respuesta en el chat; si no puede, la comparte de forma oral. |
discusion-parejas | Conversan en parejas en salas de grupos; sin salas, responden en el chat a un compañero o de forma oral. |
hipotesis-grupal | El grupo formula una hipótesis; una persona la comparte y el resto indica su acuerdo con una reacción, en el chat o de forma oral. |
propuesta-caso | Proponen una solución al caso en el chat o de forma oral y señalan la propuesta que los convence. |
durationMinutes es un número entre 1 y 3, y question es texto sin enlaces ni etiquetas. Sin opening, la pregunta es «¿Qué sabes ya sobre …?» con el tema central (individual, 2 minutos). Si algún opening es inválido, el comando no genera ninguna semana y explica el error.
npm run semana -- N crea el Markdown solo si no existe. --force-content reemplaza el archivo completo de la semana N, incluidas tus diapositivas desde la cuarta: úsalo solo mientras la semana conserva la plantilla. Si ya redactaste contenido, haz antes una copia o un commit, o edita a mano la diapositiva «Activación» con la misma estructura: pregunta, instrucción con su alternativa por chat u oral, y duración.3. Actividades para Zoom o Teams
- Toda instrucción se realiza dentro de la reunión: chat, micrófono, reacciones o salas de grupos.
- Cada función opcional (reacciones, salas de grupos) lleva una alternativa por chat u oral.
- Indica la duración y cómo cierras: recoge dos o tres respuestas y conéctalas con el tema.
- Las actividades HTML locales se comparten en pantalla o cada estudiante las abre desde el portal; no envían resultados a Moodle ni a ningún servidor.
4. Tres recorridos complementarios
| Recorrido | Cómo usa los mismos recursos | Evidencia equivalente |
|---|---|---|
| Sincrónico por Zoom o Teams | Presentación compartida, activación en el chat u oral, actividades en grupo y cierre con preguntas. | Participación y producto de la actividad durante la sesión. |
| Asincrónico guiado | Secuencia de diapositivas con fechas, videos con pregunta previa, actividad práctica y entrega. | El mismo producto, entregado en la fecha indicada. |
| Autónomo o de conectividad limitada | Presentación y actividades locales, materiales livianos o descargables, sin depender de video ni de conexión continua. | El mismo producto o una versión equivalente sin conexión continua. |
Los tres comparten resultados de aprendizaje y continuidad semanal; resúmelos en una diapositiva oc-l-two-cols. El portal los presenta como sugerencias de estudio: no los describas como modalidades institucionales oficiales. La modalidad registrada del programa es la que indica la institución.
5. Conceptos con fuentes verificables
Presenta cada concepto a partir de un problema o ejemplo, con descubrimiento progresivo (preguntas y fragmentos), y después formaliza: definición, modelo, fórmula o procedimiento. Usa fuentes oficiales, académicas y actuales, y anota en las Notes la fecha de consulta y la versión. Lo que no puedas verificar queda como «PENDIENTE DE VERIFICAR» y no se incrusta.
6. Videos: de cero a tres por semana
- Cada video dura de 5 a 10 minutos, preferiblemente en español, y ocupa su propia diapositiva
oc-l-multimedia(sintaxis en Imágenes y video). - Verifica título, canal, duración, idioma, disponibilidad y URL.
- Antes, una pregunta; durante, qué observar; después, una actividad de recuperación. Prevé una alternativa si el video no está disponible.
- Los videos no ocupan la sesión: la mayor parte del tiempo es explicación, práctica y evaluación.
7. Elaborar y verificar actividades
Incluye una microactividad de 5 a 10 minutos (ver Actividades) y una evaluación formativa: pregunta de repaso, ticket de salida o cuestionario breve. Antes de la clase resuélvela tú: revisa las instrucciones, la retroalimentación de cada opción, el uso con teclado y el tiempo real.
8. Notes: guion docente público
Las Notes son tu guion: propósito, pregunta guía, tiempo, transición, explicación académica, ejemplos adicionales y errores frecuentes. Se ven con la tecla S, pero viajan en el mismo archivo que la presentación publicada: cualquiera puede leerlas.
public/: todo lo que está en public/ se publica. Guárdalos en docente/solucionarios/, sin importarlos ni enlazarlos. Si el repositorio del curso es público, añade docente/ a .gitignore o guárdalos fuera del repositorio.9. Compilar, probar y preparar el material para estudiantes
npm run test:estructura
npm run build:all
npm run preview:pagesRecorre la semana completa en la vista previa, revisa la consola del navegador, abre cada enlace y cada video y atiende cada «PENDIENTE». Después publica (ver Validar, compilar y publicar) y comparte con los estudiantes el enlace del portal: entrarán por «Comenzar aquí» y seguirán la ruta de semanas publicadas.
Escribe las diapositivas con Markdown
Cada bloque entre separadores --- es una diapositiva. El comentario .slide: asigna el layout y el fondo.
# Internet de las Cosas
<!-- .slide: class="oc-demo oc-l-cover" data-background-image="{{BASE_URL}}fondos/slide-01-portada.png" data-background-size="cover" -->
**SEMANA 1**
2026
---
## Resultados de aprendizaje
<!-- .slide: class="oc-demo oc-l-objectives" data-background-image="{{BASE_URL}}fondos/slide-05-template.png" data-background-size="cover" -->
1. Reconocer sensores y actuadores.
2. Explicar una red de objetos conectados.
3. Proponer una solución aplicada.
Notes:
Dar un ejemplo contextualizado antes de comenzar.Reglas útiles
#se usa como título principal;##, para los demás.**texto**pone énfasis;- elementocrea viñetas;1.crea listas numeradas.Notes:introduce notas privadas para la vista del presentador.- Los fondos y rutas de recursos deben utilizar
{{BASE_URL}}para funcionar en subcarpetas de despliegue.
Los 13 layouts institucionales
Selecciona el layout según el contenido, sin cambiar la tipografía ni las franjas aprobadas. Cada miniatura es una captura real; ábrela para ver su ficha y copiar el código.
Portada
Separador
Resultados
Imagen izquierda
Imagen derecha
Superior derecho
Superior izquierdo
Texto
Dos columnas
Dos títulos
Multimedia
Código
Cierre| Clase | Uso | Contenido recomendado |
|---|---|---|
oc-l-cover | Portada | Título institucional, SEMANA y periodo |
oc-l-section | Separador | Avión con banda de sección |
oc-l-image-left | Imagen izquierda | Imagen a la izquierda + lista |
oc-l-image-right | Imagen derecha | Texto + imagen a la derecha |
oc-l-top-right | Combinado A | Imagen izquierda y viñetas derechas |
oc-l-top-left | Combinado B | Viñetas izquierdas e imagen derecha |
oc-l-multimedia | Multimedia | Vídeo, iframe, Mermaid o gráfico |
oc-l-text | Texto | Idea principal y lista |
oc-l-objectives | Objetivos | Resultados de aprendizaje |
oc-l-two-cols | Dos columnas | Tabla de comparación |
oc-l-two-titles | Dos encabezados | Tabla comparativa con títulos |
oc-l-code | Código | Bloque preformateado con scroll |
oc-l-closing | Cierre | Fondo institucional GRACIAS |
## Arquitectura de un sistema IoT
<!-- .slide: class="oc-demo oc-l-image-right" data-background-image="{{BASE_URL}}fondos/slide-05-template.png" data-background-size="cover" -->

- Percepción: sensores.
- Conectividad: Wi-Fi o LoRaWAN.
- Aplicaciones: visualización y alertas.Imágenes, videos y recursos institucionales
Los recursos locales se copian a public/ y se referencian desde Markdown. Así pueden publicarse junto al curso.

<video controls preload="metadata" src="{{BASE_URL}}videos/demostracion.mp4">
<track kind="captions" src="{{BASE_URL}}videos/demostracion.vtt" srclang="es" label="Español" default>
</video>Imágenes paso a paso
- Copia el archivo a
public/imagenes/con un nombre sin espacios ni tildes (sensor-dht22.png). - Usa un layout de imagen (
oc-l-image-left,oc-l-image-right,oc-l-top-leftuoc-l-top-right). - Escribe la imagen antes de la lista, con un texto alternativo que describa lo que muestra.
Video
El video va solo en una diapositiva oc-l-multimedia y ocupa toda el área útil sin recortarse. Prefiere WebM o MP4 de menos de 50 MB y agrega subtítulos .vtt. Para YouTube usa la dirección de inserción:
<iframe title="Video de la clase" src="https://www.youtube-nocookie.com/embed/ID_DEL_VIDEO" allowfullscreen style="width:100%;height:100%;border:0"></iframe>Incluir un iframe
Cualquier página que permita incrustarse puede mostrarse en oc-l-multimedia con un <iframe> de width:100%;height:100%. Para HTML propios en public/actividades/ añade sandbox="allow-scripts allow-forms". Si el sitio bloquea la incrustación verás un recuadro vacío: enlázalo con target="_blank".
Fondos y logotipos
No renombres los fondos: la portada usa slide-01-portada.png, las internas slide-05-template.png y el cierre slide-06-cierre.png; el bloque inferior derecho de la portada usa imagenes/acreditacion-openclass.png. El paquete público incluye versiones neutras con esos nombres; los recursos institucionales se aplican con --assets y solo deben publicarse con autorización.
Mostrar código: scroll o paginado
El layout oc-l-code resalta la sintaxis, conserva sangrías y añade el botón Copiar código. Tiene dos modos.
Scroll (predeterminado)
Todo el programa en una diapositiva, con desplazamiento vertical y horizontal, rueda del ratón y teclado. Mientras quede código por recorrer, las flechas desplazan el código; al llegar al borde, vuelven a cambiar de diapositiva (el control remoto sigue funcionando). El código nunca tapa el pie.
Paginado
Agrega data-oc-paginate="code": el bloque se divide en diapositivas de 16 líneas con el título «(continuación N)». Cámbialo con data-oc-lines="20" (de 4 a 22). Úsalo si vas a exportar a PDF.
## Programa completo (scroll)
<!-- .slide: class="oc-demo oc-l-code" data-background-image="{{BASE_URL}}fondos/slide-05-template.png" data-background-size="cover" -->
```python
# … tantas líneas como necesites …
```
---
## Programa por partes (paginado)
<!-- .slide: class="oc-demo oc-l-code" data-background-image="{{BASE_URL}}fondos/slide-05-template.png" data-background-size="cover" data-oc-paginate="code" -->
```javascript
// … programa extenso …
```Resaltar por pasos: escribe los rangos después del lenguaje, por ejemplo ```python [1-3|5-8]; cada avance ilumina un grupo de líneas. La paginación de código no afecta al texto: para listas largas existe data-oc-paginate="auto".
Inserta actividades, simuladores y cuestionarios
El layout multimedia muestra actividades a gran tamaño. Los HTML locales se ejecutan dentro de un iframe aislado.
## Pregunta de repaso
<!-- .slide: class="oc-demo oc-l-multimedia" data-background-image="{{BASE_URL}}fondos/slide-05-template.png" data-background-size="cover" -->
<iframe title="Pregunta de repaso" src="{{BASE_URL}}actividades/quiz-iot.html"
loading="lazy" sandbox="allow-scripts allow-forms"
style="width:100%;height:100%;border:0"></iframe>Microactividad de 5 a 10 minutos
En public/actividades/microactividad/ hay una actividad de clasificación con objetivo, instrucciones, validación, retroalimentación por respuesta, resultado observable, reinicio, cronómetro orientativo y acceso por teclado. Para cambiar el tema:
- Copia la carpeta con otro nombre, por ejemplo
public/actividades/clasificar-sensores/. - Edita solo
datos.js: título, objetivo, minutos, categorías (2 a 5) y elementos con su explicación. - Insértala con un iframe en
oc-l-multimedia:
<iframe title="Clasificar sensores" src="{{BASE_URL}}actividades/clasificar-sensores/index.html" loading="lazy" sandbox="allow-scripts allow-forms" style="width:100%;height:100%;border:0"></iframe>Alternativas
| Opción | Cuándo usarla | Cómo integrarla |
|---|---|---|
| HTML local | Microprácticas y autoevaluación sin servidor | iframe con sandbox |
| Aplicación en un VPS | Cuentas, datos guardados o resultados compartidos | iframe si el servidor lo permite; si no, enlace |
| Jupyter (JupyterLite, Binder, Colab) | Ejecutar código | Normalmente en pestaña externa |
| Simuladores externos (PhET, Wokwi, GeoGebra) | Experimentar con modelos | iframe tras verificar licencia e incrustación |
| Video interactivo (H5P) | Preguntas dentro del video | Requiere una plataforma que lo aloje |
Diagramas, gráficos y fórmulas
Utiliza los lenguajes y componentes ya incluidos en la plantilla, en lugar de capturas de pantalla de baja resolución.
Mermaid
```mermaid
flowchart LR
S[Sensor] --> C[ESP32]
C --> N[(Nube)]
N --> D[Dashboard]
```Chart.js
<div class="oc-chart"><canvas data-chart="bar">
Lectura,Lun,Mar,Mié,Jue,Vie
Temperatura (°C),21,23,26,24,22
Humedad (%),60,58,65,70,66
</canvas></div>KaTeX
Fórmula en línea: $V = I \cdot R$
$$F = \frac{9}{5}C + 32$$Construir una semana con IA
Cada curso incluye tres archivos en docs/IA/ para que ChatGPT, Claude, Codex u otra IA redacten una semana compatible con OpenClass, sin inventar clases ni recursos.
| Archivo | Para qué sirve |
|---|---|
INSTRUCCIONES-OPENCLASS.md | Contrato técnico: arquitectura, sintaxis, 13 layouts, imágenes, código, Mermaid, Chart, fórmulas, iframes, actividades, restricciones y validación. |
PLANTILLA-SEMANAL.md | Formulario para completar con curso, semana, tema, resultados, materiales, preguntas, actividades, evaluación y bibliografía (admite datos parciales). |
PROMPT-CREAR-SEMANA.md | Prompt maestro listo para copiar: caso conductor, ruta de la semana, tres recorridos, videos, microactividad, evaluación formativa, Notes sin solucionarios, verificación y reporte de pendientes. |
- Completa
docs/IA/PLANTILLA-SEMANAL.mdcon tu material (pega textos o adjunta documentos). - Copia el prompt de
PROMPT-CREAR-SEMANA.mden la IA y adjunta las instrucciones, la plantilla y el material. - Si la IA propone un bloque
opening, cópialo enweeks[]deopenclass.config.json. - Crea la semana:
npm run semana -- 3 --title "Sensores". Si el archivo ya existía, aún sin contenido elaborado, y cambiasteopening, añade--force-content(reemplaza el archivo completo de la semana 3). - Conserva las tres diapositivas generadas y pega desde la cuarta el Markdown de la IA; los solucionarios van a
docente/solucionarios/. - Ejecuta
npm run dev, revisa cada «PENDIENTE» y verifica cada enlace y video (ver Diseñar la semana).
Barra docente y atajos de presentación
Las herramientas están integradas al pie institucional, con acceso a pizarra, anotaciones y navegación.
El logotipo central del pie funciona como botón Volver al inicio y presenta una animación discreta. En portada se ocultan Home y este botón para respetar la composición. Utiliza las flechas, la barra espaciadora o un control remoto para avanzar o retroceder.
Vista del presentador: Build Tech
El botón del presentador ofrece dos vistas. Build Tech (T) abre una cabina privada en otra ventana, para tu segundo monitor: tus notas (Notes:) en letra grande con el punto de lectura resaltado, la diapositiva actual y la siguiente, la hora, el tiempo de clase (45, 60, 90 minutos o el que elijas; al terminar solo avisa), los controles de video y audio, la solución privada de cada pregunta y, si usas OpenClass Live, la votación y las preguntas de los estudiantes. Todo se ejecuta en la presentación compartida; Build Tech nunca se proyecta. Las notas clásicas de Reveal.js (S) siguen disponibles. Si la ventana no se abre, permite las ventanas emergentes para el sitio. Comparte en la videollamada solo la pestaña de la presentación.
En las notas puedes marcar el punto de lectura con [[0]], [[1]]… (fragmentos mostrados) y anclar una nota a un elemento con data-oc-nota="mapa" y [[#mapa]]; con [[#video:reproducir]] la nota ofrece un botón para ese video. Nada se ejecuta solo: tú pulsas.
Exportar a PDF
Reveal.js genera una página horizontal 16:9 por diapositiva desde el propio navegador, sin notas, soluciones, QR ni controles.
- Pulsa el botón de impresora Exportar a PDF del pie azul: se abre una pestaña con todas las diapositivas de la semana (equivale a añadir
?print-pdfa la dirección). - Cuando termina de prepararse se abre el diálogo de impresión (o pulsa Ctrl + P en Chrome o Edge).
- Destino: Guardar como PDF; márgenes: Ninguno; activa Gráficos de fondo. El navegador decide dónde se guarda.
data-oc-paginate="code". Los fragmentos aparecen ya desplegados en la página de su diapositiva. Cada video integrado o iframe se reemplaza por su título y su enlace.Validar, compilar y publicar
El sitio se compila como HTML/CSS/JS estático. Publica dist/, nunca el servidor de desarrollo Vite.
npm run test:estructura
npm run pages:check
npm run pages:build
npm run preview:pagesPublicar en GitHub Pages
- Crea un repositorio en GitHub y sube el curso (sin
node_modulesnidist; el.gitignoreincluido ya los excluye). - En el repositorio: Settings → Pages → Source: GitHub Actions.
- Cada
pushamainejecuta.github/workflows/deploy.yml: instala, compila con la base/<nombre-del-repositorio>/y publicadist/. - Abre
https://<usuario>.github.io/<repositorio>/y comprueba portal, semanas, imágenes y actividades.
La variable SITE_BASE determina el prefijo de ruta; los ejemplos de Markdown usan {{BASE_URL}} precisamente para respetarlo.
--assets, publicar el curso también publica esos logotipos. Hazlo solo con autorización o usa un repositorio y despliegue privados.El comando npm run publicar ejecuta Git (add, commit y push): no lo ejecutes hasta revisar el repositorio y confirmar que quieres publicar esos cambios.
Actualizar sin perder las clases redactadas
El generador rechaza carpetas no vacías. Para actualizar infraestructura, utiliza únicamente su opción segura sobre cursos OpenClass Reveal.js reconocidos.
# Desde la carpeta que contiene el curso:
npx create-openclass-uniminuto-revealjs@latest mi-curso-iot --update-theme
# (añade --assets "RUTA\recursos-institucionales" para reaplicar los recursos locales)
# Luego entra al curso y comprueba:
Set-Location '..\mi-curso-iot'
npm install
npm run test:estructura
npm run pages:build--update-theme crea respaldos de la infraestructura sustituida, conserva los Markdown académicos y la configuración. No utilices --force ni ejecutes sobre proyectos Slidev.Graphify es opcional para el mantenimiento técnico; no forma parte del flujo obligatorio para redactar semanas.
Errores comunes y cómo resolverlos
Estas son las incidencias que más se repiten al crear una OpenClass.
El puerto 8600 ya está ocupado
Ejecuta npm run dev -- --port 8610. Evita cerrar otro curso que tengas abierto.
El generador dice “Carpeta no vacía”
Usa un directorio nuevo. Para actualizar uno creado previamente con este generador, utiliza --update-theme; nunca sobreescribas indiscriminadamente.
La semana nueva no aparece en el portal
Ejecuta npm run semana -- N o modifica generation.activeWeeks y luego npm run config.
Un iframe externo está en blanco
La página puede prohibir ser incrustada. Prueba abrirla en otra pestaña o utiliza una actividad HTML local dentro de public/actividades.
Las fórmulas o plugins no cargan sin internet
La configuración Math actual puede usar CDN. Valida conectividad y evita prometer uso desconectado hasta comprobar las dependencias.
El PowerShell bloquea scripts .ps1
Para crear cursos usa node bin/create-openclass-uniminuto-revealjs.mjs; no requiere cambiar la política global de ejecución.
Aparecen advertencias npm audit o chunks grandes
Un build PASS no elimina advertencias de seguridad. Revisa npm audit por dependencia y evita npm audit fix --force sin evaluar cambios incompatibles.
Encuestas, preguntas y participación en vivo
La estructura incluye Seminar, Poll y Questions, pero permanecen desactivados para no simular interacción multiusuario inexistente.
Para activarlos se necesita un servidor de tiempo real compatible, conexiones seguras HTTPS/WSS, salas, autenticación o tokens, moderación y protección contra abuso. Zoom puede funcionar como canal de videollamada mientras OpenClass se abre como web interactiva, pero una integración embebida en Zoom requiere un proyecto y validación propios.
OpenClass 1.2.0: Build Tech permite notas, relojes y controles multimedia; la exportación PDF se abre desde el pie de la presentación. El adaptador OpenClass Live v0.2 permanece apagado por defecto y exige un servicio separado con protocolo v2. No activarlo contra un servidor v0.1. Al crear encuestas solo se envían enunciado, código, tipo y opciones; las respuestas correctas y la explicación permanecen locales hasta la revelación explícita. Zoom embebido sigue pendiente.