尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗Pulsador de concurso con móviles, estilo Kahoot. La pantalla del presentador se ve en la tele (portátil conectado por HDMI); cada jugador usa su móvil como pulsador, sin instalar nada. Web 100 % estática (GitHub Pages) con WebRTC mediante PeerJS.
Estado: fase 10 — concurso por secciones con equipos, cargado desde una hoja de cálculo; la tele es el espectáculo (tema de Halloween, con un decorado animado, música y efectos distintos en cada sección) y el presentador lo maneja desde su móvil. Se juegan Pulsador, Test (como «¿Quién quiere ser millonario?»), Verdad o mentira, Dos verdades y una mentira, ¿Quién es más probable…?, Estimación, Parar el contador, Duelo de reflejos, Libre (pruebas tipo «Fit o Fat» con cronómetro o contador), Palabras secretas (mímica, Tabú, descríbelo, tararéalo), Agita el móvil y La gran apuesta. Antes de empezar se eligen los juegos de la noche y se votan los castigos del equipo que pierda (al final, ruleta).
public/plantilla-concurso.xlsx). Ábrela con Excel o Google Sheets (para cargarla: Archivo → Descargar → .xlsx).Abre host.html en el portátil conectado a la tele y pon la ventana a pantalla completa. Empieza en la
Preparación: carga la hoja y la carpeta del concurso (canciones y caras).
Tu móvil como mando: escanea el QR «Mando del presentador» de la preparación y confirma en el portátil (Enter). Desde entonces tu móvil se reconecta solo, también si lo bloqueas o cambias de app. Ves cada pregunta con su respuesta antes de lanzarla.
Presentar el concurso: el título en grande con su canción (hueco «Título del concurso» de 🎵 Música). Un toque o una tecla y sale el QR grande para que se conecte la gente: eligen nombre e icono y, si hay equipos, su equipo. Comprueba los equipos en la tele (se puede mover a alguien) y pulsa Presentar los equipos: los equipos se cierran y sale «Zombies contra Hombres Lobo» con su música (hueco «Presentación de equipos»).
Castigos: todos eligen en el móvil sus 3 favoritos de la lista (la tele va contando los votos). Siguiente cierra la votación: los 3 más votados (empates al azar) van a la ruleta.
Portada → presentación de cada sección → preguntas → marcador → … → final con podios → ruleta del castigo (Espacio o «Girar» en el mando): gira 6 s y sale el castigo del equipo que ha quedado último.
En el Pulsador: «Mostrar pregunta» (la pone en grande en la tele), «Abrir turno» → a los 300 ms tele y móviles pasan a ¡Pulsad! a la vez. La primera pulsación llena la tele con el ganador, su tiempo y el orden de los siguientes (con «casi empate» si la diferencia es menor de 30 ms). Luego Acierto (suma los puntos de la sección) o Fallo: rebote al resto (bloquea a quien falló y reabre el turno), «Mostrar respuesta» y «Siguiente pregunta».
Canciones/, con el nombre que pone la hoja (sin tildes ni mayúsculas, da igual). En la
preparación, la tele dice si falta alguna.Quien pulse antes de abrir el turno queda bloqueado en esa pregunta (se puede desactivar en Ajustes o perdonar con «Desbloquear»).
Test = «¿Quién quiere ser millonario?»: concursa una persona cada vez, alternando equipos (pregunta 1 → Zombies, pregunta 2 → Hombres Lobo…) y dentro de cada equipo en el orden que eligió su portavoz. La plantilla trae (columna «Dificultad»; vacía = por tercios), que valen (columna Puntos del Test en la pestaña Concurso: «2,5,10»). Cada una suena con su música (fácil, media o difícil). No hay reloj: desde el mando vas (una a una o todas); el concursante elige en su móvil (tú ves cuál) y la cuando la dé por definitiva (se pone amarilla con letras negras; también puedes marcar otra si la dice en voz alta); luego : verde.
Vídeo de una sección: en la carpeta del concurso, Vídeos/<nombre de la sección>.mp4 (p. ej. el esqueleto del
twerking): sale en la tele a los dos lados, en bucle y sin sonido, en la presentación y en las pruebas de esa sección.
Con fondo negro, el negro se vuelve transparente. El entorno Discoteca (columna Entorno) pone además focos de colores.
En el móvil de cada concursante, bajo su nombre, se ve en qué sección está (nº de sección, tipo, pregunta y puntos en juego) y su equipo con el puesto. Tocando sus puntos se abre el marcador (equipos y concursantes, en directo) sin salir de lo que está pasando: «Volver al juego» lo cierra.
Parar y seguir otro día: ⏸ Parar por hoy (en la barra de la tele o en el mando, pestaña Secciones). La tele enseña «Continuará…» con el marcador y por dónde ibais, y los móviles «Concurso en pausa». Todo queda guardado en el portátil y, mientras esté en pausa, no caduca: otro día, al abrir la tele, ▶ Seguir el concurso (o Espacio en la pantalla de pausa) y seguís justo donde lo dejasteis. Los jugadores vuelven con el mismo código y su mismo nombre: si el móvil ha perdido sus datos (Safari los borra a los 7 días) o es otro móvil, la tele lo reconoce por el nombre y sigue con sus puntos y su equipo. Para seguir en otro ordenador: 💾 Copia en archivo y, allí, 📂 Seguir un concurso guardado (en la preparación) o 📂 Abrir una copia guardada (al abrir la tele). Las canciones y las caras no van en la copia: vuelve a leer la carpeta del concurso.
Probar sin móviles: en la barra de la tele (abajo; mueve el ratón si no se ve), 🤖 Pruebas: «+1», «+5» o «Llenar los huecos» mete concursantes de prueba («🤖 Lola», «🤖 Paco»…) con equipo, icono y color, y juegan solos al azar: pulsan, responden, votan, eligen en el millonario, votan en el Público, ordenan su equipo si son portavoces y cuentan en Libre, hacen mímica (y a veces pitan falta), agitan, apuestan y votan castigos. Con «Responden solos» apagado, solo lo hacen al pulsar «¡Responded ya!». «Quitarlos» los saca. Tú llevas el concurso como siempre, desde el teclado o el mando.
El mando tiene cuatro pestañas: Juego (lo que toca ahora), Jugadores (puntos ±, puntos de equipo, mover de equipo, quitar), Secciones (saltar a cualquiera) y 🎮 Jugar: para jugar tú también con el mismo móvil (no abras la página de jugador en otra pestaña: el móvil congela la que no ves y se desconecta). Solo juegas en las secciones con «El presentador juega» (por defecto Votación, Contador, Reflejos y Libre); en las demás, como ves las respuestas, tu móvil dice «🎤 Presentas» y la tele no cuenta contigo (ni en los turnos ni en el millonario).
Teclado del portátil (por si el mando falla): Espacio (abrir turno / siguiente), ← →, P pregunta, V respuesta, A acierto, F fallo, R reiniciar, M marcador, D depuración. En Ajustes se cambian el umbral de casi empate, la ventana de decisión y la apertura programada.
Cada móvil tiene una conexión distinta: uno puede tardar 5 ms en hacer llegar su pulsación y otro 150 ms (los móviles en ahorro de energía responden lento a la wifi). Si ganara quien llega antes, ganaría el de mejor conexión. Por eso:
event.timeStamp), traducido al reloj del presentador.| Fuente de error | Magnitud típica | ¿Se corrige? |
|---|---|---|
| Asimetría de la red al sincronizar (ida ≠ vuelta) | wifi: ±1–5 ms (peor caso ±10 ms) | Se acota: el error nunca supera la mitad del RTT de la mejor muestra; el panel D lo muestra por jugador |
| Pantalla táctil y sistema (del dedo al evento) | 10–60 ms, distinto en cada modelo | No: el navegador no puede saberlo. Es la mayor fuente de error |
| Resolución del reloj del navegador | 0,1–1 ms | Despreciable |
| Deriva entre relojes | < 1 ms entre resincronizaciones | Sí (resincronización cada 15 s) |
| Móvil bloqueado / app en segundo plano | El reloj puede pararse | Resincroniza al volver |
| Pulsación que llega más de 150 ms tarde | Rara en wifi | Entra en la lista, pero no quita el puesto al ganador; el panel D la marca |
En la práctica: con todos en la misma wifi, el orden es fiable cuando la diferencia supera 30–50 ms. Por debajo de eso decide más el hardware de cada móvil que el jugador: por eso se marca «casi empate» por debajo de 30 ms. Sin sincronizar, ordenando por llegada, el sesgo entre un móvil rápido y uno lento era de 50–200 ms.
Sí, y es fácil para quien sepa programar: la hora de la pulsación la pone el móvil. Abriendo la página de jugador en un ordenador, con una línea en la consola del navegador se puede enviar una pulsación con la hora adelantada. El presentador recorta lo físicamente imposible (una pulsación anterior a su llegada en más de 250 ms o del doble del RTT, o posterior a su llegada), así que la ventaja máxima de un tramposo queda en unos 250 ms, y el panel D marca esas pulsaciones como «recortadas». Impedirlo del todo es imposible sin confiar en el reloj del móvil: lo único que no se puede falsear es el orden de llegada, que es justo lo que no es justo. Entre amigos, suficiente.
src/shared/peerConfig.js.npm install
npm run dev
Vite muestra dos direcciones:
➜ Local: https://localhost:5173/
➜ Network: https://192.168.1.50:5173/
host.html (por ejemplo https://192.168.1.50:5173/host.html).
No uses localhost: el QR apuntaría a localhost y los móviles no podrían abrirlo.@vitejs/plugin-basic-ssl). Pulsa «Configuración avanzada → Continuar».¿Por qué HTTPS? Los móviles solo permiten Wake Lock y otras API en contexto seguro, y localhost no sirve
desde otro dispositivo.
Si Windows pregunta por el firewall al arrancar Vite, permite el acceso en redes privadas.
Para probar sin móvil: abre host.html en una pestaña y la dirección del QR en otras. Dos pestañas del mismo
navegador serían el mismo jugador (comparten localStorage), así que añade &perfil=2, &perfil=3… a la dirección
de cada pestaña de jugador. Si solo vas a usar el portátil, npm run dev:http arranca sin certificado en
http://localhost:5174/host.html.
npm test
Cubren la lógica que no depende de la red (src/core, src/shared).
Crea un repositorio vacío en GitHub (por ejemplo concurso), sin README.
Conecta y sube el código:
git remote add origin https://github.com/TU_USUARIO/concurso.git
git push -u origin main
En GitHub: Settings → Pages → Build and deployment → Source: GitHub Actions.
Cada push a main ejecuta .github/workflows/deploy.yml (tests + build + publicación). Al terminar, la web
queda en https://TU_USUARIO.github.io/concurso/:
https://TU_USUARIO.github.io/concurso/host.htmlhttps://TU_USUARIO.github.io/concurso/ y escriben el código.Ver CLAUDE.md para las decisiones, el protocolo de mensajes y el algoritmo de sincronización.
concurso-del-ano-v1-<CÓDIGO>; los móviles se
conectan a ese ID. Después la comunicación es directa (P2P) dentro de tu wifi.En las secciones de respuestas (Verdad o mentira, Dos verdades, Votación, Estimación) todos responden a la vez desde el móvil: «Abrir respuestas» → cuenta atrás (se cierra sola al acabar o cuando han respondido todos) → «Revelar» (respuesta correcta, recuento, quién suma) → «Siguiente pregunta». La primera respuesta es la buena.
Parar el contador: «¡Empezar!» → cuenta atrás 3-2-1 → el reloj corre en la tele y en los móviles (visible, a ciegas o desaparece a los N segundos, según la fila) → cada uno pulsa STOP → «Revelar» ordena por cercanía al objetivo. Cuenta el instante exacto del toque con el reloj sincronizado.
Duelo de reflejos: «Poner en rojo» → entre 2 y 6 s después, al azar, todo se pone verde (tele y móviles a la vez) → gana la reacción más rápida. Quien pulsa en rojo queda fuera de esa ronda. En modo «Duelo», el presentador elige en el mando a los dos que juegan.
Libre («Fit o Fat»): cada fila es una prueba. En el mando marcas quién participa (jugadores o equipos, según la columna Participan) y la tele la presenta. Con «Jugadores» y equipos, el mando los agrupa por equipo: marcas quién sale de cada uno y los puntos son para él (y suman a su equipo). Con «Equipos», van al equipo entero.
Canciones/Marcar el golpe/ («Golpe Cancion n1»).
«¡Que suene la canción!» hace una cuenta atrás 3-2-1 en la tele y la pone entera; bailan y marcan el golpe (desde el móvil no se hace nada). En el
mando das a cada uno una nota del 1 al 10 (mientras suena o al acabar; tocar la misma nota la quita) y «Dar los
puntos»: cada uno se lleva su nota. La tele enseña las notas al lado de cada nombre y, al final, la clasificación.Palabras secretas: cada turno es de un equipo (se alternan; «Turnos por equipo» y «Segundos por turno» en Ajustes) y lo hace el siguiente de ese equipo, en el orden de su portavoz. Su móvil le enseña la tarjeta (palabra, modo y, en Tabú, las prohibidas) y pulsa «¡Empezar!»; luego «✓ ¡Acertada!» o «Pasar» con cada una. Su equipo adivina en voz alta; el equipo rival ve la misma tarjeta en sus móviles y pulsa ¡Tabú! (o ¡Falta!) si hace trampa. La tele enseña el reloj, el modo y las que van saliendo, nunca la palabra en juego. Tú lo ves todo en el mando y puedes corregir (acertada, pasar, falta, deshacer). Cada acertada da los puntos de la sección al equipo. Modos: 🎭 Mímica, 🤐 Tabú, 🗣️ Descríbelo y 🎵 Tararéalo; las tarjetas no se repiten hasta que salen todas.
Agita el móvil: «¡Empezar!» → 3-2-1 → todos agitan el móvil durante los segundos de la fila; la tele enseña la carrera en directo (y el total de cada equipo). Gana quien más agite (puntos por puestos). En iPhone hay que tocar «Activar el sensor» la primera vez; sin sensor, se juega dando toques a la pantalla.
La gran apuesta (para el final): el portavoz de cada equipo (o cada uno, sin equipos) apuesta desde el móvil cuántos puntos se juega, entre 0 y los que tiene (mínimo 5). «Cerrar apuestas» → sale la pregunta y responden → «Revelar»: quien acierta gana lo apostado y quien falla lo pierde.
Squid Games: cuatro juegos seguidos desde el móvil en los que la gente se va eliminando. Al empezar, cada uno lleva un número (alguien se lleva el 456). Cada eliminado mete los puntos de la sección en la hucha y, al final, los supervivientes se la reparten. Cada juego se empieza desde el mando (o Espacio) con una cuenta 3-2-1:
Squid/ (o sueltos en Música/): se reconocen por el nombre del archivo. Los que falten, la tele
los genera.Lobos contra vampiros (el colofón: el juego del pañuelo): el primer equipo de la hoja son los hombres lobo y el segundo, los vampiros. Cada duelo, uno de cada equipo: «🎲 Sortear» (entre los que aún no han salido) o elegir tú la pareja en secreto en el mando. En la tele, una ruleta de caras se para en los dos elegidos («¡Al sillón!»). «▶ ¡Preparados… YA!» (o Espacio) → 3-2-1 → silbato: corren a por el pañuelo del centro y vuelven a su sillón. Tú dices quién gana en el mando (también «Salida nula» y «Deshacer»). Cada duelo ganado da los puntos de la sección (10) al que gana. Salen todos una vez; si un equipo tiene menos gente, alguno repite. Al final, el equipo con más duelos ganados. Los móviles avisan a quien le toca («¡TE TOCA!» y «¡CORRE!», con vibración).
Millonario/ (sus 7 canciones), Caras/ (una foto por persona, «Rodri, Rodrigo.jpg») y
Música/<Momento>/ o Música/<Sección>/<Momento>/ (momentos con el nombre de la ventana de música) y Canciones/
(las de las pruebas, con el nombre que pone la hoja en «Canción»; se pueden ordenar en subcarpetas:
Canciones/Adivina la canción/ y Canciones/Marcar el golpe/). La tele lo copia
todo al portátil y recuerda la carpeta (Chrome y Edge): luego basta 📁 Volver a leer. Si se pierde la sala o se
crea otra, las canciones y las caras siguen ahí. Esa carpeta no va al repositorio, que es público.