Consolida o trabalho desta branch de abril/2026 em um bloco pronto pra testar em staging antes do merge pra main. ## Correções de memória semântica - ExtractionService: Princípio Zero + Regra de Ouro (ação consumada vs intenção). - Cenário Daniela_Reservas: Passo 0 de classificação (consulta/intenção/fora). ## Roleta da Sorte (end-to-end) - Schema Supabase + 7 RPCs atômicas (server-side, idempotentes). - Services: Offer, Redeem, WeeklyReport. - Jobs: OfferRouletteJob (hook em ConfirmationService após Pix pago), NotifyRevealed + Scheduler de fallback. - Tool manual GenerateRoletaLinkTool + endpoint público /roleta/notify. - Dashboard /captain/roleta com Resgate + Relatório + anomaly detection. ## Cenário Reclamacoes_Ouvidoria - Triagem P1-P4, framework LAST, Three-level listening, Self-check. - Sem compensação material, detecção de cliente frustrado eleva prioridade. ## Analytics - Funil de conversão /captain/funnel: 5 etapas via regex, zero LLM. - Detector de churn via ChurnOutreach* (cron dias úteis 10h-17h BRT). ## Trabalho pré-existente incluído - Captain Executive Reports (ceo_digest, mattermost_delivery). - get_reserva_preco_tool, Lifecycle ajustes, Reservations UI polimentos. ## Outros - .gitignore: patterns pra credenciais. - Migrations de scenarios idempotentes. - i18n completa pt_BR+en pra roleta/funnel. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
4.9 KiB
Ideias: Dashboard Modo Apresentação
Análise das Sugestões Anteriores
A sugestão do modelo "Keynote dentro do App" (Slides 16:9) com fundos pré-renderizados é excelente e muito aderente à filosofia de Design System e de Performance focada em "Aesthetics" para uma apresentação executiva.
Por que a abordagem sugerida é superior a gerar imagens ao vivo (via API Nano Banana):
- Latência e Confiabilidade: Em uma apresentação ao vivo (projetor/TV), a última coisa que queremos é um fundo carregando lentamente ou uma API falhando, deixando a tela branca.
- Consistência Visual: Gerar via IA ao vivo introduz imprevisibilidade ("alucinações" visuais). Para um relatório gerencial, o padrão visual transmite autoridade e seriedade. A consistência de ter "O fundo azul marinho do RH" todo mês constrói identidade de produto.
- Contraste (Acessibilidade): Em um fundo pré-gerado e testado pelo design (Brad Frost mode), sabemos exatamente que a fonte branca tamanho 64px vai ter leitura perfeita. Uma imagem gerada aleatoriamente pode ter manchas claras exatamente onde o número está, matando a legibilidade no projetor.
Proposta de Arquitetura Visual (O "Como Fazer" no Vue/CSS)
Se formos implementar essa trilha "Keynote", aqui está como podemos estruturar o Front-end e o Design System para que a apresentação seja espetacular:
1. O Contêiner 16:9 Fixo (O "Palco")
Em vez de deixar o dashboard se expandir infinitamente em telas ultrawide (o que deforma os elementos), criamos um container com aspect-ratio 16:9 fixo.
- Ele escala proporcionalmente usando
transform: scale()dependendo do tamanho do navegador (como o Canva faz no modo apresentação). - Isso garante que o que você vê no seu Mac é exatamente o que vai aparecer no projetor. Sem quebras de linha surpresas.
2. A Camada de Fundo (Backgrounds Curados)
Vamos hospedar ~10 imagens de altíssima qualidade (WebP) na pasta public/assets/presentation_bgs/.
bg-hero-mensal.webpbg-gestao-ok.webpbg-gestao-critical.webp(Podemos sim usar o Midjourney ou Nano Banana uma vez, em ambiente de design, para gerar imagens abstratas belíssimas estilo Dark Glassmorphism ou Fluid 3D shapes, aprová-las, tratá-las com uma camada escura (rgba(0,0,0,0.6)) no Figma e salvar estaticamente).
No Vue, criamos um componente <PresentationSlide> que dinamicamente puxa esse fundo baseado no status ou tema do slide, usando background-size: cover.
3. Tipografia "Hero" (O Foco no Dado)
A tela atual tenta mostrar os detalhes das auditorias em texto corrido ("168 auditorias realizadas..."). Em projetor, isso é invisível. A tipografia no modo apresentação precisará ser um componente separado com escalas gigantes:
- Slide Title: 48px a 64px (Ex: "Auditoria Express")
- Big Number: 120px a 160px (Ex: "70%")
- Subtitle/Status: 24px a 32px (Ex: "Abaixo da Meta")
4. Layout "Slide" - Anatomia Proposta
Um componente de Slide padrão teria:
- Top-left: Logo miniatura + Tópico atual (Ex: 📊 Operação Geral)
- Center-Left: O Número Gigante (O KPI) com uma seta de tendência (📈/📉).
- Right-side: Um Ranking limpo (Top 3 melhores, Top 3 piores) usando Avatares grandes e barras de progresso grossas (pelo menos 16px de altura, com border-radius). Em vez de texto descrevendo a meta, apenas a barra colorida.
- Bottom: Uma frase executiva de "Takeaway" ou o Insight gerado pela nossa IA atual ("Necessário focar em treinamento na unidade Prime VL").
5. Transições Cinematográficas
Como controlamos o Vue, podemos usar o <Transition> do Vue com animações CSS maravilhosas.
- Ao mudar do slide 1 para o 2, os números do KPI não apenas aparecem, eles sobem e entram em fade (
translateY+opacity) com uma curva suave (cubic-bezier). - Se tivermos barras de progresso, elas animam de 0% até o valor em 1 segundo. Isso traz o "feel premium" que a diretoria valoriza.
O Veredito Tecnológico
A IA sugeriu o "Modelo híbrido" e organizar em uma "Biblioteca de assets (não gerar ao vivo)". Eu concordo 100% com ela.
Gerar imagem por API ao vivo para fundo de dashboard é over-engineering (engenhoca demais) e traz muito risco (custo, lentidão na tela, feiura aleatória) para pouco benefício. Investir 1 hora gerando os 10 fundos perfeitos e codar um layout fixo 16:9 fará o Chatwoot parecer uma ferramenta SaaS de $10.000/mês.
Se você aprovar a direção do "Modelo Híbrido Keynote com Assets Fixos", os próximos passos reais seriam:
- Criarmos um arquivo CSS específico para o Presentation Mode (tipografia gigante, cores absolutas para dark mode).
- Criar o layout de roteador novo (
/dashboard/.../presentation) e o componente de Slide que consome os dados do Dashboard mas cospe na tela nessa versão "Gigante e Limpa". - Exportar ou subir os fundos de imagem.
O que achou dos pontos mecânicos de CSS/Layout aplicados à ideia dela?