# Mira Quiz

> 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.

- Skill: `sandeco/mira-quiz` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add sandeco/mira-quiz`
- Raw SKILL.md: https://api.skillmd.com/api/skills/sandeco/mira-quiz/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Docs & Writing
- Author: sandeco (https://skillmd.com/u/sandeco)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/sandeco/mira-quiz

---


# 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:

1. A plateia abre o **link de votação** pelo QR-code.
2. Cada envio cai na **planilha de respostas** vinculada ao Forms.
3. O slide lê a planilha a cada poucos segundos pelo `gviz`.
4. Antes da revelação, mostra pergunta, QR, alternativas e total de respostas.
5. 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á:

```bash
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.

1. Instale o pacote uma vez numa pasta temp reaproveitável, se ainda não existir:

```bash
npm install qrcode --no-save --prefix "<pasta-temp>"
```

2. Gere o SVG:

```bash
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)})"
```

3. Cole o `<svg>` inteiro dentro de `.qr-card`, com o comentário:

```html
<!-- 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`](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

1. **Confirmar dados obrigatórios.** Link de votação, link da planilha, pergunta, alternativas e resposta correta. Se faltar algo, peça e pare.
2. **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.
3. **Extrair `SHEET_ID`** do link da planilha e verificar o `gviz`. Se a planilha não estiver pública, peça ajuste.
4. **Gerar QR localmente** com `qrcode` e embutir SVG inline. Nunca mostre o link por extenso no slide.
5. **Montar o slide** com o template canônico. Preencha `QUESTION`, `OPTIONS`, `CORRECT`, `SHEET_ID` e, se necessário, `ANSWER_HEADER` e `NAME_HEADER`.
6. **Salvar em `decks/<nome-do-quiz>/index.html`.**
7. **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

- [ ] Usa QR code gerado localmente como SVG inline.
- [ ] Usa Google Forms como interface de resposta.
- [ ] Usa Google Sheets como fonte viva de dados.
- [ ] Lê a planilha via `gviz` + JSONP.
- [ ] Pergunta é de múltipla escolha.
- [ ] Resposta correta configurada explicitamente.
- [ ] Correta existe entre as alternativas.
- [ ] Porcentagens só aparecem depois da revelação.
- [ ] Revelação acionada por botão ou tecla `R`.
- [ ] Correta marcada em verde suave `#35D07F`, flat e legível.
- [ ] Animação de revelação tem suspense, destaque e barras animadas.
- [ ] Ranking básico por nome/apelido disponível por tecla `K`.
- [ ] Preserva a Regra Zero do Mira com loop interno contínuo.
- [ ] Link de votação não aparece por extenso no slide.
- [ ] Nenhum "Publicar na web -> CSV".
- [ ] Texto revisado, acentuação correta e sem travessão.

