Blitzap - quiz de diagnostico de risco de bloqueio WhatsApp (Next.js 14)
  • TypeScript 53.9%
  • Python 36.8%
  • CSS 8.3%
  • Dockerfile 0.8%
  • JavaScript 0.2%
Encontrar um arquivo
Arquivos do repositório (último commit primeiro)
Nome de arquivo Última mensagem de commit Última data de commit
Thiago Fontoura 29c96152cc docs(readme): atualiza README com evidencia atualizada do repositorio
Substitui o README anterior por documentacao real e verificada do codigo:
stack com versoes, arquitetura, funcionalidades, como rodar e variaveis
de ambiente (apenas nomes). Preparatorio para migracao do repositorio
do GitLab (evolx.mkt) para a organizacao BLITZAP no OmniGit.
2026-10-22 20:54:58 -03:00
.claude feat: initial commit — Blitzap Quiz com painel admin 2026-04-08 16:00:55 -03:00
public feat: initial commit — Blitzap Quiz com painel admin 2026-04-08 16:00:55 -03:00
scripts feat: initial commit — Blitzap Quiz com painel admin 2026-04-08 16:00:55 -03:00
src revert(quiz): restaura copy original do quiz de risco 2026-04-08 17:47:56 -03:00
.dockerignore chore(deploy): adiciona Dockerfile multi-stage e standalone output 2026-04-08 16:29:20 -03:00
.gitignore feat: initial commit — Blitzap Quiz com painel admin 2026-04-08 16:00:55 -03:00
CLAUDE.md feat: initial commit — Blitzap Quiz com painel admin 2026-04-08 16:00:55 -03:00
Dockerfile chore(deploy): adiciona Dockerfile multi-stage e standalone output 2026-04-08 16:29:20 -03:00
next-env.d.ts feat: initial commit — Blitzap Quiz com painel admin 2026-04-08 16:00:55 -03:00
next.config.mjs chore(deploy): adiciona Dockerfile multi-stage e standalone output 2026-04-08 16:29:20 -03:00
package-lock.json feat: initial commit — Blitzap Quiz com painel admin 2026-04-08 16:00:55 -03:00
package.json feat: initial commit — Blitzap Quiz com painel admin 2026-04-08 16:00:55 -03:00
postcss.config.js feat: initial commit — Blitzap Quiz com painel admin 2026-04-08 16:00:55 -03:00
README.md docs(readme): atualiza README com evidencia atualizada do repositorio 2026-10-22 20:54:58 -03:00
tailwind.config.ts feat: initial commit — Blitzap Quiz com painel admin 2026-04-08 16:00:55 -03:00
tsconfig.json feat: initial commit — Blitzap Quiz com painel admin 2026-04-08 16:00:55 -03:00

Blitzap Quiz — Diagnóstico de Risco de Bloqueio no WhatsApp

Quiz interativo de diagnóstico que avalia o risco de uma operação de disparo em massa ser bloqueada pelo WhatsApp. Funciona como gerador de leads para o funil de vendas do Blitzap: o responde as 7 perguntas, informa um contato (telefone ou e-mail) no gate de captura e recebe um resultado personalizado por faixa de risco, com CTAs para a landing page e para o WhatsApp comercial.

Sobre

  • Quiz de 7 perguntas sobre infraestrutura de disparo: tipo de conexão, volume mensal, controle de velocidade, redundância de rota, monitoramento em tempo real, histórico de bloqueio e validação de números.
  • Score máximo de 130 pontos; quanto maior a pontuação, maior o risco.
  • Resultado em 4 faixas (bands) com leitura personalizada e bloco de contexto sobre as diretrizes da Meta.
  • Todo lead fica salvo em banco PostgreSQL e pode ser acompanhado no painel admin integrado.
  • Não há integração direta com a API do aplicativo principal do Blitzap — a ponte com outros sistemas é feita via webhook assinado (ver Integrações).

Stack

Camada Tecnologia
Framework Next.js 14.2.29 (App Router, output: 'standalone')
UI React 18.3.1, TypeScript, Tailwind CSS 3 + CSS Modules
Banco PostgreSQL via pg 8.13 (pool singleton)
Auth admin jsonwebtoken (JWT de 24h em cookie auth_token HttpOnly) + bcryptjs (hash cost 12)
E-mail nodemailer (SMTP configurável pelo admin)
Build/infra Docker multi-stage node:18-alpine, tsx para scripts

Base de código enxuta: 30 arquivos TS/TSX (~2,2 mil linhas) em src/ e scripts/.

Identidade visual: dark mode exclusivo, azul #2563EB + verde #06D6A0, fontes Syne (títulos) e DM Sans (texto).

Fluxo do quiz

  1. Intro — apresentação do diagnóstico e início.

  2. 7 perguntas (src/lib/quiz-data.ts), cada opção com pontuação:

    # Pergunta (id) Pontos máx.
    1 Tipo de conexão (connection) 30
    2 Volume mensal de disparos (volume) 15
    3 Controle de velocidade (speed) 20
    4 Redundância de rota (redundancy) 15
    5 Monitoramento em tempo real (monitoring) 15
    6 Histórico de bloqueio (history) 20
    7 Validação de números (validation) 15
    Total 130
  3. Gate de captura — o resultado só é liberado após informar telefone (com máscara, mín. 10 dígitos) ou e-mail validado.

  4. Resultado — score e faixa de risco:

    Faixa Score Rótulo
    low ≤ 25 Risco Baixo
    moderate ≤ 55 Risco Moderado
    high ≤ 90 Risco Alto
    critical > 90 Risco Crítico
  5. CTAs do resultado: landing page lp.blitzap.com.br/?ref=quiz e WhatsApp wa.me/5534999999999 (com mensagem pré-preenchida).

Rotas

Públicas

Rota Descrição
/ Quiz completo (intro → perguntas → gate → resultado)

API — quiz

Método Rota Descrição
POST /api/quiz/submit Registra o lead na tabela leads, recalcula score/band no servidor e dispara webhook + e-mails em background (não bloqueia a resposta)
Método Rota Descrição
POST /api/admin/auth/login Autentica e emite o JWT (24h)
POST /api/admin/auth/logout Limpa o cookie de sessão
GET /api/admin/leads Lista leads (com filtros do dashboard)
GET /api/admin/leads/[id] Detalhe de um lead
GET / PUT /api/admin/settings Lê/salva configurações de webhook e SMTP
POST /api/webhooks/test Dispara um lead de teste para validar o webhook configurado

Painel admin

Rota Descrição
/admin/login Login (usuário/senha, JWT em cookie HttpOnly SameSite=Lax)
/admin Dashboard de leads capturados
/admin/settings Configuração de webhook (URL + secret) e SMTP

Integrações

Webhook genérico (evento lead.created)

  • POST JSON para a URL configurada em /admin/settings (armazenada na tabela settings).
  • Payload: { event, timestamp, data: { id, contact, contact_type, score, risk_band, answers, created_at } }.
  • Assinatura HMAC-SHA256 do corpo no header X-Blitzap-Signature (sha256=<hex>), usando o secret configurado no admin — permite ao receptor validar a autenticidade.
  • Timeout de 8s; falhas de entrega não afetam o fluxo do quiz (apenas log).
  • Testável em /admin/settings via POST /api/webhooks/test (lead fictício).

E-mails SMTP (nodemailer)

  • Notificação do admin (admin_email configurado): resumo do lead com score, faixa e tabela de respostas.
  • E-mail para o lead (somente quando o contato é e-mail e notify_user está ativo): diagnóstico com a leitura da faixa e CTA para lp.blitzap.com.br/?ref=quiz-email.
  • Credenciais e remetente SMTP são configurados em /admin/settings (tabela settings), não por variáveis de ambiente.

CTAs / funil

  • Resultado do quiz: LP https://lp.blitzap.com.br/?ref=quiz e WhatsApp https://wa.me/5534999999999.
  • E-mail do lead: LP https://lp.blitzap.com.br/?ref=quiz-email.

Como rodar

Desenvolvimento (porta 3008)

npm install

# 1. Banco: criar tabelas (users, leads, settings) + índices
npm run migrate

# 2. Criar/atualizar o usuário admin
npm run seed        # executa scripts/seed-admin.ts

# 3. Subir em http://localhost:3008
npm run dev

Configure as variáveis de ambiente em .env.local (ver seção abaixo) antes de rodar migrate/seed — os scripts leem esse arquivo.

Docker

docker build -t blitzap-quiz --build-arg NEXT_PUBLIC_APP_URL=<url-publica> .
docker run -p 3000:3000 --env-file .env.local blitzap-quiz
  • Imagem multi-stage (node:18-alpine) com output standalone do Next.js; usuário não-root.
  • O container expõe a porta 3000 (em ambientes locais do time costuma ser mapeada para 3003 — o mapeamento é definido por quem sobe o container).
  • NEXT_PUBLIC_APP_URL é um build arg público; segredos entram em runtime via env.

Variáveis de ambiente

Apenas os nomes — valores ficam em .env.local (fora do controle de versão). Nunca commite segredos.

Variável Uso
DATABASE_URL String de conexão PostgreSQL (app e scripts migrate/seed)
JWT_SECRET Segredo de assinatura dos JWTs do admin
ADMIN_USERNAME Usuário admin criado pelo seed (opcional — tem padrão)
ADMIN_PASSWORD Senha admin criada pelo seed (defina a sua)
NEXT_PUBLIC_APP_URL URL pública da aplicação (build arg no Docker)

Observação: webhook e SMTP não são configurados por variáveis de ambiente — URL, secret do webhook e credenciais SMTP ficam na tabela settings (linha única id = 1) e são gerenciados pela UI em /admin/settings.

Observações

  • Sem integração direta com a API do aplicativo principal do Blitzap. A ponte com outros sistemas (CRM, automações, o app principal) é o webhook lead.created assinado com HMAC — qualquer consumidor pode validar o header X-Blitzap-Signature.
  • O score e a faixa são recalculados no servidor no submit (computeScore), nunca confiam no que o cliente envia.
  • Copy das perguntas, faixas e blocos de contexto fica centralizada em src/lib/quiz-data.ts.
  • Scripts de banco: scripts/migrate.ts (DDL idempotente: CREATE TABLE IF NOT EXISTS para users, leads, settings + índices e linha singleton de settings) e scripts/seed-admin.ts (upsert do admin com bcrypt).
  • CLAUDE.md no raiz descreve a versão anterior deste projeto (páginas HTML estáticas) e está desatualizado em relação à implementação atual em Next.js.

Origem do repositório

Este repositório foi migrado do GitLab para o OmniGit em 2026-10-22:

O histórico completo de commits foi preservado na migração.


© EVOLX / Blitzap. Todos os direitos reservados.