Aplicativo de Autoavaliação: Perfil de Uso de Tecnologia com frontend web estático e backend serverless em Google Apps Script.
O respondente acessa a página, responde 12 questões em escala Likert (4 opções, 1–4 pontos), vê o resultado imediatamente e — se informar um e-mail — recebe também um relatório detalhado. As respostas ficam persistidas em uma Google Sheet do administrador.
┌──────────────────┐ POST JSON ┌────────────────────────┐
│ Frontend │ ─────────────▶ │ Google Apps Script │
│ (web/) │ │ Web App (doPost) │
│ HTML / CSS / │ ◀───────────── │ │
│ JS estático │ { ok: true } │ • Valida + recomputa │
└──────────────────┘ │ • Grava em Sheet │
│ • Envia e-mail │
└──────────┬─────────────┘
│
▼
┌────────────────────────┐
│ Google Sheets │
│ + Gmail (MailApp) │
└────────────────────────┘
- Frontend (
web/) — HTML/CSS/JS puro, sem build. Calcula pontuação e perfil no cliente, mostra resultado na hora, envia payload ao backend de forma assíncrona. - Backend (
src/) — Google Apps Script. Publicado como Web App aceitaPOSTcom JSON, revalida a pontuação (não confia no cliente), grava na planilha e envia e-mail. - Modo Google Form original —
createForm()continua disponível para quem prefere usar Google Forms nativo; o triggeronFormSubmitcompartilha o mesmo código de e-mail/scoring.
| Faixa | Perfil |
|---|---|
| 12–19 | 🟠 Explorador Inicial |
| 20–29 | 🟡 Praticante Ativo |
| 30–39 | 🟢 Integrador Eficiente |
| 40–48 | 🔵 Arquiteto de Soluções |
appsscript.json Manifest do Apps Script (escopos + webapp config)
src/
Config.gs Textos e constantes compartilhados
FormSpec.gs Questões + perfis (fonte da verdade do backend)
CreateForm.gs createForm() — modo Google Forms nativo
OnSubmit.gs Scoring, e-mail HTML/texto, escrita em sheet
Triggers.gs Helpers de trigger
WebApp.gs doGet/doPost + setupWebApp()
web/
index.html Marcação + templates de cada tela
styles.css Design do aplicativo
data.js Questões + perfis (espelho de FormSpec.gs)
app.js UI, navegação, pontuação, POST ao backend
config.js WEB_APP_URL (edite com sua URL pós-deploy)
npm install -g @google/clasp
clasp login
cd zapier-forms
clasp create --type standalone --title "Zapier Forms — Autoavaliação" --rootDir ./clasp pushAbra o editor (clasp open), selecione a função setupWebApp e execute. Ela cria a planilha de respostas e imprime o ID/URL no log. Autorize os escopos quando solicitado.
No editor Apps Script:
- Implantar → Nova implantação
- Tipo: App da Web
- Executar como: Eu (sua conta Google)
- Quem tem acesso: Qualquer pessoa
- Copie a URL que termina em
/exec
Edite web/config.js:
window.APP_CONFIG = {
WEB_APP_URL: 'https://script.google.com/macros/s/AKfy.../exec'
};O frontend é totalmente estático. Para rodar localmente basta servir a pasta web/:
# Opção 1: Python
cd web
python3 -m http.server 5173
# Opção 2: Node (npx)
npx serve web -l 5173Abra http://localhost:5173 e responda o questionário.
Qualquer host de site estático serve:
- GitHub Pages — configure Pages para servir da pasta
web/(ou root se preferir mover). - Vercel / Netlify — aponte para este repo, defina
webcomo diretório de publicação, sem comando de build. - Cloudflare Pages — idem.
- Usuário responde as 12 questões no frontend.
app.jscalcula total e perfil localmente e mostra o resultado imediatamente.app.jsenviaPOSTJSON paraWEB_APP_URLcom:name,email,answers[],total,userAgent,origin.doPostrevalida cada resposta viapointsForAnswer(server-side scoring) para impedir adulteração.- Backend grava linha na planilha configurada em
WEB_APP_SHEET_ID(Script Properties) e, se houver e-mail, envia relatório. - Se o POST falhar (offline, URL errada), o resultado continua visível — apenas não é persistido.
As perguntas e perfis estão duplicados para permitir scoring client-side. Ao editar src/FormSpec.gs, atualize também web/data.js mantendo títulos, textos e pontos idênticos — o backend recusa respostas cujo texto não bate.
O fluxo original continua funcional — útil para distribuir via e-mail corporativo ou embedar em intranets:
- Rode
createForm()no editor. - URLs aparecem no log (edição, público, planilha).
- O trigger
onFormSubmitjá é instalado automaticamente.
| Escopo | Uso |
|---|---|
forms |
Criar/modificar Google Form |
drive |
Criar planilha no Drive |
spreadsheets |
Escrever respostas na planilha |
script.send_mail |
Enviar e-mail via MailApp |
script.scriptapp |
Instalar triggers |
doPostrevalida scoring no backend — o cliente não pode forjar pontos.- Validação de e-mail e limites de tamanho em nome/e-mail/user-agent.
- Web App com "Qualquer pessoa" aceita submissões anônimas; se precisar restringir, mude para "Qualquer pessoa com conta Google" no deploy.
- E-mail é enviado apenas se o respondente fornecer voluntariamente.
MailApp.sendEmailtem cota diária (~100/dia grátis, ~1500/dia Workspace).- Apps Script Web App tem limites de execução e URL fetch.
- Não há rate limiting próprio — considere adicionar se esperar volume alto.