shiping
면접·시험 도우미, AI가 실시간으로 풀이 아이디어를 제공
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗R2 Quiz es una versión light y personal de Kahoot orientada a aulas, reuniones y actividades con logística simple. La interfaz busca ser elegante, legible y rápida, con foco en una experiencia de trivia en vivo que no dependa de un backend grande.
preguntas.json — banco de preguntas.host.html — pantalla del anfitrión.player.html — pantalla del jugador.estilos.css — identidad visual, responsive y refinamiento del UI.api/ably-key.js — endpoint de lectura de entorno para acceder a la API key de Ably.ABLY_API_KEY.Si el host cancela la sala, arranca una ronda nueva o cierra la pestaña, la partida termina para todos:
host-<código> y publica un único mensaje sala-cerrada.sala-cerrada o la salida del host de la presencia (Ably la emite al cerrar la pestaña).La referencia visual del usuario sugiere un leaderboard con una estructura de ranking y un cierre con podio al final. La idea es usar una composición clara, con barras de clasificación, badges de posición, avatar emoji y una estética digital premium.
ABLY_API_KEY en Vercel./host.html y /player.html como rutas de acceso..claude/settings.json: al final de cada turno de Claude Code se ejecuta ~/.claude/hooks/auto-commit.js, que hace git add -A, commitea con un mensaje chore: auto-commit — <archivos> y hace git push al remoto de GitHub..env está en .gitignore y ABLY_API_KEY vive solo en Vercel.El host no lee preguntas.json directamente: primero carga el catálogo concursos.json, y cada entrada del catálogo apunta a su propio archivo de preguntas. Para publicar un cuestionario nuevo:
Crear el archivo de preguntas (por ejemplo preguntas-mi-tema.json) en la raíz del repo, con esta forma:
{
"titulo": "Nombre del cuestionario",
"preguntas": [
{
"pregunta": "¿Texto de la pregunta?",
"opciones": ["Opción A", "Opción B", "Opción C", "Opción D"],
"correcta": 0,
"tiempo": 15,
"explicacion": "Texto que se muestra al revelar la respuesta correcta."
}
]
}
correcta: índice de la opción correcta en el arreglo opciones, empieza en 0.opciones: no hay límite fijo de cantidad; lo habitual son 4.tiempo: segundos para responder. Si se omite, el host usa 15 por defecto.explicacion: opcional. Si falta o va vacía, el host genera un texto de respaldo automático con la opción correcta.Registrar el cuestionario en concursos.json, agregando un objeto al arreglo concursos:
{
"id": "mi-tema",
"titulo": "Nombre visible en el catálogo",
"categoriaId": "pruebas",
"descripcion": "Descripción corta que ve el host antes de abrir la sala.",
"recomendado": "Cuándo conviene usar este cuestionario (opcional).",
"archivo": "preguntas-mi-tema.json"
}
id: identificador único del concurso dentro del catálogo.categoriaId: debe coincidir con un id de concursos.categorias. Si no coincide con ninguno, el concurso aparece igual, agrupado bajo "Sin categoría".archivo: ruta relativa al JSON de preguntas creado en el paso 1.recomendado: opcional; si se omite, esa línea no se muestra en la ficha del concurso.(Opcional) Declarar una categoría nueva agregando un objeto a concursos.categorias:
{ "id": "mi-categoria", "nombre": "Nombre del filtro", "descripcion": "Texto de apoyo del grupo." }
Verificar en host.html: recargar la pantalla de catálogo (login de host) y confirmar que la tarjeta nueva aparece, abre su ficha con el conteo correcto de preguntas y permite presentar la sala.
No hace falta tocar host.html, player.html ni estilos.css para sumar un cuestionario: todo pasa por los dos archivos JSON de arriba.