- JavaScript 77.8%
- CSS 13%
- HTML 7.9%
- Shell 0.9%
- Awk 0.2%
- Other 0.2%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| install-files | ||
| locale | ||
| scripts | ||
| src | ||
| .codex | ||
| .gitignore | ||
| PLAN_ESTABILIDAD_SESION.md | ||
| PROXIMAS_MEJORAS_PLAN.md | ||
| README.md | ||
| REVISION_MEJORAS.md | ||
| STAGE_SETUP.md | ||
EduHoot
Valencià
EduHoot és una aplicació tipus Kahoot per a l’aula: pots crear, importar i llançar qüestionaris amb imatges, vídeos i temps configurables. Admet CSV (inclosos els generats per IA) i importació de Kahoot públic. Està inspirada i reutilitza idees de llixhoot, llixhoot en lliurex i qplay.
- Modes: Només jo (efímer sense login), Per enllaç/Públic (persistents encara que no hi haja sessió) i control de permisos per a clonar.
- Idiomes: valencià, castellà i anglès (autodetecta el navegador i es pot canviar).
- Host: botó de “Saltar pregunta”, indicador de progrés i reentrada ràpida quan algun jugador perd la connexió.
- Importació Kahoot: enganxa la URL pública i juga des d’EduHoot.
Llicència: Attribution-ShareAlike 4.0 International (CC BY-SA 4.0).
Inici ràpid
cd src && npm install- Inicia MongoDB local (
sudo systemctl start mongod) o defineixMONGO_URL. - Executa
node server/server.js. - Obri
http://localhost:3000/create/.
Accés amb Google
Configura un client OAuth 2.0 de Google amb la URL de retorn https://tu-dominio/api/auth/google/callback (o http://localhost:3000/api/auth/google/callback en local) i arranca el servidor amb:
GOOGLE_CLIENT_IDGOOGLE_CLIENT_SECRETPUBLIC_BASE_URL(recomanat en producció, per exemplehttps://tu-dominio)
El primer usuari que entra amb Google es crea com admin; els següents entren com editor. Si ja existeix un usuari amb el mateix email, se li enllaça Google i conserva el rol.
En la pantalla de create, el bloc d'alta ràpida mostra només el botó de Google. El botó Entrar/Compte continua obrint el modal d'accés amb email per a usuaris antics.
Deploy simple al VPS
- Plantilla segura versionable:
scripts/deploy.example.sh - Recomanat: copia-la a
scripts/deploy.sh, ompli les teues dades i no la puges al repo. - Exemple:
DEPLOY_TARGET=usuari@vps:/var/www/eduhoot bash scripts/deploy.example.sh - Amb reinici remot opcional:
DEPLOY_TARGET=usuari@vps:/var/www/eduhoot DEPLOY_REMOTE_CMD='cd /var/www/eduhoot/src && npm ci --omit=dev && pm2 restart eduhoot' bash scripts/deploy.example.sh - Per previsualitzar canvis sense copiar:
DRY_RUN=1 bash scripts/deploy.example.sh
Funcions clau
- Importació de CSV i de contingut generat per IA.
- Importació pública de Kahoot per URL o ID.
- Control de visibilitat (privat, per enllaç, públic) i permisos de clonació.
- Botó de “Saltar pregunta” i marcador de progrés.
- Recuperació ràpida de jugadors quan la connexió cau.
Actualitzacions recents
- Landing principal redissenyada amb accessos separats, selector d’idioma i footer comú amb el logo d’EduTicTac.
- Biblioteca amb ordenació per data i alfabètica, tags rellevants i estadístiques de partides.
- El mode Solo ara registra partides i mostra estadístiques visibles al ranking i un feedback més clar.
Enllaços directes al mode Solo
- Quiz concret:
/solo/?id=<quizId> - Una etiqueta:
/solo/?tag=musica - Diverses etiquetes amb coincidència de qualsevol:
/solo/?tags=musica,primaria - Diverses etiquetes exigint totes:
/solo/?tags=musica,primaria&tagMode=all
Castellano
EduHoot es una aplicación tipo Kahoot para el aula: crea, importa y lanza quizzes con imágenes, vídeos y tiempos configurables. Admite CSV (también generados por IA) e importación de Kahoot público. Se inspira y reutiliza ideas de llixhoot, llixhoot en lliurex y qplay.
- Modos: Solo yo (efímero sin login), Por enlace/Público (persisten aunque no haya sesión) y control de permisos para clonar.
- Idiomas: valenciano, castellano e inglés (autodetecta el navegador y se puede cambiar).
- Host: botón de “Saltar pregunta”, indicador de progreso y reincorporación rápida cuando los jugadores pierden la conexión.
- Importación Kahoot: pega la URL pública y juega desde EduHoot.
Licencia: Attribution-ShareAlike 4.0 International (CC BY-SA 4.0).
Inicio rápido
cd src && npm install- Inicia MongoDB local (
sudo systemctl start mongod) o configuraMONGO_URL. - Ejecuta
node server/server.js. - Abre
http://localhost:3000/create/.
Acceso con Google
Configura un cliente OAuth 2.0 de Google con la URL de retorno https://tu-dominio/api/auth/google/callback (o http://localhost:3000/api/auth/google/callback en local) y arranca el servidor con:
GOOGLE_CLIENT_IDGOOGLE_CLIENT_SECRETPUBLIC_BASE_URL(recomendado en producción, por ejemplohttps://tu-dominio)
El primer usuario que entra con Google se crea como admin; los siguientes entran como editor. Si ya existe un usuario con el mismo email, se le enlaza Google y conserva su rol.
En la pantalla de create, el bloque de alta rápida muestra solo el botón de Google. El botón Entrar/Cuenta sigue abriendo el modal de acceso con email para usuarios antiguos.
Deploy simple al VPS
- Plantilla segura versionable:
scripts/deploy.example.sh - Recomendado: cópiala a
scripts/deploy.sh, rellena tus datos y no la subas al repo. - Ejemplo:
DEPLOY_TARGET=usuario@vps:/var/www/eduhoot bash scripts/deploy.example.sh - Con reinicio remoto opcional:
DEPLOY_TARGET=usuario@vps:/var/www/eduhoot DEPLOY_REMOTE_CMD='cd /var/www/eduhoot/src && npm ci --omit=dev && pm2 restart eduhoot' bash scripts/deploy.example.sh - Para previsualizar cambios sin copiar:
DRY_RUN=1 bash scripts/deploy.example.sh
Entorno stage (preproducción)
- Guía completa:
STAGE_SETUP.md - Plantilla de deploy stage:
scripts/deploy-stage.example.sh - Servicio systemd stage:
install-files/service/llixhoot-stage-server.service - Config Nginx stage:
install-files/nginx/llixhoot-stage.conf - Variables de entorno stage:
install-files/stage.env.example
Flujo recomendado:
- Monta stage una vez siguiendo
STAGE_SETUP.md. - Despliega cambios a
/opt/llixhoot-stage/srcconscripts/deploy-stage.sh. - Valida en
stage.tu-dominio(flujos host/player, login y CSV). - Solo después promueve a producción.
Funciones clave
- Importación de CSV y de contenido generado por IA.
- Importación pública de Kahoot por URL o ID.
- Control de visibilidad (privado, por enlace, público) y permisos para clonar.
- Botón de “Saltar pregunta” y contador de progreso.
- Reincorporación ágil de jugadores si se cae la conexión.
Actualizaciones recientes
- Landing principal renovada con accesos diferenciados, selector de idioma y footer compartido con el logo de EduTicTac.
- Biblioteca con orden por fecha y alfabético, etiquetas relevantes y estadísticas visibles en cada ficha.
- Modo Solo registra partidas y mejora el ranking/feedback, además de mostrar estadísticas de partidas jugadas.
Enlaces directos al modo Solo
- Quiz concreto:
/solo/?id=<quizId> - Una etiqueta:
/solo/?tag=musica - Varias etiquetas con coincidencia de cualquiera:
/solo/?tags=musica,primaria - Varias etiquetas exigiendo todas:
/solo/?tags=musica,primaria&tagMode=all
English
EduHoot is a Kahoot-like app for classrooms: create, import, and launch quizzes with images, videos, and configurable timers. Supports CSV (including AI-generated) and public Kahoot import. It’s inspired by and reuses ideas from llixhoot, llixhoot on lliurex, and qplay.
- Modes: Only me (ephemeral without login), By link/Public (persist even without login), with clone-permission control.
- Languages: Valencian, Spanish, English (auto-detects browser and is switchable).
- Host: “Skip question” button, progress counter, and quick player rejoin when connections drop.
- Kahoot import: paste a public URL and play it from EduHoot.
License: Attribution-ShareAlike 4.0 International (CC BY-SA 4.0).
Quick start
cd src && npm install- Start local MongoDB (
sudo systemctl start mongod) or setMONGO_URL. - Run
node server/server.js. - Open
http://localhost:3000/create/.
Google Sign-In
Create a Google OAuth 2.0 client with the redirect URL https://your-domain/api/auth/google/callback (or http://localhost:3000/api/auth/google/callback locally) and start the server with:
GOOGLE_CLIENT_IDGOOGLE_CLIENT_SECRETPUBLIC_BASE_URL(recommended in production, for examplehttps://your-domain)
The first Google user becomes admin; later users become editor. If a user with the same email already exists, Google is linked to that account and the current role is preserved.
Simple VPS Deploy
- Safe versioned template:
scripts/deploy.example.sh - Recommended: copy it to
scripts/deploy.sh, fill your real values, and keep it out of the repo. - Example:
DEPLOY_TARGET=user@vps:/var/www/eduhoot bash scripts/deploy.example.sh - With optional remote restart:
DEPLOY_TARGET=user@vps:/var/www/eduhoot DEPLOY_REMOTE_CMD='cd /var/www/eduhoot/src && npm ci --omit=dev && pm2 restart eduhoot' bash scripts/deploy.example.sh - Preview without copying:
DRY_RUN=1 bash scripts/deploy.example.sh
Stage Environment (pre-production)
- Full guide:
STAGE_SETUP.md - Stage deploy template:
scripts/deploy-stage.example.sh - Stage systemd service:
install-files/service/llixhoot-stage-server.service - Stage Nginx config:
install-files/nginx/llixhoot-stage.conf - Stage environment variables:
install-files/stage.env.example
Recommended flow:
- Set up stage once using
STAGE_SETUP.md. - Deploy changes to
/opt/llixhoot-stage/srcviascripts/deploy-stage.sh. - Validate on
stage.your-domain(host/player flows, login, CSV import). - Promote to production only after stage is green.
Key features
- CSV import and AI-generated content ingestion.
- Public Kahoot import via URL or ID.
- Visibility controls (private, by link, public) with clone permissions.
- “Skip question” button and progress tracking.
- Fast player rejoin if the connection drops.
Recent updates
- Redesigned landing with separate entry points, language selector, and shared footer pointing to EduTicTac.
- Library now supports ordering by date/alpha, shows only related tags, and surfaces quiz stats.
- Solo mode logs plays so the ranking/counts include solo sessions, plus brighter feedback and stats.
Solo Deep Links
- Specific quiz:
/solo/?id=<quizId> - One tag:
/solo/?tag=music - Multiple tags matching any:
/solo/?tags=music,primary - Multiple tags requiring all:
/solo/?tags=music,primary&tagMode=all