Skill: Quiz ao vivo no slide
Fonte da verdade: decisões congeladas em BRAINSTORM_MIRA_QUIZ.md (2026-06-30). O /mira-quiz reaproveita a arquitetura validada do mira-survey: Google Forms como interface, Google Sheets como fonte viva e leitura pelo endpoint gviz com JSONP para funcionar por file://.
Modelo mental
O Mira não hospeda o jogo. Ele monta um slide que lê respostas já coletadas pelo Google Forms:
- A plateia abre o link de votação pelo QR-code.
- Cada envio cai na planilha de respostas vinculada ao Forms.
- O slide lê a planilha a cada poucos segundos pelo
gviz.
- Antes da revelação, mostra pergunta, QR, alternativas e total de respostas.
- Depois da revelação, marca a correta em verde e mostra contagem + percentual por alternativa.
Dados obrigatórios
Confirme estes dados antes de gerar o slide. Se faltar qualquer item, pergunte e pare.
| Dado |
Exemplo |
Uso |
| Link de votação |
forms.gle/... ou docs.google.com/forms/... |
vira QR-code inline |
| Link da planilha |
docs.google.com/spreadsheets/d/<ID>/... |
fonte viva de respostas |
| Pergunta |
Qual destes é um modelo multimodal? |
título do quiz |
| Alternativas |
GPT-4o, Excel, Photoshop, PowerPoint |
cards de resposta |
| Correta |
GPT-4o |
destaque na revelação |
| Campo de nome |
primeira coluna textual depois do timestamp, ou índice informado |
ranking básico |
Texto sugerido se faltar algo:
Para montar o quiz ao vivo eu preciso do link de votação do Google Forms, do link da planilha de respostas, da pergunta, das alternativas e da resposta correta. A planilha precisa estar pública como "qualquer pessoa com o link -> Leitor". Pode colar esses dados aqui?
Formulário esperado
O Google Forms deve ter, no mínimo:
- Um campo de identificação (nome ou apelido).
- Uma pergunta de múltipla escolha com as mesmas alternativas do slide.
Na planilha, a skill assume (salvo se o usuário indicar outro cabeçalho):
- A última coluna é a resposta do quiz.
- A primeira coluna textual depois do timestamp é o nome/apelido.
Se a planilha tiver várias perguntas, avise que o slide usará a última coluna e peça confirmação.
Verificação da planilha
Extraia o SHEET_ID do link da planilha com /spreadsheets/d/<ID>/ e teste o mesmo endpoint que o slide usará:
curl -sL "https://docs.google.com/spreadsheets/d/<SHEET_ID>/gviz/tq?tqx=out:json" | head -c 800
Se vier google.visualization.Query.setResponse({...}) com "status":"ok", a planilha está legível. Se vier HTML de login ou erro, peça para o usuário ajustar o compartilhamento para qualquer pessoa com o link -> Leitor.
Nunca use "Publicar na web -> CSV". Esse endpoint pode ficar cacheado por minutos. O quiz ao vivo usa só gviz + JSONP.
QR-code local
O QR do link de votação é gerado localmente e embutido como SVG inline, igual ao /mira-qrcode e ao /mira-survey. Não use npx qrcode, API externa nem CDN.
- Instale o pacote uma vez numa pasta temp reaproveitável, se ainda não existir:
npm install qrcode --no-save --prefix "<pasta-temp>"
- Gere o SVG:
node -e "require('qrcode').toString('LINK_VOTACAO',{type:'svg',errorCorrectionLevel:'M',margin:0,color:{dark:'#0a0a0a',light:'#ffffff'}},(e,s)=>{if(e)throw e;process.stdout.write(s)})"
- Cole o
<svg> inteiro dentro de .qr-card, com o comentário:
<!-- QR gerado localmente (pacote npm qrcode, ECC M) para LINK_VOTACAO -->
O link de votação não aparece por extenso no slide.
Estados
O slide tem três estados:
votando: mostra pergunta, alternativas neutras, QR-code, total de respostas e status ao vivo. Não mostra percentuais.
revelando: pausa curta, cards respiram e incorretas reduzem brilho.
revelado: correta em verde #35D07F, contagens e percentuais visíveis, barras proporcionais preenchidas.
Comandos:
- Botão discreto "Revelar".
- Tecla
R para revelar.
- Tecla
K para alternar ranking depois da revelação.
- Tecla
V para voltar ao estado de votação durante testes.
Direção visual
Padrão da v1: cards de alternativas com barras internas. Melhor formato para esconder porcentagens antes da revelação e destacar a correta depois.
- Fundo escuro Mira, laranja
#FF904D como identidade.
- Correta em verde
#35D07F, fundo translúcido e halo leve.
- Incorretas continuam legíveis, com menos destaque após revelar.
- Check discreto na correta.
- Barras aparecem só depois da revelação.
- Animação elegante, sem partículas e sem atrapalhar a leitura em projeção.
- A Regra Zero do Mira continua valendo (loop interno contínuo): a bolinha "ao vivo", o brilho do QR e a respiração leve dos cards mantêm o slide vivo.
Template canônico
O template completo (HTML + CSS + JS, um arquivo standalone) está em
references/quiz-template.html. Copie-o para
decks/<nome-do-quiz>/index.html e preencha apenas:
SHEET_ID
QUESTION
OPTIONS
CORRECT
ANSWER_HEADER, se necessário
NAME_HEADER, se necessário
- SVG inline do QR dentro de
.qr-card
Passos
- Confirmar dados obrigatórios. Link de votação, link da planilha, pergunta, alternativas e resposta correta. Se faltar algo, peça e pare.
- Validar a correta. A resposta correta precisa ser exatamente uma das alternativas, ignorando só caixa e acentos para conferência. No HTML, grave o texto canônico da alternativa.
- Extrair
SHEET_ID do link da planilha e verificar o gviz. Se a planilha não estiver pública, peça ajuste.
- Gerar QR localmente com
qrcode e embutir SVG inline. Nunca mostre o link por extenso no slide.
- Montar o slide com o template canônico. Preencha
QUESTION, OPTIONS, CORRECT, SHEET_ID e, se necessário, ANSWER_HEADER e NAME_HEADER.
- Salvar em
decks/<nome-do-quiz>/index.html.
- Reportar o caminho do arquivo, os atalhos (
R, K, V) e lembrar que o slide precisa de internet para ler a planilha, mas abre por duplo clique via file://.
Checklist
1---2name: mira-quiz3description: Slide de QUIZ AO VIVO no Mira: a plateia escaneia um QR-code e responde uma múltipla escolha num Google Forms; o slide lê as respostas via Google Sheets gviz/JSONP. Diferente do mira-survey, tem resposta correta, revelação controlada pelo apresentador e percentuais que só aparecem após revelar. Use SEMPRE que o usuário disser /mira-quiz, quiz ao vivo, pergunta com resposta correta, revelar resposta, ranking do quiz, quiz com QR, quiz tipo Mentimeter, quiz tipo Slido, ou pedir um slide onde a plateia responde pelo celular e a resposta correta é revelada no palco. Para enquete sem resposta correta use /mira-survey; para QR simples use /mira-qrcode.4---56# Skill: Quiz ao vivo no slide78> **Fonte da verdade:** decisões congeladas em `BRAINSTORM_MIRA_QUIZ.md` (2026-06-30). O `/mira-quiz` reaproveita a arquitetura validada do `mira-survey`: Google Forms como interface, Google Sheets como fonte viva e leitura pelo endpoint `gviz` com JSONP para funcionar por `file://`.910## Modelo mental1112O Mira não hospeda o jogo. Ele monta um slide que lê respostas já coletadas pelo Google Forms:13141. A plateia abre o **link de votação** pelo QR-code.152. Cada envio cai na **planilha de respostas** vinculada ao Forms.163. O slide lê a planilha a cada poucos segundos pelo `gviz`.174. Antes da revelação, mostra pergunta, QR, alternativas e total de respostas.185. Depois da revelação, marca a correta em verde e mostra contagem + percentual por alternativa.1920## Dados obrigatórios2122Confirme estes dados antes de gerar o slide. Se faltar qualquer item, pergunte e pare.2324| Dado | Exemplo | Uso |25|---|---|---|26| Link de votação | `forms.gle/...` ou `docs.google.com/forms/...` | vira QR-code inline |27| Link da planilha | `docs.google.com/spreadsheets/d/<ID>/...` | fonte viva de respostas |28| Pergunta | `Qual destes é um modelo multimodal?` | título do quiz |29| Alternativas | `GPT-4o`, `Excel`, `Photoshop`, `PowerPoint` | cards de resposta |30| Correta | `GPT-4o` | destaque na revelação |31| Campo de nome | primeira coluna textual depois do timestamp, ou índice informado | ranking básico |3233Texto sugerido se faltar algo:3435> Para montar o quiz ao vivo eu preciso do link de votação do Google Forms, do link da planilha de respostas, da pergunta, das alternativas e da resposta correta. A planilha precisa estar pública como "qualquer pessoa com o link -> Leitor". Pode colar esses dados aqui?3637## Formulário esperado3839O Google Forms deve ter, no mínimo:4041- Um campo de identificação (nome ou apelido).42- Uma pergunta de múltipla escolha com as mesmas alternativas do slide.4344Na planilha, a skill assume (salvo se o usuário indicar outro cabeçalho):4546- A última coluna é a resposta do quiz.47- A primeira coluna textual depois do timestamp é o nome/apelido.4849Se a planilha tiver várias perguntas, avise que o slide usará a última coluna e peça confirmação.5051## Verificação da planilha5253Extraia o `SHEET_ID` do link da planilha com `/spreadsheets/d/<ID>/` e teste o mesmo endpoint que o slide usará:5455```bash56curl -sL "https://docs.google.com/spreadsheets/d/<SHEET_ID>/gviz/tq?tqx=out:json" | head -c 80057```5859Se vier `google.visualization.Query.setResponse({...})` com `"status":"ok"`, a planilha está legível. Se vier HTML de login ou erro, peça para o usuário ajustar o compartilhamento para **qualquer pessoa com o link -> Leitor**.6061**Nunca use "Publicar na web -> CSV".** Esse endpoint pode ficar cacheado por minutos. O quiz ao vivo usa só `gviz` + JSONP.6263## QR-code local6465O QR do link de votação é gerado localmente e embutido como SVG inline, igual ao `/mira-qrcode` e ao `/mira-survey`. Não use `npx qrcode`, API externa nem CDN.66671. Instale o pacote uma vez numa pasta temp reaproveitável, se ainda não existir:6869```bash70npm install qrcode --no-save --prefix "<pasta-temp>"71```72732. Gere o SVG:7475```bash76node -e "require('qrcode').toString('LINK_VOTACAO',{type:'svg',errorCorrectionLevel:'M',margin:0,color:{dark:'#0a0a0a',light:'#ffffff'}},(e,s)=>{if(e)throw e;process.stdout.write(s)})"77```78793. Cole o `<svg>` inteiro dentro de `.qr-card`, com o comentário:8081```html82<!-- QR gerado localmente (pacote npm qrcode, ECC M) para LINK_VOTACAO -->83```8485O link de votação não aparece por extenso no slide.8687## Estados8889O slide tem três estados:9091- `votando`: mostra pergunta, alternativas neutras, QR-code, total de respostas e status ao vivo. Não mostra percentuais.92- `revelando`: pausa curta, cards respiram e incorretas reduzem brilho.93- `revelado`: correta em verde `#35D07F`, contagens e percentuais visíveis, barras proporcionais preenchidas.9495Comandos:9697- Botão discreto "Revelar".98- Tecla `R` para revelar.99- Tecla `K` para alternar ranking depois da revelação.100- Tecla `V` para voltar ao estado de votação durante testes.101102## Direção visual103104Padrão da v1: cards de alternativas com barras internas. Melhor formato para esconder porcentagens antes da revelação e destacar a correta depois.105106- Fundo escuro Mira, laranja `#FF904D` como identidade.107- Correta em verde `#35D07F`, fundo translúcido e halo leve.108- Incorretas continuam legíveis, com menos destaque após revelar.109- Check discreto na correta.110- Barras aparecem só depois da revelação.111- Animação elegante, sem partículas e sem atrapalhar a leitura em projeção.112- A Regra Zero do Mira continua valendo (loop interno contínuo): a bolinha "ao vivo", o brilho do QR e a respiração leve dos cards mantêm o slide vivo.113114## Template canônico115116O template completo (HTML + CSS + JS, um arquivo standalone) está em117[`references/quiz-template.html`](references/quiz-template.html). Copie-o para118`decks/<nome-do-quiz>/index.html` e preencha apenas:119120- `SHEET_ID`121- `QUESTION`122- `OPTIONS`123- `CORRECT`124- `ANSWER_HEADER`, se necessário125- `NAME_HEADER`, se necessário126- SVG inline do QR dentro de `.qr-card`127128## Passos1291301. **Confirmar dados obrigatórios.** Link de votação, link da planilha, pergunta, alternativas e resposta correta. Se faltar algo, peça e pare.1312. **Validar a correta.** A resposta correta precisa ser exatamente uma das alternativas, ignorando só caixa e acentos para conferência. No HTML, grave o texto canônico da alternativa.1323. **Extrair `SHEET_ID`** do link da planilha e verificar o `gviz`. Se a planilha não estiver pública, peça ajuste.1334. **Gerar QR localmente** com `qrcode` e embutir SVG inline. Nunca mostre o link por extenso no slide.1345. **Montar o slide** com o template canônico. Preencha `QUESTION`, `OPTIONS`, `CORRECT`, `SHEET_ID` e, se necessário, `ANSWER_HEADER` e `NAME_HEADER`.1356. **Salvar em `decks/<nome-do-quiz>/index.html`.**1367. **Reportar** o caminho do arquivo, os atalhos (`R`, `K`, `V`) e lembrar que o slide precisa de internet para ler a planilha, mas abre por duplo clique via `file://`.137138## Checklist139140- [ ] Usa QR code gerado localmente como SVG inline.141- [ ] Usa Google Forms como interface de resposta.142- [ ] Usa Google Sheets como fonte viva de dados.143- [ ] Lê a planilha via `gviz` + JSONP.144- [ ] Pergunta é de múltipla escolha.145- [ ] Resposta correta configurada explicitamente.146- [ ] Correta existe entre as alternativas.147- [ ] Porcentagens só aparecem depois da revelação.148- [ ] Revelação acionada por botão ou tecla `R`.149- [ ] Correta marcada em verde suave `#35D07F`, flat e legível.150- [ ] Animação de revelação tem suspense, destaque e barras animadas.151- [ ] Ranking básico por nome/apelido disponível por tecla `K`.152- [ ] Preserva a Regra Zero do Mira com loop interno contínuo.153- [ ] Link de votação não aparece por extenso no slide.154- [ ] Nenhum "Publicar na web -> CSV".155- [ ] Texto revisado, acentuação correta e sem travessão.