Central de Novidades & Updates
Transparência e inovação constante. Veja em primeira mão todos os novos recursos, aprimoramentos de interface e melhorias disponibilizados na plataforma The One Seguros.
✨Feature / Integração com o CRM (RH › Candidaturas)
O RH passa a acompanhar as candidaturas no The One Prime CRM (módulo RH › Candidaturas, com quadro por etapa, currículo e histórico). O servidor do site entrega cada candidatura ao CRM (`POST /api/rh/candidaturas`) com uma chave de integração própria, criada no CRM em Processos › Integrações com "Entregar candidaturas do site (RH)". O protocolo exibido ao candidato e enviado nos e-mails passa a ser o do CRM (`RH-AAAAMMDD-XXXXXX`). - Os e-mails (RH com o currículo anexo e confirmação ao candidato) continuam saindo pelo site, como antes. - Com o CRM recebendo, o site não guarda mais a candidatura no próprio Supabase nem o currículo no bucket público `curriculos` (menos cópias de dados pessoais). - Sem as variáveis `CRM_API_URL`, `CRM_CLIENT_ID` e `CRM_CLIENT_SECRET`, ou com o CRM recusando/indisponível, o site guarda a candidatura como antes (reserva), sem perder o envio. Falha de rede ou do servidor tem uma nova tentativa com a mesma chave de idempotência (o CRM não duplica). - Os logs da entrega ao CRM não trazem dados do candidato nem o segredo.
Candidaturas novas aparecem no CRM, em RH › Candidaturas, com o currículo em armazenamento privado. Enquanto as variáveis não forem configuradas, nada muda no comportamento do site.
📜Legal & CMS / Atualização dos Termos de Uso e Política de Privacidade no Sanity
Sincronização e atualização do conteúdo jurídico no Sanity CMS e aprimoramento na renderização visual das páginas legais: 1. **Termos de Uso (`termsOfUse` no Sanity)**: - Atualização integral das 11 seções conforme `docs/termos_de_uso_revisado.md`, incluindo órgãos reguladores por segmento (SUSEP, ANS, Banco Central), atendimento via WhatsApp oficial, política de exclusão de dados e limitação de responsabilidade. - Data de atualização definida para 8 de Outubro de 2026. - Inclusão de suporte a links automáticos e clicáveis na renderização da página (`src/app/(site)/termos-de-uso/page.tsx`). 2. **Política de Privacidade (`privacyPolicy` no Sanity)**: - Atualização do conteúdo da **Seção 15** (*Solicitação de exclusão de dados*) com link canônico para `/solicitar-exclusao-dados`. - Atualização do conteúdo da **Seção 16** (*Exclusão de dados relacionados à Meta, Facebook, Instagram e WhatsApp*) com orientações específicas sobre Meta Platforms e e-mail com assunto dedicado. - Atualização da **Seção 21** (*Contato e Encarregado pelo Tratamento de Dados*) com nomeação do Encarregado de Proteção de Dados (DPO) conforme exigido pelo art. 41 da LGPD. - Data de atualização definida para 8 de Outubro de 2026. - Adicionada a função `renderInline` em `src/app/(site)/politica-de-privacidade/page.tsx` para suporte nativo à formatação de negrito com `**`, eliminando asteriscos soltos nos textos.
Termos e políticas atualizados no Sanity e refletidos nas páginas públicas `/termos-de-uso` e `/politica-de-privacidade`, com tipografia aprimorada e links funcionais para conformidade com a LGPD e Meta.
✨Feature & Legal / Solicitação de Exclusão de Dados Pessoais (LGPD & Meta Platforms)
Implementação da página pública oficial de **Solicitação de Exclusão de Dados Pessoais** (`/solicitar-exclusao-dados`), atendendo aos requisitos obrigatórios da Lei Geral de Proteção de Dados (LGPD - Lei nº 13.709/2018) e às diretrizes da Meta Platforms para aplicativos do ecossistema WhatsApp Business Cloud API (Instruções de Exclusão de Dados de Usuário): 1. **Página Oficial (`src/app/(site)/solicitar-exclusao-dados/page.tsx`)**: - Apresentação completa e estruturada das 10 seções contratuais e informativas contidas no termo oficial `docs/termo_exclusao_dados_the_one.md`. - Canais diretos de solicitação com botões de disparo de e-mail dedicado para o DPO (`contato@theoneseguros.com.br`) e acionamento via WhatsApp oficial (`(31) 2595-0775`). - Orientações de retenção legal perante órgãos reguladores (SUSEP e Banco Central) e ciclo seguro de expurgo de backups em até 30 dias. - Esclarecimentos sobre o tratamento de dados no WhatsApp, Facebook e Instagram geridos pela Meta Platforms. 2. **SEO & Metadados Estruturados**: - Metadados completos com título, descrição objetiva, Open Graph, Twitter Cards, canonical URL e marcação Schema.org (JSON-LD) para indexadores e validadores de URL da Meta. 3. **Navegação Global (`src/components/Footer.tsx`)**: - Inclusão do link permanente "Exclusão de Dados" no rodapé de todas as páginas públicas do site.
Rota pública `https://theoneseguros.com.br/solicitar-exclusao-dados` operacional e acessível, pronta para submissão no painel de desenvolvedores da Meta (*Data Deletion Callback / Instructions URL*) e atendimento transparente aos titulares de dados.
✨Feature & 🎨 UI: Exibição e Busca de CPF na Tabela de Leads e na Estação de Disparo
🔧Correção & Arquitetura / Deduplicação de Conversas e Equivalência do Nono Dígito (WhatsApp Brasil)
1. **Causa Raiz da Duplicação**: - Em contas do WhatsApp Brasil originadas antes ou durante a migração da Anatel, os webhooks de entrada da Meta Cloud API entregam o remetente com 12 dígitos (`55` + DDD + 8 dígitos, sem o 9º dígito, ex: `553186572801`). - Por outro lado, envios iniciados pelo CRM, formulários do site e agendas utilizam o número canônico com 13 dígitos (`55` + DDD + `9` + 8 dígitos, ex: `5531986572801`). - Como a localização no banco de dados utilizava busca estrita (`.eq('contact_phone', phone)`), o sistema instanciava duas conversas paralelas no Inbox para o mesmo número físico. 2. **Módulo de Utilitários de Telefone (`src/features/communication/utils/phoneUtils.ts`)**: - `getPhoneVariants(phone)`: extrai todas as representações plausíveis do número (com e sem o nono dígito para celulares DDI 55) para consultas idempotentes no banco. - `canonicalizePhone(phone)`: normaliza o telefone sempre para o formato canônico completo (`55` + DDD + `9` + 8 dígitos para celulares móveis), garantindo consistência no armazenamento. - `formatPhone(phone)`: padroniza a visualização humana em tela no formato `+55 (DD) 9XXXX-XXXX` tanto para números de 12 quanto de 13 dígitos. 3. **Serviços de Webhook e Envio (`webhookService.ts` & `messageService.ts`)**: - Atualizada a busca de conversas existentes para utilizar `.in('contact_phone', getPhoneVariants(phone))`. - Atualização automática do telefone salvo na conversa para o padrão canônico caso ainda estivesse no padrão antigo. - Criação de novas conversas sempre persistindo o telefone canônico. 4. **Interface do Inbox (`InboxView.tsx`, `ConversationItem.tsx`, `ContactContextSidebar.tsx`, `inboxService.ts`)**: - Centralizado o consumo de `formatPhone` nos itens da lista, no cabeçalho ativo da conversa e na sidebar lateral de detalhes do contato. - Aprimorada a busca de conversas para aceitar números formatados ou dígitos limpos parciais. 5. **Consolidação e Merge de Dados**: - Realizada migração das mensagens da conversa duplicada legada para a conversa canônica principal e deleção do registro órfão, unificando o histórico completo sem nenhuma perda.
Chats unificados no Inbox. O mesmo contato físico não gerará mais conversas duplicadas, independentemente de a mensagem vir da Meta sem o 9º dígito ou de o atendente enviar com o 9º dígito. O histórico foi consolidado e todos os telefones são apresentados de forma legível e padronizada.
🚀Feature & UX / Disparo de Teste via Template Oficial e Conformidade com a Janela de 24h da Meta
1. **Regra de Entrega da Meta (Customer Service Window de 24 Horas)**: - Identificada a causa da não entrega de mensagens de texto livre (`type: text`) em conversas não iniciadas pelo usuário. A Meta Graph API aceita a requisição e devolve `wamid`, porém o servidor de entrega do WhatsApp exige o uso de **Templates Aprovados** para iniciar conversas com o cliente fora da janela de 24 horas. 2. **Suporte a Template no Modal de Teste (`src/features/communication/components/SendTestMessageModal.tsx`)**: - Adicionado seletor de modalidade de disparo: - **Modelo Template (`hello_world`)**: Disparo prioritário para iniciar conversas imediatamente sem necessidade de interação prévia do cliente. - **Texto Livre**: Disparo de texto personalizado com aviso explicativo sobre a janela de 24h. - Pré-preenchimento automático com o número verificado do destinatário (`+55 31 98657-2801`). 3. **Ajuste no Backend de Envio (`src/app/api/admin/communication/messages/route.ts` & `MetaProvider.ts`)**: - Tratamento dinâmico de `templateLanguage` (padrão `en_US` para o modelo nativo `hello_world`). - Otimização do payload JSON para omitir a chave `components` quando o template não possuir variáveis.
O disparo de teste pelo CRM agora permite enviar o modelo oficial `hello_world` com entrega instantânea no WhatsApp do destinatário, além de orientar como testar texto livre após a abertura da janela de 24h.
🔧Correção & Resiliência / Carregamento do Facebook SDK e App ID WPPTHEONE
1. **Configuração Definitiva do App ID (`.env.local`)**: - Inserido o App ID oficial do aplicativo **WPPTHEONE** fornecido pelo usuário (`1683794459195764`) em `NEXT_PUBLIC_META_APP_ID`. 2. **Resiliência no Carregamento do Facebook SDK (`src/features/communication/hooks/useMetaSdk.ts`)**: - Injeção antecipada e incondicional da tag `<script src="https://connect.facebook.net/pt_BR/sdk.js">` no cliente, sem bloqueio prévio caso a resposta da API do servidor demorasse. - Adicionado mecanismo de espera inteligente (`ensureSdkReady`) com polling de até 6 segundos para resolver a inicialização do `window.FB.init`. - Adicionada detecção de bloqueio (`isBlocked` / `script.onerror`), alertando o usuário caso uma extensão de navegador (AdBlocker, Brave Shields ou uBlock) impeça a conexão com os servidores da Meta. 3. **Melhorias na Interface do Modal (`src/features/communication/components/ConnectMetaModal.tsx`)**: - O campo do App ID agora vem pré-preenchido por padrão com `1683794459195764`. - Caso um bloqueador de anúncios no navegador impeça o script da Meta de rodar, um botão de atalho direto para a aba **"Token Rápido (WPPTHEONE)"** é exibido para permitir conexão instantânea sem nenhuma dependência de scripts externos no navegador.
Eliminado o erro "Facebook SDK ainda não foi carregado". O modal inicializa o SDK da Meta com o App ID `1683794459195764` e orienta de forma clara caso haja extensões de bloqueio de terceiros no navegador.
🔧Correção / Prevenção de Redirecionamento para 0.0.0.0:3000 no Login e Logoff
Diagnóstico e correção da causa raiz pela qual o redirecionamento pós-login OAuth (Microsoft Azure / Supabase) e o encerramento de sessão (logoff) estavam enviando o navegador para o host interno `https://0.0.0.0:3000/admin`: 1. **Origem do Host 0.0.0.0:3000**: Em ambientes conteinerizados (Docker / Coolify / Traefik) rodando o Next.js em modo standalone, o Node.js realiza bind em `0.0.0.0:3000`. Como consequência, propriedades como `request.url` e `origin` obtidas diretamente do objeto `Request` nativo assumem o endereço de escuta local em vez do domínio público do usuário. 2. **Utilitário Centralizado de URL Segura (`src/lib/urlUtils.ts`)**: - Criação das funções `getBaseUrl` e `getSafeRedirectUrl`, que inspecionam os cabeçalhos de proxy reverso (`x-forwarded-host`, `host`, `x-forwarded-proto`), descartam qualquer host inválido contendo `0.0.0.0` e aplicam fallbacks confiáveis (`process.env.NEXT_PUBLIC_SITE_URL`, `https://theoneseguros.com.br` ou `http://localhost:5000`). 3. **Correção no Callback OAuth (`src/app/auth/callback/route.ts`)**: - Substituição do `origin` herdado de `request.url` por `getSafeRedirectUrl`, garantindo que o redirecionamento final para `/admin` (ou outra rota em `next`) mantenha o domínio público original do navegador. 4. **Correção e Expurgamento no Logout (`src/app/api/auth/logout/route.ts`)**: - Atualização do redirecionamento para `getSafeRedirectUrl('/login', request)`. - Limpeza e deleção explícita de todos os cookies de autenticação do Supabase (`sb-*` e tokens de sessão) no cabeçalho `Set-Cookie` da resposta HTTP 303, impedindo que o middleware interprete que a sessão ainda está ativa ao acessar `/login`. 5. **Blindagem do Middleware (`src/proxy.ts`)**: - Aplicação de `getSafeRedirectUrl` em todos os redirecionamentos do middleware (redirecionamento de não autenticados para `/login`, usuários bloqueados e usuários já logados tentando acessar `/login`), eliminando qualquer risco de emissão de headers com `0.0.0.0`. 6. **Logout Client-Side Confiável (`UserDropupMenu.tsx` e `AdminMobileHeader.tsx`)**: - Inclusão de `supabase.auth.signOut()` no cliente antes da requisição de encerramento, garantindo limpeza atômica dos dados locais no navegador e feedback visual de carregamento.
Eliminação definitiva dos redirecionamentos para `https://0.0.0.0:3000`. O fluxo de login corporativo da Microsoft e o fluxo de logoff agora direcionam o usuário com precisão para o domínio público acessível da aplicação tanto em ambiente local quanto em produção.
🔐Feature & Infraestrutura / Rota de Callback PKCE para OAuth Microsoft Azure
Implementação da rota de troca de código e sessão para suportar o fluxo OAuth 2.0 PKCE do Supabase Auth com Microsoft Azure / Entra ID: 1. **Route Handler `/auth/callback` (`src/app/auth/callback/route.ts`)**: - Criação da rota responsável por capturar o parâmetro `code` retornado pelo provedor OAuth da Microsoft. - Execução de `supabase.auth.exchangeCodeForSession(code)` utilizando `@supabase/ssr` (`createServerClient`) com persistência de cookies no navegador. - Redirecionamento seguro para a URL de destino informada no parâmetro `next` (padrão: `/admin`). - Tratamento de parâmetros de erro retornados pela Microsoft (`error_description` e `error`), redirecionando para a tela de login com mensagem explicativa. 2. **Ajuste na Tela de Login (`src/app/login/page.tsx`)**: - Atualização da função `handleAzureLogin` para direcionar o `redirectTo` para `${window.location.origin}/auth/callback?next=${redirectTo}`. - Decodificação e exibição de mensagens de erro amigáveis caso o fluxo seja cancelado ou ocorra falha de autorização.
O fluxo de autenticação corporativa via Microsoft Azure agora troca os tokens com segurança através do padrão PKCE do Supabase SSR, gravando os cookies de sessão e redirecionando o colaborador para a Central Administrativa.
🛡️Segurança, Governança de Roles & Bloqueio Integrado na Visão Geral
Saneamento estrutural do permissionamento de usuários, normalização de papéis na base de dados e eliminação de brechas de acesso através da tela de Visão Geral: 1. **Correção de Papéis Padrão e Trigger no Banco de Dados (`supabase/migrations/20260923160000_fix_user_roles_and_trigger.sql`)**: - Correção da constraint `profiles_role_check` para suportar explicitamente o papel `'user'`. - Ajuste dos defaults das colunas `role` (de `'admin'` para `'user'`) e `permissions` (de `'["*"]'` para `'[]'::jsonb`). - Atualização da função/trigger `public.handle_new_user()` com `SECURITY DEFINER` e `SET search_path = public, pg_temp`, garantindo que novos usuários não recebam perfil de administrador nem permissões universais por fallback. - Saneamento da base existente: administradores oficiais (`theo.serafim` e `rodrigo.motta`) preservados como `superadmin`, e demais colaboradores normalizados para `role = 'user'`. 2. **Propagação e Gestão de Roles nas Rotas e Interface**: - `POST /api/admin/usuarios`: Aceita `role` no corpo da requisição e repassa para `user_metadata` no Supabase Auth e na tabela `profiles`. - `PATCH /api/admin/usuarios/[id]`: Permite atualizar o papel do usuário no perfil e no Auth. - `UserModal.tsx`: Inclusão de seletor visual dedicado entre "Colaborador (Padrão)" e "Administrador", com notas explicativas sobre herança de grupos. - `UsersTable.tsx`: Badge visual discreto indicando "Administrador" e "Superadmin". 3. **Bloqueio de Acesso na Visão Geral (`DashboardModulesSection`)**: - Mapeamento das chaves de módulo (`moduleKey`) em todos os cards de gestão e ferramentas. - Integração com `usePermissions()`: usuários sem acesso ao módulo visualizam o card desabilitado (opacidade 50%, cursor não permitido, badge "Acesso Restrito", ícone de cadeado e sem link clicável). 4. **Proteção de Rotas com `PermissionGate` (Full Page Gate)**: - Adicionada prop `fullPageDenied` no primitivo `PermissionGate`, exibindo card padronizado de Acesso Restrito com botão para voltar à Visão Geral caso o usuário tente digitar URLs diretas no navegador (ex: `/admin/candidatos`, `/admin/eventos`, `/admin/usuarios`, `/admin/tema`, `/admin/templates`, `/admin/artigos`, `/admin/campanhas/all-mar`).
A Visão Geral agora respeita rigorosamente os privilégios do perfil do colaborador, impedindo a navegação e exibindo estado bloqueado com cadeado. Novos usuários não recebem mais privilégios administrativos por omissão e os papéis no Supabase refletem com fidelidade a governança estabelecida.
✨Feature
🔧Correção: Exclusão Imediata e Persistente de Scripts de Áudio no Playbook
✨Feature & UX / WhatsApp Embedded Signup Oficial da Meta (Login Simplificado estilo Kommo)
Adaptação completa do ecossistema de conexão da Meta ao planejamento consolidado de `docs/whatsapp` (notadamente `ADR-002: Onboarding oficial da Meta` e `meta-integration.md`) e alinhamento direto com o aplicativo **WPPTHEONE** configurado no painel da Meta Developers: 1. **Login Simplificado (Embedded Signup) estilo Kommo (`src/features/communication/hooks/useMetaSdk.ts`)**: - Integração com o SDK oficial da Meta v21.0 (`https://connect.facebook.net/pt_BR/sdk.js`). - Carregamento assíncrono e disparo do popup oficial `FB.login` via Facebook Login for Business com escopos `whatsapp_business_management` e `whatsapp_business_messaging`. - Captura reativa dos eventos postMessage da Meta (`WA_EMBEDDED_SIGNUP`), extraindo automaticamente `waba_id`, `phone_number_id` e status do fluxo sem que o usuário precise digitar nenhum identificador técnico. 2. **Backend de Troca de Tokens e Autodescoberta (`src/features/communication/providers/meta/metaEmbeddedSignup.ts` & `/api/admin/communication/embedded-signup/callback`)**: - Troca automática do código de autorização emitido pelo popup por token de longa duração na Graph API v21.0 (`/oauth/access_token`). - Inscrição automática do aplicativo no Webhook da WABA (`/subscribed_apps`). - Suporte inteligente para associação imediata dos números de teste e produção vinculados à conta da Meta. - Criptografia padrão bancário AES-256-GCM antes da gravação no banco de dados. 3. **Novo Modal de Onboarding Multimodo (`src/features/communication/components/ConnectMetaModal.tsx`)**: - **Aba 1 (Login Simplificado)**: Botão de ação oficial com marca do Facebook/Meta para conexão em 1 clique guiado. - **Aba 2 (Token Rápido WPPTHEONE)**: Atalho prático dedicado ao aplicativo já criado pelo usuário, permitindo colar o token gerado com 1 clique no painel da Meta e pré-preenchendo a WABA `1175432164074722`. - **Aba 3 (Webhook & URLs)**: Painel informativo com botão "Copiar" para preenchimento da URL de callback, Token de verificação e domínios permitidos no painel da Meta. - **Aba 4 (Manual / Avançado)**: Formulário para desenvolvedores recolhido por padrão, garantindo conformidade com a diretriz de ocultar detalhes técnicos do usuário final. 4. **Governança de Variáveis de Ambiente (`.env.example` e `.env.local`)**: - Documentação de `NEXT_PUBLIC_META_APP_ID`, `META_APP_SECRET`, `NEXT_PUBLIC_META_CONFIG_ID`, `META_WEBHOOK_VERIFY_TOKEN` e `COMMUNICATION_ENCRYPTION_KEY`.
Experiência de conexão do WhatsApp simplificada no padrão Kommo: o usuário administrativo da The One Seguros pode conectar seu WhatsApp Business em apenas 1 clique oficial através do popup da Meta sem lidar com complexidades técnicas de WABA IDs ou chaves de API manuais.
✨Feature & UI / Inbox Conversacional Unificado e Chat Central de Atendimento (Fase 5)
Implementação completa da **Central de Atendimento Conversacional (Inbox estilo WhatsApp Web / Kommo)** para atendimento de leads e clientes da The One Seguros: 1. **Serviço de Atendimento (`src/features/communication/services/inboxService.ts`)**: - `listInboxConversations`: Consulta otimizada com junção de canais, atendente atribuído, filtros por abas ("Todas", "Não Lidas", "Minhas") e busca textual simultânea por nome, telefone e texto da mensagem. - `getConversationDetails`: Recuperação dos metadados completos da conversa ativa. - `getConversationMessages`: Recuperação cronológica do histórico de mensagens com ordenação e status de entrega. - `markConversationAsRead`: Confirmação automática de leitura ao abrir a conversa, zerando `unread_count`. - `assignConversation`: Atribuição de atendentes/colaboradores da corretora a conversas específicas. 2. **APIs Administrativas de Atendimento (`src/app/api/admin/communication/inbox/`)**: - `GET /api/admin/communication/inbox/conversations`: Listagem de conversas com filtros e busca. - `GET /api/admin/communication/inbox/conversations/[id]/messages`: Consulta cronológica de mensagens de uma conversa. - `POST /api/admin/communication/inbox/conversations/[id]/messages`: Disparo de nova mensagem de chat pelo canal oficial via Meta Cloud API, atualizando a conversa e carimbos de envio. - `POST /api/admin/communication/inbox/conversations/[id]/read`: Confirmação de leitura de mensagens. - `POST /api/admin/communication/inbox/conversations/[id]/assign`: Atribuição de atendente responsável. 3. **Interface do Usuário em 3 Colunas (`src/features/communication/components/inbox/`)**: - `ConversationItem.tsx`: Card de conversa com avatar gerado por iniciais, telefone formatado, carimbo de hora relativa, prévia da última mensagem com indicador de direção e badge pulsante de não lidas. - `ConversationList.tsx`: Painel lateral esquerdo com busca em tempo real, abas de segmentação ("Todas", "Não Lidas", "Minhas") e botão de recarregar. - `MessageBubble.tsx`: Balão de mensagem na timeline (inbound à esquerda com fundo suave, outbound à direita com fundo sutil da marca) com tiques duplos de status (`sent`, `delivered`, `read`, `failed`). - `TemplateSelectorPopover.tsx`: Popover para disparo ágil de templates aprovados na Fase 4 com preenchimento assistido de variáveis. - `MessageComposer.tsx`: Composer de texto com autosize, atalhos de teclado (Enter envia, Shift+Enter quebra linha) e monitoramento da janela de 24 horas da Meta com recomendação de templates aprovados caso a janela esteja fechada. - `ContactContextSidebar.tsx`: Painel direito recolhível com dados completos do contato, canal de origem, atendente e botão de cópia de telefone em 1 clique. - `InboxView.tsx`: Orquestrador completo com polling suave a cada 5 segundos para recebimento em tempo real de mensagens via webhook. - `src/app/admin/comunicacao/inbox/page.tsx`: Rota administrativa protegida `/admin/comunicacao/inbox` com atalho direto na barra superior e no painel de canais.
O painel da The One Seguros agora dispõe de um Inbox Conversacional completo, moderno e integrado à Meta Cloud API, possibilitando que corretores e colaboradores conversem em tempo real com segurados, acompanhem confirmações de leitura e utilizem modelos aprovados sem atrito.
✨Feature & UI / Gestão de Templates de WhatsApp com Preview em Tempo Real e Sincronização Meta (Fase 4)
Implementação completa do ecossistema de gestão de **Modelos de Mensagem (WhatsApp Message Templates)** para a Meta Cloud API: 1. **Cliente HTTP de Templates da Meta (`src/features/communication/providers/meta/metaTemplateClient.ts`)**: - `fetchWabaTemplates`: Consulta paginada de templates cadastrados na WABA na Meta Graph API v21.0+. - `createWabaTemplate`: Envio e submissão de novos modelos com componentes (`HEADER`, `BODY`, `FOOTER`, `BUTTONS`) e exemplos estruturados de variáveis. - `deleteWabaTemplate`: Remoção remota de templates na WABA pelo nome. 2. **Serviço de Orquestração (`src/features/communication/services/templateService.ts`)**: - `syncTemplatesFromMeta`: Sincronização bidirecional e `upsert` na tabela `communication_templates` do Supabase. - `listTemplates`: Consulta com suporte a busca textual por nome/conteúdo e filtros de categoria (`UTILITY`, `MARKETING`) e status de aprovação. - `createTemplate`: Sanitização do nome (padrão minúsculo snake_case), validação de regras da Meta, geração de exemplos de variáveis obrigatórios e persistência local com status inicial. - `deleteTemplate`: Exclusão coordenada na Meta e no banco de dados local. 3. **APIs Administrativas (`src/app/api/admin/communication/templates/`)**: - `GET / POST /api/admin/communication/templates`: Consulta e criação com validação de sessão administrativa. - `POST /api/admin/communication/templates/sync`: Disparo de sincronização forçada com a Meta. - `DELETE /api/admin/communication/templates/[id]`: Exclusão com parâmetros dinâmicos. 4. **Interface do Usuário e Preview Interativo (`src/features/communication/components/templates/`)**: - `WhatsAppBubblePreview.tsx`: Simulador hiper-realista do balão de conversa do WhatsApp com suporte a cabeçalhos (texto, imagem, vídeo, documento), corpo com interpolação de variáveis em tempo real, rodapé, horário com tique azul duplo e botões clicáveis de link/telefone/resposta rápida. - `TemplateStatusBadge.tsx`: Indicadores visuais semânticos de aprovação (`Aprovado`, `Em Análise`, `Rejeitado` com tooltip do motivo, `Pausado`). - `TemplateEditorModal.tsx`: Modal amplo de criação dividido em duas colunas no desktop (formulário interativo com inserção assistida de variáveis + preview ao vivo). - `TemplatesListView.tsx`: Painel de visualização com métricas agregadas (Total, Aprovados, Em Análise, Rejeitados), busca, filtros, modal de preview isolado e sincronização manual. - `src/app/admin/comunicacao/templates/page.tsx`: Rota administrativa protegida com navegação intuitiva.
Os operadores e gestores da The One Seguros agora podem gerenciar com total autonomia e clareza os modelos de mensagem oficiais da Meta, visualizando exatamente como o cliente receberá a mensagem no WhatsApp antes mesmo de submetê-la para aprovação.
✨Feature / Ingestão de Webhooks da Meta & Mensageria Bidirecional Idempotente (Fase 3)
Implementação completa do pipeline de recepção em tempo real e envio de mensagens para o WhatsApp Business via Meta Cloud API: 1. **Endpoint Público de Webhook (`/api/webhooks/meta`)**: - `GET`: Validação do handshake do webhook da Meta (`hub.mode === 'subscribe'`, `hub.verify_token`, retornando `hub.challenge`). - `POST`: Recepção de payloads da Meta com resposta imediata HTTP 200 em milissegundos para evitar penalidades e desligamento automático do webhook por timeout pela Meta, delegando o processamento assíncrono ao serviço especializado. 2. **Parser Especializado de Webhook (`src/features/communication/providers/meta/metaWebhookParser.ts`)**: - Extrai metadados completos de mensagens de entrada (`text`, `image`, `document`, `audio`, etc.) e eventos de status de saída (`sent`, `delivered`, `read`, `failed`). 3. **Serviço de Ingestão e Processamento Idempotente (`src/features/communication/services/webhookService.ts`)**: - Gravação imediata do payload bruto em `webhook_events` para auditoria e tolerância a falhas. - Resolução ou criação automática da conversa na tabela `conversations`, mantendo `unread_count`, `last_message_at` e `last_message_text` sincronizados. - Deduplicação e gravação transacional das mensagens em `messages` com base no `external_message_id` (wamid único da Meta). - Atualização automática dos carimbos de entrega e leitura (`delivered_at`, `read_at`, `failed_at`) a partir dos eventos de status. 4. **Serviço de Mensageria e Disparo (`src/features/communication/services/messageService.ts`)**: - Disparo de mensagens ativas e templates oficiais utilizando credenciais decriptografadas em memória. - Registro automático da mensagem de saída e atualização do cabeçalho da conversa. 5. **API Administrativa de Mensagens (`/api/admin/communication/messages`)**: - Endpoint protegido para colaboradores dispararem mensagens diretas ou templates para qualquer número de contato. 6. **Interface de Teste de Disparo (`SendTestMessageModal.tsx`)**: - Modal acessível diretamente no card do canal conectado (`ChannelDetailsCard.tsx`), permitindo validação imediata do fluxo de envio sem sair do painel administrativo.
O ecossistema The One Seguros agora possui capacidade completa de troca de mensagens bidirecional com o WhatsApp via Meta Cloud API, tratando mensagens recebidas com idempotência e auditoria, além de permitir disparos manuais e automáticos imediatos.
✨Feature & UI / Integração Meta Cloud API & Gestão de Canais Estilo Kommo (Fase 2)
Implementação da camada de integração com a **Meta Graph API v21.0+** e interface de usuário para gerenciamento de canais de WhatsApp Business no painel administrativo (`/admin/comunicacao`), inspirada na simplicidade e experiência de usuário do Kommo: 1. **Integração com Meta Graph API (`src/features/communication/providers/meta/`)**: - `metaClient.ts`: Métodos de consulta de WABA ID (`fetchWabaDetails`), listagem e saúde de números (`fetchWabaPhoneNumbers`), e inscrição automática em webhooks (`subscribeWabaWebhook`). - `MetaProvider.ts`: Implementação concreta dos contratos `ChannelProvider` e `MessagingProvider`. 2. **Serviço de Orquestração (`src/features/communication/services/connectionService.ts`)**: - Métodos para buscar a conexão ativa (com token mascarado para segurança), salvar/validar credenciais com criptografia AES-256-GCM, sincronizar números de telefone e qualidade (`GREEN`, `YELLOW`, `RED`) e desconectar canais. 3. **APIs Administrativas (`src/app/api/admin/communication/`)**: - `GET / POST /api/admin/communication/connection`: Leitura e configuração de credenciais da WABA. - `POST /api/admin/communication/connection/sync`: Sincronização em tempo real de saúde e limites. - `POST /api/admin/communication/connection/disconnect`: Desativação do canal. 4. **Interface Administrativa Inspirada no Kommo (`src/features/communication/components/`)**: - `CommunicationOverview.tsx`: Container com estados conectado e não conectado. - `ChannelDetailsCard.tsx`: Card de canal ativo com número formatado, qualidade do número (`ChannelHealthBadge`), status pulsante, informações de Webhook com cópia em 1 clique e detalhes técnicos recolhíveis para não poluir o fluxo comum. - `ConnectMetaModal.tsx`: Modal guiado para preenchimento de WABA ID, System User Token e Verify Token com validação em tempo real. - `AdminSidebar.tsx` e `AdminMobileHeader.tsx`: Adição do item de menu "WhatsApp & Canais" com ícone `MessageSquare`.
O painel administrativo da The One Seguros agora dispõe de uma interface completa, fluida e amigável para conexão, monitoramento e diagnóstico de canais do WhatsApp Business Oficial (Meta Cloud API).
✨Feature & Arquitetura / Fundação da Camada de Comunicação e Schemas Supabase (Fase 1)
Implementação da infraestrutura de dados e contratos da **Camada de Comunicação Multicanal (Communication Layer)** da The One Seguros, estabelecendo uma arquitetura *provider-agnostic* desacoplada, pronta para integração oficial com a Meta Cloud API (WhatsApp Business Platform) e extensível a novos canais (Instagram Direct, Messenger e Microsoft E-mail): 1. **Infraestrutura Relacional no Supabase**: - Criação da migração `20260923180000_create_communication_layer_tables.sql` contendo 8 tabelas centrais: `communication_connections`, `communication_channels`, `conversations`, `conversation_participants`, `messages`, `message_attachments`, `communication_templates` e `webhook_events`. - Adição de índices de alta performance para busca rápida por telefone, status e ordenação cronológica de conversas. - Aplicação de triggers automáticos de atualização de `updated_at`. - Habilitação estrita de Row Level Security (RLS) com políticas para colaboradores autenticados. 2. **Modelos de Domínio e Contratos TypeScript**: - Criação dos modelos normalizados `NormalizedMessage`, `CommunicationChannel`, `CommunicationTemplate` e `Conversation` em `src/features/communication/types/communication.types.ts`. - Tipagem completa dos payloads da Meta Graph API v21.0+ e webhooks em `src/features/communication/types/meta.types.ts`. - Criação das interfaces de abstração `MessagingProvider`, `TemplateProvider` e `ChannelProvider` em `src/features/communication/providers/contracts/index.ts`. 3. **Segurança e Criptografia em Repouso**: - Implementação de `src/lib/encryption.ts` com AES-256-GCM para criptografia simétrica de tokens de acesso corporativos e segredos antes da persistência no banco de dados.
A base de código agora dispõe de um modelo de dados robusto aplicado no PostgreSQL remoto do Supabase e contratos fortemente tipados, permitindo avançar para as próximas fases: conexão oficial da Meta (Fase 2), ingestão de webhooks (Fase 3), editor de templates com preview (Fase 4) e inbox conversacional (Fase 5).
🔧Correção & Persistência de Tema por Sessão Autenticada
Correção do problema em que o tema configurado pelo usuário no perfil (como o preset `midnight`) revertia para o tema oficial (`the-one-official`) após recarregamento de página ou atualizações do sistema: 1. **Identificação da Causa Raiz em `GET /api/theme/user`**: - A rota dependia de parâmetros de busca (`searchParams`) e, na ausência destes, realizava uma consulta cega no primeiro perfil ativo (`query.eq('is_active', true).limit(1)`). Isso retornava as preferências do primeiro usuário cadastrado na base (tema oficial), sobrescrevendo o tema do usuário logado. - A rota foi refatorada para utilizar `getAuthenticatedUserWithPermissions()`, obtendo diretamente o `id` da sessão autenticada e respeitando os cookies de sessão e de tema (`theone_admin_theme_id`). 2. **Sincronização Segura de Presets no `ThemeContext.tsx`**: - Resolução da condição de corrida no carregamento de presets: os dados retornados de `/api/theme/presets` agora são combinados de forma síncrona com `DEFAULT_THEME_PRESETS` antes de buscar pelo identificador de preset do usuário (`userData.themePresetId`), garantindo aplicação imediata de temas como `midnight` tanto no estado do React quanto no DOM. 3. **Proteção de Rota com `PermissionGate`**: - A visualização geral do Theme Creator (`ThemeCreatorView.tsx`) foi envolvida com `<PermissionGate moduleKey="theme" fullPageDenied>`, impedindo acesso indevido por URL direta caso o perfil não possua a permissão necessária.
O tema selecionado pelo colaborador (como o Midnight) é mantido fielmente entre recarregamentos de página, deploys e navegações, sem qualquer regressão para o tema oficial.
🎨UI & Responsividade / Alinhamento e Espaçamento da Tag Acesso Restrito no Login
Ajuste fino no layout do cabeçalho do card de autenticação (`/login`): 1. **Alinhamento Vertical e Distribuição Horizontal**: - Reestruturação do container superior em `flex items-center justify-between gap-3`, nivelando perfeitamente o eixo Y da logo The One e do badge `Acesso Restrito`. - Eliminação do alinhamento anterior baseado em `inline-block`/`inline-flex` dentro de `text-center`, que provocava descentralização vertical pela baseline e quebra visual de altura. 2. **Responsividade e Proporcionalidade**: - Aplicação de dimensões fluidas responsivas (`h-8 sm:h-9` para a logo e `text-[10px] sm:text-[11px]` com `px-2.5 sm:px-3` para a tag), assegurando enquadramento adequado em viewports mobile estreitas sem overflow ou sobreposição.
Cabeçalho do login com alinhamento milimétrico, simetria visual com as bordas do card e sem desnível entre a marca e a indicação de acesso restrito.
🏗️Arquitetura & Governança de UI / Modularização da Feature Templates (`src/features/templates/`) e Eliminação de God Page
Refatoração arquitetural completa do módulo Central de Templates para conformidade estrita com o Design System, Governança de UI e separação de camadas do projeto: 1. **Desacoplamento e Criação de `src/features/templates/`**: - Criação da camada de domínio isolada `src/features/templates/` contendo componentes modulares focados e reutilizáveis: - `TemplatesManagementView.tsx`: Orquestrador de tela com toolbar, busca em tempo real, filtros por canal (Todos, WhatsApp, E-mail), cards de métricas e grid responsivo. - `TemplateCard.tsx`: Card atômico com badges semânticos de tipo, categoria, prévia de conteúdo e ações de edição e exclusão via `IconButton`. - `TemplatePreview.tsx`: Simulador interativo multicanal com modo de visualização WhatsApp (estilização de chat corporativo com selo oficial) e E-mail corporativo com cópia em um clique e alternância de tags preenchidas vs. brutas. - `TemplateModal.tsx`: Modal declarativo de criação e edição reutilizando o primitivo `<Modal>` da UI pura, com suporte a inserção assistida de variáveis dinâmicas no cursor da mensagem. - `Template.types.ts`: Definições estritas de tipos (`MessageTemplate`, `TemplateFormData`, `TemplateType`, `AVAILABLE_TAGS`). - `index.ts`: Barrel export unificado da feature. 2. **Eliminação de God Page na Rota**: - A página de rota `src/app/admin/templates/page.tsx` (anteriormente com 645 linhas e componentes inline misturados) foi reduzida a um Server Component conciso de apenas 10 linhas, com metadados SEO e delegação pura para `<TemplatesManagementView />`. 3. **Zero Cores Literais e Adoção do Design System**: - Eliminação de todas as classes de cores nativas do Tailwind (`emerald-600`, `blue-600`, `text-white`, `bg-emerald-950`, etc.). - Utilização integral de tokens semânticos (`text-status-approved`, `bg-status-interview/15`, `text-base-content`, `border-border`, `text-primary`).
Eliminação de componentes inline em rotas, separação estrita de camadas de UI pura e de domínio, zero cores literais e manutenibilidade modular.
✨Feature
Auditoria e saneamento de padrões de componentização, tema e TypeScript no módulo de Usuários e Acessos: 1. **Adoção do Primitivo `<StatCard>`**: - Substituição de contêineres e divs manuais pelas instâncias oficiais de `<StatCard>` para as métricas superiores ("Total de Usuários", "Usuários Ativos", "Contas Bloqueadas", "Grupos de Permissão"). 2. **Adoção do Componente Primitivo `<Tabs>`**: - Substituição dos botões manuais de navegação por abas com `<Tabs<'users' | 'groups'>>`, garantindo consistência visual e acessibilidade. 3. **Padronização dos Modais com `<Modal>`**: - Refatoração dos modais `UserModal.tsx` e `GroupModal.tsx` para reutilizar o componente oficial `<Modal>` de `src/components/ui/Modal`, eliminando duplicações manuais de overlay `fixed inset-0 bg-black/70` e garantindo suporte a portal, responsividade e backdrop nativo. 4. **Integração do Toast Oficial**: - Renderização declarativa do componente `<Toast>` de `src/components/ui/Toast` para feedback de ações e erros. 5. **Tipagem Estrita (Zero `any`)**: - Eliminação de `as any` no seletor de status (`statusFilter`). - Tipagem estrita de blocos `catch` com `catch (err: unknown)` e verificação de instância `Error`.
Eliminação de containers modais manuais, padronização visual completa com o Design System através de `StatCard` e `Tabs`, e tipagem TypeScript robusta sem `any`.
✨Feature, 🔧 Correção & 🎨 UI: Scripts Dinâmicos, Desbloqueio do Timer de Áudio, Filtro de Consultor e Login
✨Feature & 🎨 UI: Tags Dinâmicas e Somadores de Tempo no Playbook de Áudio
✨Feature & 🎨 UI: Modo Teleprompter Dinâmico no Treinador de Locução
✨Feature & 🔧 Correção
✨Feature
🎨UI & Refatoração / Auditoria e Conformidade de Design System, Componentização e Tokens Semânticos
Auditoria profunda e adequação de todo o ecossistema do módulo de Gestão de Eventos às regras estritas de UI Architecture, Governança de Temas e Componentização: 1. **Erradicação de Cores Nativas do Tailwind (Zero Hardcoded Colors)**: - Substituição de classes de cores nativas (`emerald-400`, `emerald-500`, `red-400`, `red-500`, `purple-400`, `text-success`) pelos tokens semânticos mapeados no Design System (`text-status-approved`, `from-status-approved`, `text-status-rejected`, `text-accent`, `text-whatsapp`). 2. **Reúso de Componentes Primitivos da UI Pura**: - Refatoração do `EventDetailMetrics.tsx` para adoção do componente primitivo reutilizável `StatCard` (`src/components/ui/StatCard`), eliminando marcação HTML manual e divs ad-hoc. - Substituição de elemento `<Link className="...">` estilizado manualmente em `EventCard.tsx` pelo componente primitivo `Button` (`src/components/ui/Button`). 3. **Segurança Estrita de Tipos (TypeScript Zero `any`)**: - Remoção de tipagens `any` em tratamentos de erros (`catch (err)`) e casts de valores de moderação em `EventsHubView.tsx` e `EventSettingsTab.tsx`.
Módulo de Gestão de Eventos 100% aderente ao Design System, sem vazamento de cores literais, com alta consistência visual e perfeita integração com a biblioteca de UI pura.
✨Feature: Paginação Integrada com Seletor de Linhas por Página (DataTable & Gestão de Convidados)
- **Componente Genérico de Paginação (`DataTablePagination`)**: - Implementado o componente primitivo `DataTablePagination` integrado ao `DataTable`, permitindo selecionar dinamicamente a quantidade de linhas exibidas por página (`10`, `25`, `50` ou `100`). - Navegação completa com botões para Primeira Página (`<<`), Anterior (`<`), Próxima (`>`) e Última Página (`>>`), com desabilitação automática nos limites e durante o carregamento de dados (`loading`). - Apresentação textual padronizada com o total de registros e número de páginas. - Layout totalmente responsivo com suporte a empilhamento em viewports móveis sem overflow. - **Integração na Gestão de Convidados de Eventos (`/admin/eventos/[slug]`)**: - Conectado o seletor de quantidade de linhas por página (`pageSizeOptions: [10, 25, 50, 100]`) à tabela de convidados (`GuestTable.tsx`). - Vinculado o estado `limit` e a função `setLimit` do hook `useEventGuests` em `EventDetailView.tsx`, permitindo ao usuário alternar a densidade de convidados por página em tempo real.
O gestor de eventos agora pode escolher visualizar 10, 25, 50 ou até 100 convidados simultaneamente na mesma página, reduzindo a necessidade de paginação excessiva em eventos de grande porte.
✨Feature & Regra de Negócio / Ciclo de Vida de Vagas com 3 Status (Ativo, Pausado e Concluído Irreversível)
Implementação dos 3 estados de ciclo de vida para as oportunidades e vagas de emprego do portal The One Seguros: 1. **Status Ativo (`active`)**: - Vaga exibida com destaque normal no portal de vagas (`/trabalhe-conosco`). - Permite navegação, visualização detalhada e recebimento regular de candidaturas pelo formulário e wizard (`/trabalhe-conosco/[slug]/candidatar`). 2. **Status Pausado (`paused`)**: - Vaga permanece visível no portal público para consulta e transparência institucional, com badge visual de "Inscrições Pausadas" / "Pausada". - **Bloqueio de Inscrição**: O botão de inscrição é substituído por estado desabilitado com aviso explicativo; tentativas de acesso direto à rota `/candidatar` exibem uma tela amigável informando a pausa no processo; a API de submissão (`/api/trabalhe-conosco`) rejeita novas inscrições com mensagem orientativa. 3. **Status Concluído (`completed`)**: - Vaga é **ocultada imediatamente do portal público** (queries do Sanity filtram apenas `active` e `paused`, e acessos diretos por slug retornam 404). - **Irreversibilidade Estrita**: Uma vaga concluída **NÃO PODE SER REATIVADA** sob hipótese alguma. - **Garantias de Irreversibilidade**: - No backend (`PUT /api/admin/vagas`), tentativas de alterar o status de uma vaga concluída são rejeitadas com erro 400. - No frontend (`JobPositionCard`), os botões e opções de reativação ou pausa são removidos do menu contextual. - No modal de edição (`JobPositionModal`), o status é travado em "Concluída (Irreversível)" com aviso explícito. - Na visão administrativa (`JobPositionsView`), a transição para Concluída exige confirmação em modal dedicado (`ConfirmModal`) com alerta de irreversibilidade.
- Controle completo e seguro do ciclo de vida das vagas de recrutamento, com feedback claro para candidatos no portal público e rigorosa governança no painel administrativo contra reativações indevidas de processos finalizados.
✨Feature
- **Card de Usuário com Menu Dropup Superior (`UserDropupMenu`)**: - O card de identificação do colaborador foi alocado na base inferior da `AdminSidebar`, tornando-se o elemento acionador de um menu dropdown flutuante que se expande para cima (`bottom-full mb-2`). - Apresenta cabeçalho informativo com avatar, nome, e-mail, cargo e badge indicativa de Administrador. - Agrupa de forma organizada e limpa: 1. Acesso à tela de configuração "Meu Perfil" (`/admin/perfil`). 2. Ferramenta de auditoria "Ver como Usuário" / "Restaurar Minha Visão" (restrita ao Administrador Geral). 3. Ação de "Encerrar Sessão" com confirmação visual em destaque. - Implementado fechamento automático ao clicar fora através de `useRef` e listener de eventos. - **Menu Colapsado de Atalhos do Ecossistema (`ShortcutsMenu`)**: - Alocado logo acima do card de usuário no rodapé da barra lateral. - Concentra os links para as plataformas externas e auxiliares da The One: 1. **Sanity Studio** (`/studio`) - Gestor de Conteúdo & CMS. 2. **Portal de Vagas** (`/trabalhe-conosco`) - Área pública de recrutamento. 3. **Site Oficial The One** (`/`) - Portal público institucional. 4. **The One Prime CRM** (`https://theonelegacy.com.br/`) - Plataforma de Gestão Corporativa. - **Matriz de Permissões Individuais (RBAC Granular)**: - Cada atalho possui código de permissão dedicado cadastrado no módulo `shortcuts` (`shortcuts:sanity`, `shortcuts:vagas`, `shortcuts:site`, `shortcuts:crm`). - Colaboradores visualizam estritamente os atalhos autorizados pelos seus grupos de acesso; caso não possuam nenhum privilégio, o menu se oculta automaticamente. - Suporte a alternância de exibição (Dropup Flutuante ou Acordeão Embutido na sidebar). - **Página de Configuração de Perfil do Usuário (`/admin/perfil` & `ProfileView`)**: - Rota dedicada permitindo ao usuário gerenciar seus próprios dados e credenciais: - Upload direto de nova foto de perfil com processamento no bucket `avatars` do Supabase Storage. - Edição do Nome Completo. - Alteração de Senha com validação de correspondência e mínimo de 6 caracteres. - Exibição em modo somente leitura de E-mail corporativo, Cargo e Grupos de Permissão vinculados. - Rota de API protegida `PATCH /api/admin/me` para atualização atômica de `profiles` e `auth.users`.
O rodapé da sidebar foi completamente modernizado, oferecendo uma experiência executiva de alto nível. As opções de encerramento de sessão, troca de visão e configuração de perfil agora ficam agrupadas de forma elegante no menu suspenso do card do usuário. Os atalhos para Sanity, Vagas, Site e CRM possuem controle estrito de permissões RBAC por colaborador e estão centralizados no menu colapsado superior. A nova página `/admin/perfil` permite autonomia completa para colaboradores gerenciarem foto, nome e credenciais com total segurança.
🔧Correção: Desacoplamento de Modais via React Portal (createPortal)
- **Causa Raiz**: O componente genérico de interface `Modal` renderizava sua casca de overlay (`fixed inset-0`) diretamente na árvore DOM do componente pai. Quando disparado de dentro de containers com propriedades CSS como `backdrop-filter: blur(...)`, `transform` ou `overflow: hidden/auto` (como a `AdminSidebar`), a especificação do CSS cria um novo *containing block*, fazendo com que a posição `fixed` fique restrita à largura da sidebar (256px) em vez da tela inteira. - **Solução**: Atualizado o componente central `Modal` (`src/components/ui/Modal/Modal.tsx`) para utilizar `createPortal(..., document.body)`. O overlay agora é injetado diretamente no corpo da página HTML, centralizando perfeitamente o modal na viewport completa com backdrop escuro global.
O modal "Ver como Usuário" (e todos os outros modais do sistema) agora abrem perfeitamente centralizados na tela inteira com suas dimensões normais (`max-w-3xl`), sem ficar comprimidos ou limitados pela largura da Sidebar.
✨Feature
- **Simulação de Visão de Usuário (Impersonation)**: - Criação de funcionalidade exclusiva para o Administrador Geral conseguir navegar no sistema com a visão, restrições e permissões de qualquer colaborador selecionado. - Implementado seletor rápido no `AdminSidebar` e no drawer mobile `AdminMobileHeader` ("Ver como Usuário"). - Criação do modal `UserImpersonationModal` para busca e seleção instantânea de colaboradores por nome, e-mail, cargo ou grupo de permissão. - Adição do componente `ImpersonationBanner` fixo no topo do layout administrativo (`/admin/*`) alertando sobre o modo de simulação ativo com botão de encerramento rápido ("Restaurar Minha Visão"). - Atualização do `PermissionsContext` para gerenciar dinamicamente o usuário efetivo (`impersonatedUser || realUser`), com persistência da simulação em `sessionStorage` para navegação fluida entre páginas do painel. - **Correção da Matriz de Permissões do Administrador Geral**: - Correção no `GroupModal` que impedia o grupo "Administrador Geral" de exibir suas permissões selecionadas em tela. - O grupo possuía permissões como wildcard `['*']`, enquanto a interface realizava checagem de igualdade estrita com os códigos individuais de ação. - Ajustado para expandir o wildcard para todos os códigos de ações do catálogo `SYSTEM_MODULES` ao abrir o modal, garantindo que todas as 21 checkboxes apareçam marcadas, e preservando o wildcard `['*']` ao salvar caso todas permaneçam ativas.
O Administrador Geral agora pode auditar, testar e experimentar a plataforma sob a perspectiva exata de qualquer colaborador ou equipe, verificando bloqueios de módulos, menus desativados e permissões de botões em tempo real com segurança total e retorno imediato à sua visão com um clique. Além disso, o modal do grupo Administrador Geral passa a exibir visualmente todas as 21 permissões do sistema devidamente marcadas.
🛡️Segurança & Permissionamento Granular (RBAC: Tema Admin vs Tema Público)
Desacoplamento e separação estrita entre a permissão para definir o tema pessoal do painel administrativo e a permissão para alterar e publicar o tema global do site público: 1. **Separação de Permissões Granulares (`src/lib/permissions.ts`)**: - `theme:customize_admin`: Permite ao colaborador criar, personalizar e salvar seu próprio tema exclusivo no painel administrativo (`public.profiles.theme_preferences`). - `theme:publish_site`: Permite ao administrador alterar e publicar o tema global visível a todos os visitantes do site oficial (`theoneseguros.com.br`). - `theme:view`: Permite visualizar o Theme Creator e navegar pela vitrine de componentes. - Retrocompatibilidade: o código legado `theme:edit` continua compatível concedendo ambas as permissões quando presente em perfis legados. 2. **Proteção nos Endpoints da API**: - `POST /api/theme/public`: Protegido com checagem de `theme:publish_site` via `getAuthenticatedUserWithPermissions()`, rejeitando com 403 Forbidden usuários sem permissão. - `POST /api/theme/user`: Protegido com checagem de `theme:customize_admin`, garantindo que o colaborador autenticado salve seu tema com segurança em seu próprio ID. 3. **Interface Adaptativa (`ThemeCreatorView.tsx`)**: - Detecção automática de permissões: a tela inicializa automaticamente no escopo permitido (`activeScope = 'admin'` para colaboradores sem acesso ao site público). - Bloqueio visual nos cards seletores de escopo com indicação "Sem Acesso", badge de restrição e tooltip explicativo. - Botões "Publicar no Site Oficial" e "Salvar no Meu Perfil" protegidos com `PermissionGate`. 4. **Padronização Visual de Botões e PageHeader**: - Correção do alinhamento do botão "Novo Colaborador" e "Novo Grupo" na gestão de usuários, utilizando o componente oficial `PageHeader` e a propriedade nativa `icon={<UserPlus size={15} />}` para garantir layout horizontal perfeito e sem quebras de linha.
Colaboradores podem agora ter permissão para customizar a aparência do seu painel de trabalho administrativo sem correr o risco de alterar acidentalmente as cores e fontes do site público institucional da The One Seguros.
✨Feature & 🛡️ Segurança: Sistema Completo de Gestão de Usuários & RBAC Granular
Implementação de ponta a ponta do sistema de controle de acesso baseado em papéis (RBAC - Role-Based Access Control) e matriz de permissões granulares por módulo para o painel administrativo da The One Seguros: - **Modelo de Dados & Migrações Supabase**: - Tabela `permission_groups`: Definição de grupos com identificador, nome, descrição, flag `is_default` e array JSONB `permissions` com as permissões granulares mapeadas. - Tabela `user_group_membership`: Associação N:N entre usuários (`profiles.id`) e grupos de acesso com constraints de integridade referencial `CASCADE`. - Storage Bucket `avatars`: Bucket público dedicado para armazenamento de fotos de perfil de colaboradores com RLS seguro. - Grupos de Acesso Padrão criados: *Administrador Geral* (permissão `*`), *Gestão de Pessoas & Recrutamento*, *Gestor de Eventos 360°*, *Editor de Conteúdo & Artigos* e *Colaborador Corporativo* (grupo padrão para novos logins via Azure AD). - **Catálogo Mestre de Permissões Granulares**: - Módulos mapeados: `recruitment` (Recrutamento), `events` (Eventos), `articles` (Artigos), `templates` (Templates de Mensagens), `theme` (Theme Creator) e `users` (Gestão de Usuários e Acessos). - Ações granulares: `access`, `create`, `edit`, `move`, `delete`, `export`. - **Camada de Provedor & Contexto de Permissões**: - `PermissionsProvider` e hook `usePermissions()`: Disponibiliza reativamente o perfil do colaborador logado, a lista consolidada de permissões e as funções `can(permissionCode)`, `canAny(codes)`, `canModule(moduleKey)` e `isSuperAdmin`. - Componente primitivo de UI `PermissionGate`: Bloqueia e desabilita elementos restritos em tela mantendo conformidade com o design system, exibindo tooltips informativos quando a ação não for permitida ao usuário. - **Tela de Gestão de Usuários (`/admin/usuarios`)**: - Aba "Colaboradores": Listagem em `DataTable` com foto, nome, cargo, badges de grupos atribuídos, status (Ativo/Bloqueado), data de cadastro e ações contextuais. - Aba "Grupos de Acesso": Cards detalhados de cada grupo exibindo badges de permissões ativas, contagem de membros em tempo real e ações de edição/exclusão. - Modal de Usuário: Upload de foto com preview imediato, suporte a link de imagem externa, nome, cargo, e-mail, checkboxes de grupos e opções de envio de convite por e-mail ou definição de senha provisória. - Modal de Grupo: Formulário completo com matriz visual de permissões agrupadas por módulo e ações selecionáveis via checkboxes com botões de atalho "Marcar Todas" / "Desmarcar". - **Bloqueio em Tempo Real & Middleware**: - O proxy do Next.js valida o campo `is_active` em tempo real. Usuários inativados são barrados imediatamente, sua sessão ativa no Supabase Auth é revogada e eles são redirecionados para a tela de login com o alerta amigável de conta suspensa. - **Autenticação Microsoft Corporativa (Azure AD)**: - Adicionado botão dedicado de login corporativo na tela `/login` via OAuth do Azure AD com atribuição automática do grupo padrão `is_default` no primeiro acesso.
Painel administrativo totalmente blindado e adaptável, permitindo ao gestor cadastrar novos colaboradores com foto, nome e cargo, organizar a equipe em múltiplos grupos customizáveis e controlar de forma milimétrica o que cada usuário pode visualizar, criar, editar, movimentar ou excluir em cada módulo da plataforma.
📚Documentação & Governança Técnica (Mapa de Pendências e Próximas Implementações)
✨Feature & UI (Múltiplas Etapas Dinâmicas de Perguntas por Produto & Validação de Campos Obrigatórios)
Implementação de suporte a múltiplas etapas dinâmicas de perguntas configuráveis no Sanity Studio por produto, permitindo ao administrador dividir questionários longos em etapas temáticas customizadas e definir perguntas obrigatórias, culminando sempre na etapa final de dados de contato e consentimento LGPD: - **Modelagem no Sanity CMS (`wizardStepType.ts`)**: - Novo campo `steps` (array de etapas do produto com `stepKey`, `title`, `subtitle` e seu próprio array de `questions`). - Campo `required` (boolean) adicionado ao contrato de pergunta para controle granular de obrigatoriedade. - Retrocompatibilidade total transparente: produtos que mantenham apenas o campo legado `questions` continuam funcionando como uma etapa única de perguntas sem qualquer perda de dados ou quebras. - **Consulta GROQ no Sanity (`src/app/cotacao/page.tsx`)**: - Projeção GROQ atualizada para recuperar os blocos `steps` estruturados e a flag `required` em tempo real. - **Componente Interativo do Wizard (`src/components/WizardForm.tsx`)**: - Cálculo adaptativo do total de passos: `Passo 1 (Segmento) + Passo 2 (Produto) + N (Etapas de Perguntas) + 1 (Contato & LGPD)`. - Contador no cabeçalho ("Passo X de Y") e barra de progresso ajustados dinamicamente em tempo real conforme a complexidade do produto selecionado. - Validação de campos obrigatórios (`required`) da etapa atual antes de liberar o avanço, com alerta visual elegante. - Navegação retroativa consistente entre todas as subetapas através do botão "Voltar" e "Etapa anterior". - Preservação intacta do contrato de envio da cotação para o backend (`/api/cotacao`), gerador de PDF (`PDFKit`) e e-mails Microsoft Graph API.
O administrador agora pode arquitetar livremente questionários de cotação divididos em 1, 2, 3 ou mais etapas temáticas específicas para cada produto no Sanity Studio, elevando a conversão e clareza para os clientes da The One Seguros.
🎨UI & Refinamento Visual
Remoção da contagem regressiva secundária redundante contida no card de Data & Horário (`EventPracticalInfoSection.tsx`): - Com a inclusão do card principal de contagem regressiva em destaque no topo da página de detalhes do evento, a contagem menor no interior do card de informações práticas tornou-se redundante. - O card de Data & Horário agora apresenta uma composição mais limpa e elegante, destacando a data do encontro, o horário e o botão de ação rápida para adicionar ao Google Agenda. - Limpeza de estados e timers periódicos no componente.
Eliminação de redundância visual na página de detalhes do evento, proporcionando maior clareza e hierarquia na leitura das informações práticas.
🔧Correção & Otimização de Classes CSS Tailwind v4
Ajuste fino de classes utilitárias e conformidade com as regras modernas do Tailwind CSS v4 e ESLint: - **Substituição de Gradientes Legados**: Atualização das classes `bg-gradient-to-*` para a nova sintaxe recomendada `bg-linear-to-*` em `testemunhos/page.tsx`, `EventFeedbackWizard.tsx` e `PublicEventDetailView.tsx`. - **Simplificação de Classes Dimensionais**: Conversão de valores arbitrários (`min-w-[200px]`, `min-w-[180px]`, `min-w-[300px]`, `max-w-[140px]`) para utilitários padronizados (`min-w-50`, `min-w-45`, `min-w-75`, `max-w-35`). - **Eliminação de Classes Conflitantes e Redundantes**: Remoção de `block` concorrente com `flex`, e de `text-sm` concorrente com `text-xs` no `EventSettingsTab.tsx`. - **Limpeza de Warnings e Escape de Caracteres**: Remoção de imports e variáveis não utilizadas e escape semântico de aspas literais em modais de feedback.
Eliminação completa dos avisos do compilador Tailwind v4 e do ESLint nas páginas e componentes do módulo de eventos.
✨Feature & UI: Card de Contagem Regressiva & Notificações Multicanal no RSVP (Referência theone360)
Implementação completa da primeira etapa de gestão de eventos, trazendo o ecossistema de engajamento do `theone360.com.br` para a plataforma oficial da The One Seguros: - **Card de Contagem Regressiva (`CountdownCard`)**: - Posicionado estrategicamente em destaque entre o Hero Principal e a seção "Quando & Onde" (`EventPracticalInfoSection`). - Estrutura com 4 blocos em grid (`Dias`, `Horas`, `Minutos`, `Segundos`) com tipografia tabular, efeitos suaves de brilho/aura com os tokens de cor do tema (`primary`), animação de hover e estado elegante para eventos concluídos. - Implementado com subscrição pura do relógio via `useSyncExternalStore`, garantindo total conformidade com as regras de pureza e zero cascata de re-renders do React 19. - **Fluxo Inline de Notificações na Confirmação de Presença (RSVP)**: - Transição em 3 etapas fluidas dentro do próprio card do formulário (`form` ➔ `preferences` ➔ `confirmed`), eliminando popups intrusivos e proporcionando uma experiência contínua. - **Canal 1 (Notificação no Celular / Web Push)**: Acionamento nativo de permissão no navegador, registro do Service Worker `/sw.js`, subscrição com credenciais VAPID públicas e persistência segura em `public.push_subscriptions`. Alerta contextual caso o navegador silencie as permissões. - **Canal 2 (WhatsApp)**: Opção de autorização para recebimento de orientações e lembretes automáticos prévios de presença. - **Canal 3 (Salvar na Agenda)**: Download automático do arquivo `.ics` (para iOS, macOS, Windows e Outlook) e suporte nativo ao Google Calendar contendo título, horário e localização do evento. - **Canal 4 (E-mail)**: Confirmação e lembretes oficiais, com campo de input inline para preenchimento de e-mail caso não tenha sido fornecido na primeira etapa. - **Tela Final de Conclusão**: Resumo dos dados práticos do encontro, botão de acesso rápido "Adicionar à Agenda" e botão "Confirmar outra pessoa". - **Novas Rotas de API**: - `POST /api/push-subscription`: Recebe tokens de push, normaliza Base64 (padding `=`) e realiza upsert em `public.push_subscriptions` vinculado a `confirmacao_id` e `event_slug`. - `POST /api/eventos/[slug]/preferencias`: Atualiza canais selecionados em `public.confirmacoes` e dispara e-mail inicial caso tenha sido cadastrado na etapa de preferências.
A experiência de confirmação de presença agora engaja o convidado imediatamente com opções práticas de lembrete (celular, WhatsApp, agenda e e-mail), reduzindo drasticamente faltas no dia do evento, enquanto o novo card de contagem regressiva confere senso de urgência e alto padrão visual à página de detalhes.
🎯Correção & Design System / Normalização de Escala de 5 Estrelas e Hardening do Botão Primitivo
Correção do cálculo da métrica de Satisfação Geral e refatoração dos botões de ação do evento concluído para o componente primitivo: - **Normalização de Escala (1 a 5 Estrelas)**: Criada a função utilitária `normalizeRatingScore` para normalizar automaticamente notas legadas salvas no banco de dados na escala anterior de 1 a 10 (convertendo-as proporcionalmente dividindo por 2). Isso elimina a distorção onde a média calculava `8.0 / 5`. - **Ajustes de Exibição no Mural e Painel Admin**: O endpoint `/api/admin/eventos/[slug]/feedbacks`, a página de testemunhos (`/eventos/[slug]/testemunhos`) e a aba administrativa `EventFeedbacksTab.tsx` agora calculam e exibem tanto a média agregada quanto as notas individuais padronizadas na escala `/ 5`. - **Hardening do Componente Primitivo `Button`**: Adicionado `whitespace-nowrap` nas classes base do botão e `shrink-0 inline-flex items-center` no container de ícones, garantindo que textos longos não empurrem ou amassem ícones nas bordas. - **Conformidade de Componentização**: Os botões manuais com `<Link>` avulsos em `PublicEventDetailView.tsx` foram substituídos pelo componente primitivo `<Button href="...">`, assegurando padding semântico, alinhamento perfeito e suporte a design tokens.
Eliminação de médias acima de 5 na satisfação geral e botões com alinhamento e dimensões 100% harmoniosos e protegidos contra quebras de layout.
✨Feature & UI / Ativação Dinâmica de Indicações VIP e Reposicionamento de Ação no Rodapé
Aprimoramento do fluxo de pesquisa de satisfação e do painel de administração de eventos: - **Controle Dinâmico da Etapa 4 (Indicações VIP)**: O novo atributo `feedbackReferralsActive` permite aos administradores ativar ou desativar a etapa opcional de indicações de amigos/parceiros de negócios tanto via Sanity Studio quanto pelo Painel Admin (`EventSettingsTab.tsx`). - **Fluxo Adaptativo no Wizard**: Quando a etapa de indicações estiver desativada, a barra de progresso ajusta-se automaticamente para 3 etapas, e a Etapa 3 ("Seu Testemunho") exibe diretamente a ação "Concluir e Enviar Avaliação" com feedback de envio em tempo real. - **Reposicionamento do Botão de Salvar no Rodapé**: No Painel Administrativo de eventos, o botão "Salvar Todas as Alterações no Sanity" foi movido da coluna lateral para uma barra de ações dedicada no rodapé da tela, garantindo alinhamento visual com a página completa.
Maior flexibilidade para eventos que não desejam coletar indicações externas e melhoria substancial de ergonomia na interface administrativa.
🧠Governança & Diretrizes de Agente (Protocolo de Troubleshooting Local e Diagnóstico de Ambiente)
⚙️Feature & Gestão de Exibição de Localização (Sanity & Painel Admin)
Parametrização completa do formato de apresentação do card de localização do evento: - **Modos de Exibição (`locationDisplayMode`)**: Alternância entre "Ações Rápidas (Padrão: Maps + Copiar Endereço)" e "Mapa Incorporado (Google Maps Embed)". - **URL de Embed Opcional (`googleMapsEmbedUrl`)**: Campo para informar iframe/URL específica do Google Maps ou utilizar o gerador automático baseado no endereço cadastrado. - **Edição no Painel Administrativo**: Adicionados controles na aba "Configurações & Sanity" do evento e no modal de criação rápida (`EventCreateModal.tsx`). - **Sincronização com Sanity Studio**: Schema atualizado (`eventType.ts`) com persistência atômica via API e cliente Sanity.
Os administradores podem alternar facilmente entre o modo de botões diretos de navegação e a renderização de mapas interativos integrados diretamente no card da página pública.
🌐Feature & Parametrização de Página Própria do Evento
Ajuste semântico e funcional no Gestor de Eventos (`/admin/eventos/[slug]`) e no modal de criação (`EventCreateModal.tsx`) para parametrização de eventos que possuem landing page ou site próprio dedicado (como o The One 360): - **Campo "Página Própria / Site Oficial do Evento"**: Mapeamento do campo `customPageUrl` com texto explicativo sobre a substituição do formulário de RSVP padrão por um segundo CTA de direcionamento. - **Sincronização com Sanity**: Persistência atômica via `PUT /api/admin/eventos/[slug]` sincronizada com os campos `customPageUrl` e `confirmationRedirectUrl` no Sanity Studio.
Os organizadores podem agora direcionar facilmente qualquer evento para seu próprio domínio ou landing page exclusiva com clareza total das regras de interface.
✨Feature & ⚙️ Gestão de Modalidades, RSVP e Acesso de Eventos
Extensão da aba **"Configurações & Sanity"** no Gestor de Eventos (`/admin/eventos/[slug]`) e do formulário de criação rápida (`EventCreateModal.tsx`) para suporte total às configurações avançadas de participação: - **Modalidade e Categoria do Evento**: Presencial VIP, Webinar Online, Curso / Imersão, Workshop Prático e Evento Pago / Masterclass. - **Modelos de Confirmação (RSVP)**: Confirmação Livre, Com Acompanhante e Restrito por Código de Acesso. - **Restrição por Código**: Suporte a Código Mestre Geral (senha única), Telefone Cadastrado, CPF Cadastrado ou Token Aleatório. - **Eventos Pagos**: Habilitação de cobrança, valor do ingresso e URL de checkout externo (Hotmart, Eduzz, etc.). - **Redirecionamento Pós-Confirmação**: Campo para direcionar participantes para páginas específicas (ex: `/theone360`) após confirmação com sucesso. - **Sincronização com Sanity**: Persistência atômica via `PUT /api/admin/eventos/[slug]` sincronizada em tempo real com o Sanity Studio.
Os administradores e organizadores agora possuem controle minucioso e total sobre as regras de acesso, modelos de inscrição e redirecionamento de qualquer evento diretamente pelo painel administrativo, mantendo paridade 100% com o Sanity Studio.
✨Feature & 🎨 UI / Gestão Cadastral & Configurações Sincronizadas com o Sanity CMS
Implementação completa da 4ª aba **"Configurações & Sanity"** no Gestor de Eventos (`/admin/eventos/[slug]`) e da rota de sincronização bidirecional, permitindo que os organizadores editem pelo painel administrativo tudo o que é gerenciado pelo Sanity: - **Informações Gerais & Agenda**: Edição de Título, Data Formatada, Horário, Local / Endereço Completo, Status do Evento e Descrição. - **Tipografia do Título**: Configuração do campo de Google Fonts (com pré-visualização em tempo real e fallback para a fonte corporativa padrão BRAVE Eightyone). - **Card do Final da Página**: Edição do Título da Seção ("O que torna este evento único") e gerenciador dinâmico de diferenciais com inclusão, exclusão e edição de títulos e descrições. - **Tópicos em Pauta**: Gestão de tags/destaques do encontro com adição e remoção instantânea. - **Configurações de Feedback & Depoimentos**: Ativação da pesquisa de satisfação, customização de títulos e modo de moderação dos depoimentos (automático vs. manual). - **Sincronização Atômica**: Endpoint `PUT /api/admin/eventos/[slug]` utilizando `writeClient` com token sanitizado para persistência no Sanity Studio.
Toda configuração do evento e landing page pública pode agora ser mantida diretamente pelo painel administrativo ou pelo Sanity Studio de maneira 100% sincronizada.
🗑️Feature & UI / Exclusão de Indicações VIP na Gestão de Eventos
Implementação da capacidade de excluir contatos indicados (leads da Pergunta 10) diretamente na aba **"Indicações VIP"** do Gestor de Eventos (`/admin/eventos/[slug]`): - **Endpoint DELETE (`/api/admin/eventos/[slug]/referrals/[id]`)**: Decompõe o identificador composto da indicação, remove o lead do array JSON `indicacoes` no registro correspondente em `public.event_feedbacks` e persiste a atualização atômica no Supabase. - **Ação na Tabela de Indicações (`EventReferralsTab.tsx`)**: Botão com ícone de lixeira ([`Trash2`](file:///c:/Projetos/site/src/features/eventos/components/detail/EventReferralsTab.tsx)) ao lado da ação de WhatsApp para exclusão individual de qualquer indicação. - **Proteção com `ConfirmModal`**: Modal de confirmação que exibe o nome do lead indicado, telefone e quem realizou a recomendação antes de efetivar a remoção. - **Atualização Reativa**: Ao confirmar, o item é removido imediatamente da visualização da tabela e o contador de leads indicados é atualizado.
A equipe agora pode expurgar indicações de teste, dados inválidos ou contatos duplicados da esteira comercial com total segurança e agilidade.
🎨UI & Feature: Seção Própria de Informações Práticas (Quando & Onde)
Reestruturação completa da apresentação de dados práticos do evento (Data, Horário e Localização): - **Seção Própria Externa ao Banner**: Remoção dos cards fragmentados do interior do banner e criação de uma seção dedicada entre o banner principal e a seção "Sobre o Encontro". - **Grid Equilibrado em 2 Colunas (50% / 50%)**: No desktop, os dois blocos dividem a largura igualmente e no mobile empilham verticalmente de forma fluida. - **Card 1 (Quando & Horário)**: - Destaque tipo folha de calendário com dia, mês, ano e horário com ícone semântico `Clock`. - Contagem regressiva em tempo real ("Faltam Xd Yh Zm") reativa para eventos futuros. - Ação prática "Adicionar ao Google Agenda" gerando link pré-formatado com título, horários e endereço do encontro. - **Card 2 (Onde & Localização)**: - Suporte ao modo de "Ações Rápidas" (`actions`): endereço formatado + botões utilitários "Abrir no Maps" e "Copiar Endereço" (com feedback interativo "Copiado!"). - Suporte ao modo de "Mapa Incorporado" (`embed`): renderização de iframe interativo do Google Maps diretamente no card com proporção `aspect-video`. - Suporte para eventos online/webinars com cartão de transmissão digital segura.
Layout muito mais limpo, imersivo e profissional, com ferramentas úteis para o convidado (adicionar à agenda, copiar endereço, ver mapa ou contagem regressiva).
🌐Feature & Normalização de Domínios Externos (ex: theone360.com.br)
Suporte nativo a domínios externos para eventos que possuem sites fora do domínio principal da The One Seguros (exemplo: The One 360 no endereço `theone360.com.br`): - **Normalização Automática (`formatEventUrl`)**: URLs digitadas sem protocolo (como `theone360.com.br` ou `www.theone360.com.br`) são automaticamente tratadas e prefixadas com `https://`, prevenindo erros de rotas relativas no navegador. - **Abertura Segura em Nova Aba**: Links externos abrem em nova aba (`target="_blank" rel="noopener noreferrer"`) tanto no segundo CTA quanto no CTA flutuante. - **Configuração Oficial do The One 360**: O evento padrão foi atualizado para `https://theone360.com.br`.
O participante clica no CTA da página ou no botão flutuante e é encaminhado diretamente para o domínio oficial externo do evento (`https://theone360.com.br`), com compatibilidade irrestrita para qualquer domínio próprio.
🎯UX, CTA Flutuante & Páginas Próprias de Eventos
Ajuste fino no fluxo de participação de eventos com página própria e controle de visibilidade do CTA flutuante: - **Eventos com Site Próprio (`customPageUrl`)**: Quando o evento possui uma página dedicada (como o The One 360: `/theone360` ou link externo), o formulário de RSVP padrão é ocultado da página. No seu lugar, surge um segundo CTA chamando o visitante a acessar a página oficial para garantir sua vaga. - **CTA Flutuante de Confirmação**: Ao clicar no botão flutuante em eventos com página própria, o usuário é redirecionado diretamente para o site próprio do evento, sem necessidade de scroll para formulário inexistente. - **Ocultação em Telas de Depoimentos & Avaliações**: O CTA flutuante é completamente desativado nas rotas `/eventos/[slug]/testemunhos` e `/eventos/[slug]/feedback`, mantendo foco total na leitura dos testemunhos e no formulário de avaliação.
A experiência de navegação respeita eventos que possuem ecossistema e landing page própria (como o The One 360), eliminando formulários redundantes, oferecendo chamadas assertivas e mantendo a tela de testemunhos limpa e livre de CTAs flutuantes.
🎨UI, Layout & ✨ Feature
Reestruturação completa da landing page de detalhes do evento (`/eventos/[slug]`) para layout em coluna única centralizada (`max-w-4xl`), com posicionamento da confirmação de presença (RSVP) no final da página, integração com CTA flutuante contextual, remoção estrita de emojis por ícones Lucide/SVG, diminuição dos espaçamentos entre containers/seções, suporte a redirecionamento pós-confirmação para páginas específicas (ex: The One 360), e suporte avançado a modalidades de eventos (presencial, webinar, cursos, workshops, eventos pagos com checkout) e regras de confirmação (livre, com acompanhante, restrito por código).
A página do evento agora possui um fluxo de leitura limpo e unificado em coluna única, espaçamentos densos e elegantes, sem nenhum emoji, com CTA flutuante que direciona para a confirmação de presença no rodapé, suporte a redirecionamento pós-inscrição (estilo The One 360) e governança completa de modalidades e restrições tanto no Sanity quanto no Painel Administrativo.
🎨UI & ✨ Feature
Resolução do carregamento do banner de eventos em alta definição, implementação de tipografia dinâmica com suporte a Google Fonts e fonte corporativa padrão BRAVE Eightyone, e parametrização dinâmica do card final de diferenciais ("O que torna este evento único") via Sanity CMS.
O banner de capa carrega em alta definição com otimização Next.js. O título do evento utiliza a fonte corporativa BRAVE Eightyone como padrão ou qualquer família do Google Fonts configurada, e o card final de diferenciais é 100% gerenciável dinamicamente.
🗑️Feature & Moderação / Exclusão Completa de Avaliações e Depoimentos
Implementação da capacidade de excluir permanentemente avaliações e depoimentos no painel de gestão de eventos (`/admin/eventos/[slug]` -> Aba "Feedbacks & Depoimentos"): - **Endpoint DELETE Dedicado (`/api/admin/eventos/[slug]/feedbacks/[id]`)**: Rota no backend para remoção definitiva do registro no banco de dados Supabase (`public.event_feedbacks`). - **Ação na Tabela de Feedbacks (`EventFeedbacksTab.tsx`)**: Botão com ícone de lixeira (`Trash2`) em cada linha para disparar a exclusão. - **Ação no Modal de Detalhes**: Opção de excluir diretamente no rodapé da janela de leitura de depoimentos e sugestões. - **Proteção com `ConfirmModal`**: Modal primitivo de confirmação contra exclusões acidentais, exibindo o nome do convidado, telefone, nota e trecho do depoimento antes de confirmar. - **Recálculo Automático**: Após a exclusão, a lista é atualizada instantaneamente e as métricas agregadas (nota média, total de feedbacks e taxa de recomendação) são recalculadas.
Os administradores agora podem remover avaliações de teste, dados duplicados ou registros indesejados com total segurança e feedback em tempo real.
🔧Correção & Build
Inclusão da diretiva `'use client'` no componente orquestrador `EventDetailView.tsx`. Durante o build de produção no Docker/Coolify com o compilador Next.js Turbopack, a ausência da diretiva fazia com que o Next.js tentasse compilar o módulo como Server Component, gerando falha fatal no build ao encontrar hooks de estado do cliente (`useState`, `useToast`, `useCallback`). A diretiva foi explicitada e o build de produção validado localmente com sucesso total (código de saída 0).
Build de produção do Next.js via Docker no Coolify concluído com 100% de sucesso.
✨Feature & UI / Abas de Feedbacks & Depoimentos, Indicações VIP e Disparos de Pesquisa de Satisfação
Evolução do Gestor de Eventos para gerenciar o pós-evento completo dos encontros corporativos: 1. **Navegação por Abas Principais (`EventDetailView.tsx`)**: - Inclusão do seletor segmentado com 3 abas principais: **"Convidados & RSVP"**, **"Feedbacks & Depoimentos"** e **"Indicações VIP"**. 2. **Aba Feedbacks & Depoimentos (`EventFeedbacksTab.tsx`)**: - Métricas de nota média, satisfação geral, total de feedbacks e depoimentos aprovados. - Filtros por status de moderação (`publicado`, `pendente`, `oculto`) e busca rápida. - Moderação com ação de 1-clique para publicar ou ocultar depoimentos do mural público com feedback via Toast. 3. **Aba Indicações VIP (`EventReferralsTab.tsx`)**: - Visualização de leads recomendados pelos participantes (Nome, WhatsApp, Quem Indicou, Data). - Botão de acionamento imediato via WhatsApp com mensagem personalizada para prospecção comercial. 4. **Disparos de Pesquisa de Satisfação**: - Inclusão do modelo nos menus individuais (`GuestActionDropdown.tsx`) e ações em lote de convidados para envio via E-mail corporativo (Microsoft Graph) e WhatsApp.
- Centralização completa do ciclo pós-evento no painel administrativo, unindo moderação de autoridade e prospecção ativa de novos negócios.
🔧Correção & Lógica de Negócio
Normalização do tratamento de status de eventos entre o Sanity CMS e a camada de interface pública. O Sanity Studio registra eventos finalizados com o valor `'finished'` (`{ title: 'Concluído / Encerrado', value: 'finished' }`). Os componentes públicos estavam comparando estritamente com `'concluido'`, fazendo com que o formulário de confirmação de presença (RSVP) continuasse aberto indevidamente. Criamos o helper `isEventFinished()` cobrindo ambas as variações (`finished`, `concluido`, `encerrado`) e aplicamos nas páginas, cards e endpoint de RSVP.
Quando o evento estiver marcado como concluído no Sanity, o formulário de RSVP é desabilitado e a página exibe a mensagem de "Inscrições Encerradas" com botão direto para o Mural de Testemunhos.
✨Feature & UI / Catálogo Público, Landing Page Institucional e Confirmação de Presença VIP
Implementação das páginas públicas institucionais para visualização de eventos da The One Seguros, conectando a vitrine pública ao Sanity CMS e ao banco de dados Supabase: 1. **Catálogo & Agenda de Eventos (`/eventos`)**: - Hero institucional de alta autoridade para encontros de planejamento patrimonial e consórcios. - Filtros de navegação por status: *Todos*, *Próximos & Inscrições Abertas* e *Realizados & Resultados*. - Busca preditiva em tempo real por nome, local ou descrição. - Cards informativos (`PublicEventCard`) com imagem oficial, data, horário, local e CTAs contextuais (*Conhecer & Participar*, *Ver Resultados* ou *Avaliar*). - Banner de inscrição para a Lista VIP de Investidores. - Otimização para mecanismos de busca (SEO) com OpenGraph e Schema.org (`ItemList` de `Event`). 2. **Landing Page Oficial do Evento (`/eventos/[slug]`)**: - Breadcrumb de navegação e Hero com banner em alta definição. - Grade prática de informações com Data, Horário e Localização com link direto para o Google Maps. - Seções detalhadas de "Sobre o Encontro", "Tópicos & Estratégias em Pauta" e diferenciais executivos da The One Seguros. - Formulário de Confirmação de Presença / RSVP (`EventRsvpForm`) com validação de WhatsApp, quantidade de acompanhantes e gravação em tempo real na tabela `public.confirmacoes` (com integração direta à aba de convidados no Admin). - Suporte a eventos já realizados com redirecionamento em destaque para o Mural de Testemunhos. - Metadados SEO dinâmicos com OpenGraph dedicado por evento e Schema.org (`Event`). 3. **Endpoint de Confirmação (`POST /api/eventos/[slug]/rsvp`)**: - Validação dos dados do participante, prevenção de duplicidade por WhatsApp e envio automático de e-mail de confirmação via Microsoft Graph API. 4. **Navegação Global**: - Adição do link "Eventos" no menu principal (`Header.tsx`) e rodapé (`Footer.tsx`).
Os visitantes e investidores agora podem acessar a agenda completa de eventos da The One Seguros em `/eventos`, conhecer a proposta de valor e confirmar sua presença online em `/eventos/[slug]`.
📱UI & Responsividade Mobile / Escala de 5 Estrelas e Badges Semânticas
Ajuste de responsividade mobile e simplificação do componente de avaliação na Etapa 2 do Wizard de Feedback (`Step2RatingHighlights.tsx`): - **Eliminação de Overflow em Telas Estreitas:** Redução da escala de 10 estrelas para 5 estrelas interativas de toque amplo (touch targets adequados de 44px com ícone de 36px), eliminando o corte lateral em smartphones. - **Remoção de Seletor Numérico Redundante:** O seletor de números inferiores foi removido, priorizando a interação tátil direta nas estrelas. - **Novas Badges de Percepção:** - 1: `1 - Ruim` - 2: `2 - Ok` - 3: `3 - pode melhorar` - 4: `4 - Bom` - 5: `5 - Excelente` - **Harmonização do Mural:** Atualização dos cards de testemunhos (`TestimonialCard.tsx`) e métricas (`EventTestimonialsView.tsx`) para exibição proporcional na escala de 5 estrelas (`/5`).
Experiência de avaliação 100% confortável e fluida em smartphones, sem overflow horizontal e com percepção qualitativa imediata.
🎨UI & UX
Transformação do card métrico de "Depoimentos no Mural" em um elemento interativo com âncora direta (`href="#depoimentos"`), permitindo que o usuário clique no card para deslizar a página com scroll suave e compensação de cabeçalho (`scroll-mt-24`) diretamente para o grid de depoimentos. Foram adicionados efeitos visuais ao pairar o mouse (micro-interações com borda destacada em dourado `primary/40`, ícone animado com `translate-x` e feedback textual "Ver depoimentos abaixo").
Navegação mais intuitiva e ágil para visitantes que queiram ir diretamente dos indicadores consolidados para a leitura individual dos depoimentos.
🔧Correção
Correção do ciclo de auto-redirecionamento no componente `Step5Success`. Anteriormente, a chamada `router.push()` estava sendo disparada internamente dentro do updater de estado de `setCountdown((prev) => ...)`. No React e Next.js App Router, essa prática dispara a advertência e erro em tempo de execução *"Cannot update a component (`Router`) while rendering a different component (`Step5Success`)"*. A lógica foi refatorada para um timer desacoplado gerenciado por `useEffect` com dependência em `countdown`, executando o redirecionamento com segurança no ciclo de vida correto do componente.
O participante conclui o envio do formulário e é redirecionado suavemente e sem erros no console para o mural de resultados e testemunhos (`/eventos/[slug]/testemunhos`).
✨Feature & UI / Sistema Completo de Feedback, Mural de Testemunhos e Gestor de Indicações
Implementação de ponta a ponta do ecossistema de avaliação pós-evento para os participantes dos encontros da The One Seguros: 1. **Wizard de Feedback Público (`/eventos/[slug]/feedback`)**: - Desenvolvido no padrão de Wizard em 4 etapas fluidas com barra de progresso em gradiente dourado (`primary` / `accent`): - **Etapa 1 (Identificação)**: Combobox inteligente com busca preditiva na lista de convidados confirmados do evento (ou digitação livre), telefone formatado e checkbox de consentimento LGPD para o mural público. - **Etapa 2 (Avaliação & Destaques)**: Seletor interativo de nota de 1 a 10 com estrelas, seleção múltipla dos tópicos que mais chamaram atenção (com opção "Outro" personalizada) e avaliação de indicação (Sim/Não). - **Etapa 3 (Testemunho & Melhorias)**: Campo de texto longo para depoimento/testemunho destinado ao mural público e campo aberto para críticas construtivas/sugestões internas. - **Etapa 4 (Indicações VIP)**: Formulário para recomendação opcional de até 3 pessoas especiais (Nome + WhatsApp) para conhecerem as estratégias patrimoniais. - **Etapa 5 (Sucesso)**: Tela comemorativa com contagem regressiva e auto-redirecionamento para o mural público de resultados. 2. **Mural Público de Resultados & Testemunhos (`/eventos/[slug]/testemunhos`)**: - Hero com capa/informações do evento e cards métricos em destaque (Nota Média Geral, Taxa de Indicação e Total de Depoimentos no Mural). - Nuvem/barras de frequência dos temas mais votados pelos convidados. - Grid responsivo de cards de testemunhos (`TestimonialCard`) com nota, autor, data e design luxuoso em tema escuro/dourado. - Botões de compartilhamento social (WhatsApp com texto pré-configurado, Copiar Link) e CTA para avaliação. - Dados estruturados JSON-LD Schema.org (`Event` com `AggregateRating`). 3. **Persistência no Supabase**: - Migration `20260910124000_create_event_feedbacks_table.sql` criando a tabela `public.event_feedbacks` com índices, restrições e políticas de RLS. 4. **Integração com Sanity CMS**: - Schema de evento (`eventType.ts`) enriquecido com campos: `feedbackActive`, `feedbackTitle`, `feedbackSubtitle`, `feedbackHighlightsOptions` e `testimonialsDisplayMode`. 5. **Central Administrativa (`/admin/eventos/[slug]`)**: - Adicionada navegação por abas principais no topo: **"Convidados & RSVP"**, **"Feedbacks & Depoimentos"** e **"Indicações VIP"**. - **Aba Feedbacks**: Métricas consolidadas, filtros por status de moderação e tabela com toggle de 1-clique para publicar ou ocultar depoimentos do mural público. - **Aba Indicações VIP**: Prospecção de leads recomendados pelos convidados com atalho para iniciar conversa comercial no WhatsApp com 1 clique. 6. **Motor de Notificações**: - Templates executivos de e-mail corporativo (`pesquisa_satisfacao` via Microsoft Graph) e WhatsApp adicionados ao disparador para envio manual ou em lote pós-evento.
- Experiência completa de pós-evento com coleta de feedback, exibição de autoridade e satisfação em mural público, prospecção ativa de indicações e controle total pelo gestor de eventos.
🔧Correção
Tokenização da altura do header fixo. O offset de conteúdo do site vivia como magic number inline (`paddingTop: '90px'`) no `<main>`, dessincronizado da altura real do `<header>` (`h-20 sm:h-24`, ou seja 80px/96px). Em `sm+` o header cobria 6px do conteúdo, e o hero somava um `pt` próprio sobre esse offset — origem do corte vertical descrito em [hero.md](./hero.md) `[1.2.0]`.
- Altura do header deixa de ser magic number duplicado entre layout e seções. - Seções full-height podem descontar o offset com `calc(100dvh - var(--spacing-header))`.
🐛Fix (Responsividade)
Correção do corte dos CTAs (`Simular Cotação` / `Falar com Especialista`) e da onda inferior em viewports de **altura reduzida** (notebooks pequenos, janelas restauradas, landscape de celular e zoom elevado). A restrição real do layout era vertical, não horizontal.
- CTAs e onda visíveis sem scroll em todas as alturas testadas, de 360px a 1440px. - Overlay gradiente cobre integralmente a seção, inclusive quando o conteúdo a expande. - Recorte de conteúdo eliminado: excesso passa a gerar crescimento da seção, nunca corte.
🛡️UX & UI / Componente Primitivo ConfirmModal nas Tabelas Administrativas
Substituição de todos os diálogos de confirmação síncronos nativos do navegador (`window.confirm(...)`) por instâncias do novo componente primitivo [`ConfirmModal`](file:///c:/Projetos/site/src/components/ui/ConfirmModal/ConfirmModal.tsx): 1. **Criação do Componente Primitivo `ConfirmModal`**: - Desenvolvido em `src/components/ui/ConfirmModal/` com suporte a variantes `danger`, `warning` e `info`. - Ícone temático, realce do registro a ser excluído (`itemHighlight`), botão de cancelar (`ghost`) e botão de confirmação (`danger`) com feedback de carregamento (`isLoading`). 2. **Aplicação na Gestão de Eventos**: - Exclusão individual de convidado via modal elegante com nome e contatos destacados. - Exclusão em lote com lista resumida dos convidados selecionados. 3. **Aplicação na Central de Templates (`/admin/templates`)**: - Exclusão de modelos de e-mail/WhatsApp via `ConfirmModal`.
- Eliminação completa de caixas nativas e intrusivas do navegador, garantindo experiência moderna, imersiva e consistente.
✨Feature & UI / Habilitação de Seleção Múltipla, Ações em Lote e Correção de Contraste
Habilitação completa do ecossistema de seleção de linhas e ações em lote no módulo de Eventos, além da correção de contraste do menu de ações: 1. **Correção de Contraste e Acessibilidade (WCAG AA)**: - Os botões e cabeçalho da seção **Web Push** em [`GuestActionDropdown.tsx`](file:///c:/Projetos/site/src/features/eventos/components/detail/GuestActionDropdown.tsx) e [`GuestDetailsModal.tsx`](file:///c:/Projetos/site/src/features/eventos/components/detail/GuestDetailsModal.tsx) foram corrigidos para utilizarem `text-purple-400` / `text-text-muted hover:text-base-content`, eliminando o texto apagado sobre fundo escuro. 2. **Seleção Múltipla & Barra Flutuante de Ações em Lote (`DataTableBulkBar`)**: - [`GuestTable.tsx`](file:///c:/Projetos/site/src/features/eventos/components/detail/GuestTable.tsx) e [`EventDetailView.tsx`](file:///c:/Projetos/site/src/features/eventos/components/detail/EventDetailView.tsx) agora habilitam `enableRowSelection={true}`, exibindo checkboxes discretos por linha e seleção geral no cabeçalho. - Adicionada a barra de ações em lote com 7 operações suportadas: - **Confirmar Presença em Lote** - **Marcar como Desmarcado em Lote** - **Disparo de E-mail (Lembrete 5 Dias)** - **Disparo de E-mail (Lembrete É Hoje)** - **Disparo de Web Push (5 Dias)** - **Disparo de Web Push (É Hoje)** - **Exclusão de Convidados em Lote** (com diálogo de confirmação seguro)
- Experiência unificada e idêntica à gestão de candidatos, com ações em lote imediatas e contraste visual impecável.
🏗️Arquitetura & UI / Harmonização da Tabela de Convidados com o Primitivo DataTable
Refatoração da tabela de convidados da Gestão de Eventos para aderir 100% às regras de componentização ([`02-ui-architecture.md`](file:///c:/Projetos/site/.agents/rules/02-ui-architecture.md)) e governança de temas ([`04-theme-governance.md`](file:///c:/Projetos/site/.agents/rules/04-theme-governance.md)): 1. **Adoção do Padrão Schema-Driven (`ColumnDef<Guest>[]`)**: - Criado o arquivo [`GuestTableColumns.tsx`](file:///c:/Projetos/site/src/features/eventos/components/detail/GuestTableColumns.tsx) com a definição estrita e desacoplada das colunas. - Utilização dos componentes primitivos [`Badge`](file:///c:/Projetos/site/src/components/ui/Badge/Badge.tsx) e [`IconButton`](file:///c:/Projetos/site/src/components/ui/IconButton/IconButton.tsx). 2. **Consumo do Primitivo Genérico `DataTable`**: - [`GuestTable.tsx`](file:///c:/Projetos/site/src/features/eventos/components/detail/GuestTable.tsx) agora consome exclusivamente [`DataTable<Guest>`](file:///c:/Projetos/site/src/components/ui/DataTable/DataTable.tsx), eliminando cascas HTML duplicadas. 3. **Zero Hard-Code de Cores & Compatibilidade com Theme Creator**: - Substituição de todas as classes fixas (`bg-navy-accent`, `text-gold`, `border-white/10`) por tokens semânticos (`bg-base-200`, `border-border`, `text-base-content`, `text-text-muted`, `bg-primary`, `bg-success`). - [`GuestActionDropdown.tsx`](file:///c:/Projetos/site/src/features/eventos/components/detail/GuestActionDropdown.tsx) e [`GuestDetailsModal.tsx`](file:///c:/Projetos/site/src/features/eventos/components/detail/GuestDetailsModal.tsx) atualizados para tokens semânticos. 4. **Remoção de Código Duplicado**: - Removido o arquivo legado `GuestTableRow.tsx`.
- Conformidade total com a arquitetura de UI pura vs domínio e integração 100% dinâmica com o Theme Creator.
🔧Correção / Unificação de Schema e Dados em `public.confirmacoes`
Centralização e unificação de todas as consultas e mutações da Gestão de Eventos na tabela canônica `public.confirmacoes`: 1. **Causa Raiz da Divergência**: - As landing pages e formulários públicos gravavam as confirmações na tabela `public.confirmacoes` (com `event_slug = 'theone360'`). - O painel administrativo possuía uma regra herdada que desviava requisições do evento `theone360` para o schema isolado `theone360.confirmacoes` (que continha apenas 2 registros antigos). - Como consequência, os 9 convidados ativos mais recentes cadastrados no evento `theone360` não eram exibidos no painel. 2. **Correção e Padronização**: - Removido o desvio para o schema `theone360` em todas as rotas administrativas (`/admin`, `/admin/eventos`, `/api/admin/eventos`, `/api/admin/eventos/[slug]/convidados`, `/api/admin/eventos/[slug]/status` e `/api/admin/eventos/[slug]/enviar`). - Todas as operações de leitura, paginação, filtros, exclusão e disparos (WhatsApp, E-mail, Push) agora operam exclusivamente sobre a tabela relacional `public.confirmacoes` com filtro `event_slug`.
- Exibição em tempo real de 100% dos 9 convidados confirmados do evento `THE ONE 360°`. - Eliminação definitiva de discrepâncias entre formulários públicos e o painel administrativo.
🛡️UX & UI / Integração do ConfirmModal para Candidaturas e Oportunidades
Substituição dos diálogos de confirmação síncronos (`confirm(...)`) pelo novo componente primitivo [`ConfirmModal`](file:///c:/Projetos/site/src/components/ui/ConfirmModal/ConfirmModal.tsx): 1. **Exclusão de Candidaturas (Individual e em Lote)**: - No [`RecruitmentView.tsx`](file:///c:/Projetos/site/src/features/recrutamento/components/RecruitmentView.tsx), a exclusão unitária e em lote agora exibe modal estruturado com destaque do nome, protocolo e vaga dos candidatos selecionados. 2. **Exclusão de Oportunidades/Vagas**: - No [`JobPositionsView.tsx`](file:///c:/Projetos/site/src/features/recrutamento/components/vagas/JobPositionsView.tsx), a exclusão de vagas do Sanity Studio passa a ser confirmada via `ConfirmModal` com indicação do slug e localização.
- Experiência visual rica, sem travamentos síncronos da thread do navegador e alinhada às diretrizes de governança de UI.
🛡️Segurança & Qualidade (Hardening de Funções PostgreSQL e Tipagem Estrita Database)
🔧Segurança / Otimização (Proxy de Sessão Next.js 16 + Supabase SSR e Geração de Tipos)
🔧Otimização / Arquitetura
🔧Correção / Otimização
🎛️Arquitetura & UI / Unificação das Barras de Filtros com o Primitivo DataViewToolbar
Harmonização das barras de filtros de Eventos para utilizarem o componente primitivo global [`DataViewToolbar`](file:///c:/Projetos/site/src/components/ui/DataViewToolbar/DataViewToolbar.tsx): 1. **Evolução do Primitivo `DataViewToolbar`**: - Adicionada a propriedade `tabs?: ReactNode`, `leftContent?: ReactNode` e `className?: string`. - Permite a composição direta de abas de status (`Tabs`) com o input de busca rápida em uma casca unificada e responsiva. 2. **Refatoração dos Filtros de Eventos**: - [`EventsFiltersBar.tsx`](file:///c:/Projetos/site/src/features/eventos/components/EventsFiltersBar.tsx) e [`EventDetailFilters.tsx`](file:///c:/Projetos/site/src/features/eventos/components/detail/EventDetailFilters.tsx) agora consomem [`DataViewToolbar`](file:///c:/Projetos/site/src/components/ui/DataViewToolbar/DataViewToolbar.tsx) como casca visual padronizada.
- Padronização visual e estrutural de 100% das barras de ferramentas do painel administrativo.
🏗️Arquitetura & UI / Desduplicação de Componentes e Harmonização no DataCard
Refatoração e desduplicação dos cards e filtros da Gestão de Eventos, aderindo estritamente ao Princípio da Casca Visual Agnóstica do Design System: 1. **Evolução do Primitivo `DataCard` (`src/components/ui/DataCard/`)**: - Adicionada a propriedade `layout?: 'vertical' | 'horizontal'` e suporte ao slot `sideContent` e efeito `glow`. - Agora atende tanto à visualização em grid (como em Vagas) quanto à visualização em lista horizontal/banner (como em Eventos). 2. **Refatoração do `EventCard.tsx`**: - Eliminada a casca visual customizada duplicada. - O componente agora consome exclusivamente os primitivos [`DataCard`](file:///c:/Projetos/site/src/components/ui/DataCard/DataCard.tsx) (`layout="horizontal"`), [`Badge`](file:///c:/Projetos/site/src/components/ui/Badge/Badge.tsx) e [`Button`](file:///c:/Projetos/site/src/components/ui/Button/Button.tsx). 3. **Padronização de Abas e Badges da Tabela**: - `EventDetailFilters.tsx` refatorado para utilizar o componente primitivo [`Tabs`](file:///c:/Projetos/site/src/components/ui/Tabs/Tabs.tsx). - `GuestTableRow.tsx` atualizado para utilizar [`Badge`](file:///c:/Projetos/site/src/components/ui/Badge/Badge.tsx) semântico (`approved` e `rejected`).
- Zero duplicações visuais, 100% de conformidade com o design system do projeto e reaproveitamento perfeito entre módulos.
✉️Correção / Remetente de E-mail de Eventos (evento@theoneseguros.com.br)
Correção do endereço de remetente dos disparos de e-mail de eventos: 1. **Remetente Dedicado para Eventos (`AZURE_EVENTS_SENDER_EMAIL`)**: - Atualizado o serviço [`microsoftEmail.ts`](file:///c:/Projetos/site/src/lib/microsoftEmail.ts) para utilizar o remetente oficial `evento@theoneseguros.com.br` (via `AZURE_EVENTS_SENDER_EMAIL`), em vez de recorrer ao remetente padrão de cotações (`AZURE_SENDER_EMAIL`). 2. **Configuração de Ambiente**: - Cadastrada a variável `AZURE_EVENTS_SENDER_EMAIL="evento@theoneseguros.com.br"` no [`.env.local`](file:///c:/Projetos/site/.env.local) e documentada no [`.env.example`](file:///c:/Projetos/site/.env.example).
- Todos os e-mails de confirmação, lembretes de 5 dias, véspera e dia do evento são enviados com o remetente `evento@theoneseguros.com.br`.
🔔Correção & Infraestrutura / Configuração de Chaves VAPID e Disparo de Web Push
Diagnóstico e correção completa da infraestrutura de Web Push Notifications e subscrições: 1. **Configuração das Chaves VAPID (`.env.local` e `.env.example`)**: - Inseridas as chaves `NEXT_PUBLIC_VAPID_PUBLIC_KEY`, `VAPID_PRIVATE_KEY` e `VAPID_EMAIL`, que estavam ausentes no ambiente local e forçavam o disparador a rodar em modo simulação silenciosa. 2. **Preservação e Sincronização de Subscrições (`push_subscriptions`)**: - Os registros de subscrição de Web Push dos convidados permanecem 100% preservados no banco de dados. - Criada a tabela unificada `public.push_subscriptions` (`20260828120000_create_public_push_subscriptions.sql`) sincronizada com o schema legado para suporte multievento. 3. **Disparo Robusto com Fallback Multidispositivo (`enviar/route.ts`)**: - A rota de envio agora itera por todos os dispositivos cadastrados do convidado, garantindo a entrega mesmo quando um aparelho anterior tiver a subscrição expirada (410 Gone) e limpando subscrições antigas automaticamente.
- Disparos de notificações Web Push pelo painel administrativo enviando em tempo real com sucesso para os aparelhos inscritos (Status 201).
🗄️Banco de Dados & Infraestrutura / Tabela Multievento de Convidados e RSVP no Supabase
Aplicação de migration no banco de dados Supabase e suporte nativo a múltiplos eventos sem necessidade de criação manual de schemas ou tabelas: 1. **Migration (`20260828113000_create_public_confirmacoes_table.sql`)**: - Criação da tabela unificada `public.confirmacoes` com coluna indexada `event_slug`. - Índices em `event_slug`, `status` e `created_at` para máxima performance. - Sincronização e migração dos dados históricos existentes de `theone360.confirmacoes` para a tabela unificada. - RLS ativo e protegido com acesso exclusivo via `service_role`. 2. **Consultas e Métricas Parametrizadas**: - As rotas `/api/admin/eventos/[slug]/convidados` e `/api/admin/eventos` agora filtram por `event_slug = slug` no schema `public`. - Qualquer evento novo criado no Sanity passa a ter sua lista de presença pronta para receber convidados e disparar comunicações imediatamente.
- Todo e qualquer evento novo cadastrado no sistema passa a ter gestão de RSVP, lista de convidados e disparos multicanal disponíveis instantaneamente.
🌟Integração & Arquitetura / Migração do Catálogo de Eventos para Sanity CMS com RSVP no Supabase
Implementação da arquitetura híbrida para Gestão de Eventos, unificando o gerenciamento de conteúdo no **Sanity CMS** e a persistência transacional de convidados/RSVP no **Supabase**: 1. **Schema de Eventos no Sanity (`eventType.ts`)**: - Criação do documento `event` no Sanity Studio com campos estruturados: Nome (`name`), URL Amigável (`slug`), Data formatada (`date`), Horário (`time`), Local (`location`), Descrição (`description`), Status (`status: active/upcoming/finished`), Schema do Supabase (`schema`), Imagem de Capa (`coverImage`) e Ordem (`order`). 2. **Camada de Integração & Persistência (`sanityEvents.ts`)**: - Utilitários `getSanityEvents()` e `createOrUpdateSanityEvent()` para consulta GROQ e gravação via `writeClient`, incluindo rotina de fallback e seed automático dos eventos padrão. 3. **API Centralizada de Eventos (`/api/admin/eventos`)**: - `GET`: Recupera o catálogo do Sanity e calcula as métricas dinâmicas de convidados em tempo real no Supabase em paralelo. - `POST`: Cria novos eventos no Sanity diretamente pelo painel administrativo (ou pelo Sanity Studio), validando a sessão de autenticação do Supabase. 4. **Modal e Painel Intuitivos**: - O formulário [`EventCreateModal.tsx`](file:///c:/Projetos/site/src/features/eventos/components/EventCreateModal.tsx) agora persiste novos eventos imediatamente no Sanity e atualiza o hub em tempo real com toasts de confirmação.
- Usuários leigos podem criar e editar eventos pelo painel ou pelo Sanity Studio, mantendo o controle operacional e formulários de convidados no Supabase.
☁️Arquitetura & Nova Feature (Persistência em Nuvem no Supabase, Separação de Escopos Site/Admin e Tabela de Profiles)
Implementação completa da persistência remota multidispositivo no Supabase, separação de escopos entre o Site Público e o Painel Administrativo, criação de biblioteca de presets compartilhados em nuvem e injeção SSR com **Zero FOUC**: 1. **Estrutura de Banco de Dados (`supabase/migrations/20260828180000_create_profiles_and_theme_tables.sql`)**: - **Tabela `public.profiles`**: Perfis completos de usuários com suporte a usuários internos/externos, roles (`superadmin`, `admin`, `operator`, `recruiter`, `viewer`, `client`, `partner`), permissões em JSONB, status ativo e preferências pessoais de tema (`theme_preset_id`, `theme_config`). - **Tabela `public.site_theme_settings`**: Configuração central do tema oficial do site público, com leitura aberta para visitantes e escrita protegida para administradores. - **Tabela `public.theme_presets`**: Biblioteca em nuvem de temas cadastrados (com os 5 presets oficiais embutidos e suporte a novos presets salvos por administradores). 2. **Rotas de API REST**: - `GET/POST /api/theme/public`: Leitura pública e publicação oficial do tema do site. - `GET/POST/DELETE /api/theme/presets`: Consulta, criação e exclusão de presets na nuvem. - `GET/POST /api/theme/user`: Leitura e atualização do tema pessoal do administrador em seu profile no Supabase. 3. **Renderização Híbrida SSR (Zero FOUC)**: - `src/app/(site)/layout.tsx`: Lê o tema público no servidor antes do envio do HTML e injeta os tokens CSS diretamente no cabeçalho e na tag `<html data-theme="...">`, eliminando qualquer piscada de tela branca ou escura. - `src/app/admin/layout.tsx`: Configurado com escopo isolado `admin`. 4. **Interface do Theme Creator (`/admin/tema`)**: - **Seletor de Escopo de Edição**: Permite alternar entre editar o *Tema do Site Público (Global)* e o *Tema do Painel Administrativo (Meu Perfil)*. - **Ações Cloud**: Botão para publicar oficialmente no site, botão para salvar no perfil do usuário e modal para salvar presets na biblioteca compartilhada do Supabase.
- Os temas agora são salvos na nuvem (Supabase) e persistem entre diferentes dispositivos. O site público e a área autenticada possuem temas totalmente independentes, com carregamento instantâneo no servidor sem FOUC.
🎨Nova Feature & Melhoria (Controle de Espaçamentos, Escala Tipográfica e Tamanhos DaisyUI)
Implementação completa dos controles de **Espaçamento e Tamanhos (Sizes & Spacing - DaisyUI Style)** no Theme Creator: 1. **Tokens de Espaçamento e Tipografia (`src/app/globals.css`)**: - `--font-size-root`: Escala base da fonte de toda a aplicação (14px, 15px, 16px, 17px, 18px). - `--spacing-card-padding`: Padding interno de cartões, modais e superfícies (12px a 36px). - `--spacing-grid-gap`: Distância e lacunas entre módulos, colunas e cards (8px a 32px). - `--btn-text-case`: Transformação de texto em botões (`uppercase`, `normal-case`, `capitalize`). - `--btn-focus-scale`: Feedback tátil ao pressionar botões (`0.95`, `0.97`, `1.0`). - `--animation-btn`: Duração da transição e feedback interativo (`0.15s`, `0.25s`, `0.4s`). 2. **Interface do Theme Creator (`/admin/tema`)**: - Adicionada a 3ª aba dedicada: **"Espaçamento & Tamanhos"** (`SpacingAndSizesGroup.tsx`). - Controles visuais com preview em tempo real de escala de texto, expansão/contração de padding de cards e botão de teste de feedback tátil.
- Sistema de temas completo com controle total sobre paleta de cores (com WCAG), raios de borda (radius), iluminação/glow, escala tipográfica, padding de cards, gaps de grid e comportamento de botões.
🎨Melhoria & Correção de UI (Aviso de Contraste WCAG e Previews de Glow, Bordas e Inputs)
Aprimoramento do **Theme Creator** para incorporar o sistema de validação de contraste WCAG (estilo DaisyUI Theme Generator) e correção da reatividade dos previews em tempo real: 1. **Aviso de Contraste WCAG (DaisyUI Style)**: - Implementado utilitário `src/features/theme/utils/contrast.ts` com cálculo de luminância relativa e taxa de contraste (1:1 até 21:1) conforme a norma WCAG 2.1. - Cada cartão de cor agora exibe o selo com a taxa de contraste (`AAA`, `AA`, `AA Grande` ou `⚠️ Baixo Contraste`) contra o texto correspondente (`primaryContent`, `secondaryContent`, `accentContent`, `neutralContent`, `baseContent`, `textMuted`). - Adicionado alerta global no topo do seletor avisando caso qualquer cor do tema ativo apresente contraste insuficiente (< 4.5:1). 2. **Correção do Preview do Efeito Glow**: - `DataCard` e `RadiusSlidersGroup` agora utilizam a variável CSS `--glow-intensity` de forma dinâmica no `boxShadow` e na camada radial de iluminação. 3. **Correção do Preview das Bordas dos Botões**: - O componente `Button` agora aplica dinamicamente `borderWidth: var(--border-btn)` reagindo instantaneamente às escolhas de espessura (0px, 1px, 2px, 3px). - O `RadiusSlidersGroup` exibe uma amostra real de botão com a espessura e raio configurados. 4. **Correção do Preview de Radius Input**: - Corrigido `DataViewToolbar` para utilizar `.rounded-input` em vez de classe estática. - Adicionada seção dedicada de "Campos de Formulário & Inputs" no `ComponentShowcase` e amostra ao vivo com `<input>` real no slider de `--radius-input`.
- O Theme Creator agora possui validação de contraste visual completa com avisos WCAG e todos os controles (glow, bordas de botão e radius input) reagem com precisão em tempo real.
🎨Nova Feature & Design System / Theme Creator (Estilo DaisyUI) e Refatoração Global de UI
Implementação completa de um motor dinâmico e flexível de criação e personalização de temas inspirado no **DaisyUI Theme Generator**, integrado exclusivamente à área autenticada do painel administrativo (`/admin/tema`) e acompanhado da refatoração de todos os 15 componentes primitivos da biblioteca de UI pura (`src/components/ui/`): 1. **Tokens de Design Semânticos & CSS Variables (`src/app/globals.css`)**: - **Paleta de Cores**: `primary`, `primary-focus`, `primary-content`, `secondary`, `secondary-focus`, `accent`, `neutral`, `base-100` (canvas), `base-200` (cards/surfaces), `base-300` (toolbars/dropdowns), `base-content` (texto principal), `text-muted` (texto secundário), `status-approved`, `status-analyzing`, `status-interview`, `status-rejected`. - **Tokens de Radius**: `--radius-box` (cards, containers e modais), `--radius-btn` (botões), `--radius-badge` (selos e tags), `--radius-input` (campos de texto). - **Efeitos & Traços**: `--border-btn` (espessura de contorno) e `--glow-intensity` (iluminação ambiente). - **Utilitários de Layout**: `.rounded-box`, `.rounded-btn`, `.rounded-badge`, `.rounded-input`. 2. **Módulo de Tema (`src/features/theme/`)**: - **5 Presets Oficiais Embutidos**: - *The One Official (Dark Gold)*: Ouro Nobre & Azul Marinho Profundo. - *Midnight Luxury (Black & Gold)*: Fundo preto absoluto com contrastes em ouro refinado. - *Corporate Slate (Executive Blue)*: Tons de ardósia, azul tecnológico e cinza aço. - *Emerald Prestige (Wealth & Trust)*: Verde esmeralda e dourado suave. - *Light Executive (Clean & Crisp)*: Fundo claro corporativo com alto contraste. - **ThemeProvider Reativo**: Injeta as variáveis diretamente no `:root` / `html[data-theme]` em tempo real e persiste temas personalizados no `localStorage`. - **Exportador**: Exporta os temas instantaneamente em sintaxe CSS compatível com DaisyUI ou formato JSON. 3. **Interface do Theme Creator (`/admin/tema`)**: - **ThemePresetsSelector**: Grid de seleção de temas com mini-paletas coloridas. - **ColorPickerGroup**: Controles interativos para edição de cores da marca, superfícies e status. - **RadiusSlidersGroup**: Sliders em tempo real para controle de raios de borda em pixels/rems. - **ComponentShowcase**: Vitrine com preview ao vivo de botões, badges, stat cards, toolbars, modais e data cards. 4. **Refatoração dos 15 Componentes de UI (`src/components/ui/`)**: - Todos os componentes primitivos (`Button`, `Badge`, `DataCard`, `DataViewToolbar`, `Modal`, `Tabs`, `StatCard`, `ActionMenu`, `Checkbox`, `IconButton`, `PageHeader`, `Toast`, `DataTable`, `DataKanban`, `RichTextEditor`) foram migrados de classes estáticas para tokens semânticos e classes de radius dinâmicas.
- Sistema de temas 100% dinâmico e flexível, permitindo que toda a UI da aplicação seja personalizada em tempo real pelo administrador, com 5 presets de alto padrão visual e exportação em CSS/JSON.
✨Feature & UI / Ação de Exclusão de Convidado e Menu de Ações no Modal de Detalhes
Implementação da exclusão de inscrições e enriquecimento de ações no modal de detalhes: 1. **Exclusão de Convidado (`DELETE /api/admin/eventos/[slug]/convidados?id=...`)**: - Criação do handler `DELETE` na API de convidados com remoção segura no banco de dados. - Adicionada a ação "Excluir Convidado" com confirmação no menu de 3 pontinhos (`GuestActionDropdown.tsx`) e no rodapé do modal de detalhes. 2. **Menu de Ações e Disparos no Modal de Ficha do Convidado (`GuestDetailsModal.tsx`)**: - Barra superior de ações no modal com: - Botão de alternar status de presença (*"Marcar como Desmarcado"* / *"Reconfirmar Presença"*). - Menu dropdown de disparos de notificações (E-mail, WhatsApp e Web Push). - Botão de exclusão rápida da inscrição.
- O gestor tem total autonomia para excluir cadastros e disparar comunicações multicanal tanto pela tabela quanto pelo modal de ficha do convidado.
🏗️Arquitetura & Componentização / Fatiamento da Tela de Gestão de Convidados & RSVP (/admin/eventos/[slug])
Refatoração e componentização completa da tela de detalhes e gestão de convidados de eventos específicos ([`/admin/eventos/[slug]`](file:///c:/Projetos/site/src/app/admin/eventos/%5Bslug%5D/page.tsx)), preservando 100% da identidade visual, interatividade e disparos multicanal: 1. **Hook Customizado de Domínio (`useEventGuests.ts`)**: - Centraliza o ciclo de vida de busca (`fetchConvidados`), paginação, busca por texto, filtros de status (`todos`, `confirmados`, `desmarcados`), alternância de presença e disparos de notificações. 2. **Componentização Modular em `src/features/eventos/components/detail/`**: - `EventDetailHeader.tsx`: Cabeçalho com link de retorno, título do evento, badge "Gestão de RSVP" e botão com spinner de atualização. - `EventDetailMetrics.tsx`: 3 StatCards para Total Registrados, Presença Confirmada e Desmarcados com taxa percentual. - `EventDetailFilters.tsx`: Abas de status com contadores reativos e campo de pesquisa. - `GuestTableRow.tsx` & `GuestTable.tsx`: Tabela com renderização de convidados, status semânticos, acompanhantes, badges de canais de comunicação e paginação. - `GuestActionDropdown.tsx`: Menu contextual flutuante para disparos manuais de E-mail (5 modelos), WhatsApp (3 modelos), Web Push (2 modelos) e toggle de confirmação. - `GuestDetailsModal.tsx`: Modal de auditoria com ficha cadastral do convidado e histórico de notificações. - `EventDetailView.tsx`: Orquestrador principal da tela de detalhes. 3. **Página de Rota Enxuta**: - [`src/app/admin/eventos/[slug]/page.tsx`](file:///c:/Projetos/site/src/app/admin/eventos/%5Bslug%5D/page.tsx) reduzida a ~10 linhas, delegando a responsabilidade visual para `<EventDetailView slug={slug} />`.
- Arquitetura 100% modular, desacoplada e tipada, mantendo fidelidade visual idêntica (pixel-perfect) e funcionamento perfeito dos disparos multicanal.
🏗️Arquitetura & UI / Componentização do Hub de Gestão de Eventos (/admin/eventos)
Refatoração e componentização completa da tela principal de **Gestão de Eventos & RSVP** (`/admin/eventos`), estruturando a camada de domínio desacoplada em `src/features/eventos/`: 1. **Métricas Consolidadas no Topo (`EventsMetricsBar.tsx`)**: - Barra superior com 4 indicadores globais: Total de Eventos, Convidados Inscritos, Presenças Confirmadas e Taxa Média de Conversão (RSVP). 2. **Barra de Filtros e Busca Rápida (`EventsFiltersBar.tsx`)**: - Abas dinâmicas com contadores por status: `Todos os Eventos`, `Ativos / Próximos`, `Em Planejamento` e `Concluídos`. - Campo de busca instantânea por título, localidade, slug e descrição. 3. **Card Rico de Evento (`EventCard.tsx`)**: - Exibição de metadados completos (Data, Horário, Local com ícones dourados). - Barra de progresso visual de confirmação proporcional ao total de inscritos. - Botão direto de acesso ao painel de convidados e disparos multicanal (`/admin/eventos/[slug]`). 4. **Modal de Cadastro de Eventos (`EventCreateModal.tsx`)**: - Formulário com geração automática de slug, definição de data, horário, local, status e objetivo. 5. **Orquestração e Tipagem Desacoplada**: - Criação de `src/features/eventos/` (`EventsHubView.tsx`, `EventsHubHeader.tsx`, `Event.types.ts`). - Transformação de [`/admin/eventos/page.tsx`](file:///c:/Projetos/site/src/app/admin/eventos/page.tsx) em um Server Component limpo.
- O Hub de Eventos agora é 100% modular, filtrável, interativo e pronto para suportar múltiplos eventos corporativos com alta fidelidade visual.
🎨UI & Correção / Ajuste de Largura Automática (w-fit) para Badges em PageHeader
Correção do comportamento de expansão horizontal dos badges em cabeçalhos de página: 1. **Contenção Estrita de Largura no `PageHeader`**: - Ajustado o container do slot `badge` em [`PageHeader.tsx`](file:///c:/Projetos/site/src/components/ui/PageHeader/PageHeader.tsx) para `<div className="flex items-center gap-2 mb-2 w-fit">`, garantindo que qualquer badge injetado envolva perfeitamente apenas o seu conteúdo textual. 2. **Uso de `inline-flex w-fit` nos Cabeçalhos de Módulo**: - Atualizados [`DashboardHeader.tsx`](file:///c:/Projetos/site/src/features/dashboard/components/DashboardHeader.tsx) e [`JobPositionsHeader.tsx`](file:///c:/Projetos/site/src/features/recrutamento/components/vagas/JobPositionsHeader.tsx).
- O badge agora possui visual elegante e compacto em formato de cápsula ajustada ao tamanho exato do texto e ícone, sem esticar horizontalmente.
🏗️Arquitetura & UI / Componentização da Visão Geral (Dashboard) com Cards Clicáveis e Separação de Ferramentas
Refatoração e componentização completa da tela de **Visão Geral** (`/admin`): 1. **Cards de Métricas Numéricas Reais & Clicáveis (`DashboardStatCard`)**: - Remoção dos cards não-numéricos (Sanity CMS e Importador) do grid de estatísticas superiores. - O grid superior agora exibe exclusivamente 4 métricas reais e dinâmicas: - 🎫 *THE ONE 360° (Eventos)*: Total de convidados e confirmados → Link para `/admin/eventos`. - 👥 *Candidaturas RH*: Total de inscritos no banco → Link para `/admin/candidatos`. - 💼 *Vagas no Portal*: Total de vagas ativas no Sanity → Link para `/admin/candidatos`. - ✉️ *Central de Templates*: Total de templates de e-mail/WhatsApp → Link para `/admin/templates`. - Todos os cartões de estatísticas são links navegáveis inteiros com efeito hover sofisticado (`ArrowUpRight`, elevação e glow decorativo). 2. **Separação de Módulos Operacionais e Ferramentas**: - Criação da seção **"Módulos Administrativos"** com cartões detalhados para Eventos, Recrutamento e Templates. - Criação da seção dedicada **"Ferramentas & Integrações"** para *Sanity Studio (CMS)*, *Central de Artigos (JSON/IA)* e *Portal Trabalhe Conosco (Página Pública)*. 3. **Desacoplamento Arquitetural (`src/features/dashboard/`)**: - Isolamento de componentes: `AdminDashboardView.tsx`, `DashboardHeader.tsx`, `DashboardStatCard.tsx`, `DashboardMetricsGrid.tsx`, `DashboardModuleCard.tsx`, `DashboardToolCard.tsx` e `DashboardModulesSection.tsx`. - A página `/admin/page.tsx` foi transformada em um Server Component limpo com buscas concorrentes via Supabase e Sanity.
- Visão Geral 100% modular, navegável e intuitiva, com clara distinção entre métricas em tempo real e ferramentas de conteúdo.
📐UI & Layout / Expansão Edge-to-Edge do Painel Administrativo
Ajuste na ocupação espacial e largura lateral de todas as visualizações do Hub Administrativo: 1. **Ocupação Lateral Total (`w-full`)**: - Remoção das restrições de largura máxima (`max-w-7xl`, `max-w-6xl`) nas telas de Recrutamento (Pipeline de Candidatos e Gestão de Vagas), Central de Eventos, Central de Templates e Dashboard Geral. 2. **Ajuste de Padding no Layout Global (`AdminLayout`)**: - Transição do container `<main>` para preenchimento lateral otimizado (`p-4 sm:p-6 lg:p-8 w-full min-w-0`), aproveitando 100% da área útil disponível entre a barra lateral (Sidebar) e a borda da tela.
- O quadro Kanban, a tabela de candidatos e todas as telas administrativas agora utilizam todo o espaço horizontal disponível, proporcionando excelente visibilidade e conforto operacional.
✨Feature & UI Pura / Menu de Ações no Kanban e Personalizador Avançado de Cards (Campo, Destaque e Local)
Implementação completa da personalização dinâmica dos cards do quadro Kanban e do menu de ações contextuais para candidatos: 1. **Menu de Ações no Card do Kanban (`ActionMenu`)**: - Cada card do Kanban agora conta com o botão de menu de 3 pontinhos (`MoreVertical`) no canto superior direito. - Disponibiliza 5 ações diretas: - 👁️ *Ver Detalhes / Currículo* - 🔄 *Alterar Etapa (com registro de parecer)* - 💬 *Enviar WhatsApp (Central de Mensagens)* - ✉️ *Enviar E-mail* - 🗑️ *Excluir Candidatura (com confirmação)* - O clique no menu interrompe a propagação para evitar abrir o card ou disparar arrasto. 2. **Personalizador Avançado de Cards (`CardCustomizerModal.tsx`)**: - Modal acessível pela Toolbar no botão **"Personalizar Cards"**. - Matriz completa de customização permitindo definir para cada campo (`Nome`, `Protocolo`, `Vaga`, `Data`, `E-mail`, `Telefone`, `WhatsApp`, `Currículo`): - **Visibilidade**: Exibir ou Ocultar. - **Local no Card**: `Header` (Topo), `Body` (Corpo) ou `Footer` (Rodapé). - **Nível de Destaque**: `Identidade` (Tamanho e peso proeminente), `Destaque` (Badge dourado / Ênfase de cor) ou `Comum` (Texto discreto e muted com ícone). 3. **Persistência no `localStorage`**: - As escolhas de visualização do usuário são gravadas no navegador (`theone_kanban_card_config`) e restauradas automaticamente em novas sessões, com botão de "Restaurar Padrão".
- O usuário tem controle total sobre quais informações deseja ver em cada área do card (Header, Body, Footer) com diferentes pesos visuais, além de acesso instantâneo às ações de gestão de candidatos no Kanban.
🏗️Arquitetura, Componentização & UI Pura / Refatoração Completa do Ecossistema de Recrutamento
Refatoração e desacoplamento arquitetural completo de todo o domínio de Recrutamento & Seleção (Admin e Portal Público), mantendo 100% de paridade visual (pixel-perfect) e integridade funcional: 1. **Primitivo de UI Pura (`Toast`)**: - Criação de `src/components/ui/Toast/` (`Toast.tsx`, `Toast.types.ts`, `useToast.ts`), eliminando marcações duplicadas inline e padronizando notificações com suporte a variantes (`success`, `error`, `warning`, `info`). 2. **Modularização de Filtros e Métricas do Pipeline (`RecruitmentView`)**: - Criação de `RecruitmentMetricsBar.tsx` para os 6 cartões de status e contadores. - Criação de `JobFilterPopover.tsx` e `StatusFilterPopover.tsx` em `filters/`, isolando a lógica de portais flutuantes. 3. **Desacoplamento Completo da Gestão de Vagas (`vagas/` e `useJobPositions`)**: - Criação do hook `useJobPositions.ts` para orquestração de CRUD, toggles e loading. - Fatiamento de `JobPositionsManager` em `JobPositionsHeader.tsx`, `JobPositionCard.tsx`, `JobPositionsGrid.tsx`, `JobPositionModal.tsx` e `JobPositionsView.tsx`. - `JobPositionsManager.tsx` agora atua como casca de compatibilidade reexportadora. 4. **Componentização do Wizard Público de Candidatura (`wizard/`)**: - Fatiamento de `JobWizardForm.tsx` em `JobWizardHeader.tsx`, `JobWizardStepContact.tsx`, `JobWizardStepQuestions.tsx`, `JobWizardStepReview.tsx`, `JobWizardStepSuccess.tsx` e `JobWizardFooter.tsx`. 5. **Componente de Card Público de Vagas (`PublicJobCard.tsx`)**: - Criação de `PublicJobCard.tsx` em `src/features/recrutamento/components/public/` e integração na rota pública `/trabalhe-conosco`.
- Arquitetura 100% desacoplada e modular, zero componentes monolíticos e conformidade total com os padrões de design system e UI Pura do projeto.
🔄Fluxo & Governança / Abertura de Modal de Parecer ao Mover Cards no Kanban
Aprimoramento do fluxo de governança e histórico no quadro Kanban: 1. **Confirmação com Parecer Obrigatório**: - Ao arrastar um candidato para outra coluna de status, o sistema agora abre automaticamente o modal `CandidateStageModal` pré-configurado com a etapa de destino. - O avaliador/RH deve inserir o parecer/justificativa da decisão antes de confirmar a transição. 2. **Registro e Rastreabilidade**: - O parecer é gravado no histórico de auditoria do candidato no banco de dados e a tela é atualizada com notificação de sucesso.
- Toda mudança de etapa realizada por drag & drop no Kanban passa pelo registro obrigatório de parecer técnico do RH.
🔗Navegação & UI / Inclusão do Link "Trabalhe Conosco" no Rodapé (Footer)
Inclusão do atalho de navegação pública para o portal de carreiras e recrutamento: 1. **Link no Rodapé Global (`Footer.tsx`)**: - Adicionado o link `/trabalhe-conosco` na seção "Navegação" do rodapé institucional.
- Os visitantes e candidatos agora têm acesso direto ao portal de vagas e candidaturas a partir de qualquer página pública do site.
🎨UI & Layout / Altura Uniforme das Colunas do Kanban e Scrollbar Oculta
Ajuste fino no layout estrutural do quadro Kanban: 1. **Alinhamento e Altura Uniforme**: - Todas as 5 colunas agora possuem a mesma altura fixa e responsiva (`h-[calc(100vh-280px)] min-h-[580px] max-h-[850px]` com `items-stretch`), eliminando a distorção visual onde apenas a coluna com muitos cards se expandia. 2. **Scroll Invisível / Oculto (`no-scrollbar`)**: - A rolagem vertical dos cards permanece 100% funcional (via scroll do mouse, trackpad ou touch), porém com a barra de rolagem visualmente oculta para uma estética limpa e moderna. 3. **Área de Soltura em Colunas Vazias**: - Container centralizado preenchendo toda a altura da coluna vazia para drop intuitivo.
- O quadro Kanban permanece perfeitamente nivelado, alinhado e elegante, sem que nenhuma coluna quebre a harmonia visual da tela.
📐Layout & UI / Integração da Central de Artigos no Layout do Painel Administrativo (/admin/artigos)
Migração da Central de Artigos para o interior do layout administrativo corporativo: 1. **Integração no Layout com Sidebar (`AdminLayout`)**: - Criação da rota oficial [`/admin/artigos`](file:///c:/Projetos/site/src/app/admin/artigos/page.tsx) dentro do grupo de rotas administrativas. - A página agora é renderizada com a **Barra Lateral (Sidebar)** do Admin e sem o cabeçalho e rodapé do site público. 2. **Redirecionamento Automático**: - A rota legada [`/subir-artigos`](file:///c:/Projetos/site/src/app/%28site%29/subir-artigos/page.tsx) foi convertida em um redirecionamento seguro para `/admin/artigos`. - Atualizados os links de navegação na Sidebar (`/admin/artigos`) e nos cards da Visão Geral.
- Experiência visual 100% integrada e coerente com o restante do Hub Administrativo.
🏗️Arquitetura & Segurança / Remoção de Login Secundário e Componentização Modular da Central de Artigos
Refatoração da **Central de Artigos** ([`/subir-artigos`](file:///c:/Projetos/site/src/app/%28site%29/subir-artigos/page.tsx)), eliminando a tela de login secundária e desacoplando a lógica de importação na camada `src/features/artigos/`: 1. **Eliminação do Login Secundário**: - A rota já é estritamente protegida no nível de infraestrutura pelo Supabase Auth (`src/proxy.ts`). Foi removido o formulário de senha local e o token de `localStorage`. - A API de importação ([`/api/artigos/import`](file:///c:/Projetos/site/src/app/api/artigos/import/route.ts)) agora valida a sessão de usuário autenticado do Supabase via cookies de servidor (`createServerSupabase`), mantendo fallback de senha de ambiente apenas para scripts CLI. 2. **Hook de Domínio (`useArticleImport.ts`)**: - Centraliza o processamento de múltiplos arquivos `.json`, leitura com `FileReader`, parsing de Portable Text, validação de tags de SEO, controle de fila e submissão em lote. 3. **Componentes Modulares em `src/features/artigos/components/importador/`**: - `ArticleImportHeader.tsx`: Cabeçalho com PageHeader, badge `IA & Lote` e atalho para o Sanity Studio. - `ArticleDropzone.tsx`: Área de upload e arrasto (*drag and drop*) com feedback visual interativo. - `ArticleQueueCard.tsx`: Card de pré-visualização individual do artigo (título, subtítulo, resumo, categoria, tags, contagem de palavras e botão de exclusão da fila). - `ArticleQueueGrid.tsx`: Grid da fila de artigos com botões "Limpar Fila" e "Importar Artigos no Sanity" com spinner de carregamento. - `ArticleImportResults.tsx`: Painel de relatório com links diretos para os artigos criados no portal. - `ArticleImportView.tsx`: Orquestrador principal da tela de importação. 4. **Página de Rota Enxuta**: - [`src/app/(site)/subir-artigos/page.tsx`](file:///c:/Projetos/site/src/app/%28site%29/subir-artigos/page.tsx) reduzida a uma casca limpa de renderização de `<ArticleImportView />`.
- Experiência fluida e unificada de autenticação com o ecossistema The One, código 100% componentizado e sem travas manuais de senha desnecessárias.
✨Feature & UI Pura / Kanban com Drag & Drop, Ordenação por Coluna e Seletor de Campos do Card
Implementação completa da experiência interativa do **Quadro Kanban de Recrutamento & Seleção**: 1. **Arrasta e Solta (Drag & Drop) Nativo**: - Transição de status ao arrastar cards entre colunas com atualização otimista instantânea no estado e persistência no Supabase. - Feedback visual moderno: opacidade de arraste (`opacity-40 scale-[0.98] border-dashed border-gold/60`), destaque da coluna alvo e indicador de inserção. 2. **Ordenação por Coluna**: - Botão de ordenação independente em cada cabeçalho de coluna (`Mais Recentes`, `Mais Antigos`, `Nome A-Z`, `Nome Z-A`) com ícones dinâmicos de direção (`ArrowUp`/`ArrowDown`). 3. **Seletor de Campos do Card na Toolbar (`DataViewToolbar`)**: - No modo Kanban, o botão **"Campos do Card"** permite alternar em tempo real a visibilidade de dados como *Protocolo*, *Data*, *Vaga*, *WhatsApp*, *Currículo*, *E-mail* e *Telefone*. 4. **Card Componentizado (`KanbanCard.tsx`)**: - Refatoração do componente de UI pura para a nova linguagem visual (`rounded-xl`), cursor dinâmico `cursor-grab active:cursor-grabbing`, elevação suave e slots desacoplados.
- O gestor de RH agora pode gerenciar candidatos arrastando cards entre etapas, ordenar colunas individualmente e personalizar quais informações aparecem nos cards.
🔧Correção & Schema / Persistência e Edição de Perguntas Dinâmicas da Vaga (Etapa 3)
Correção do salvamento, recuperação e edição de perguntas personalizadas do questionário de candidatura: 1. **Schema do Sanity (`jobPositionType.ts`)**: Adicionado o campo oficial `questions` (array de objetos com `questionKey`, `title`, `subtitle`, `type`, `isRequired`, `options`) diretamente no documento de cada vaga. 2. **Consultas e Modelagem (`jobs.ts`)**: Atualizada a interface `JobPosition` e projeções GROQ (`fetchJobPositions` e `fetchJobPositionBySlug`) para carregar o array `questions`. 3. **API Administrativa (`api/admin/vagas/route.ts`)**: - `GET`: Retorna o array `questions` de cada vaga. - `POST` & `PUT`: Sanitizam e persistem as perguntas vinculadas ao documento da vaga com chaves únicas (`_key` e `questionKey`). 4. **Painel Administrativo (`JobPositionsManager.tsx`)**: - `handleOpenEditModal`: Carrega as perguntas existentes da vaga no formulário (Aba 4). - Suporte a múltiplos tipos de resposta (`input_text`, `textarea`, `yes_no`, `select` com opções separadas por vírgula). 5. **Formulário de Inscrição (`JobWizardForm.tsx`)**: Prioriza as perguntas específicas cadastradas para a vaga com fallback para as perguntas globais do RH.
- Perguntas customizadas configuradas na Aba 4 são salvas no Sanity, recarregadas ao editar a vaga e exibidas aos candidatos na Etapa 3 do formulário.
🎨Correção / UI & Layout / Ajuste de Deslocamento Sticky na Página de Detalhes da Vaga
Correção de sobreposição visual do card flutuante de resumo da vaga pelo menu de navegação global (`Header`): 1. **Compensação de Altura do Header Fixo**: - Ajustado o recuo superior da página (`pt-28 sm:pt-32`) para acomodar a altura do cabeçalho fixo (`h-20 sm:h-24`). 2. **Deslocamento do Card Lateral (*Sticky Offset*)**: - Atualizada a classe de fixação de `lg:top-8` para `lg:top-28 z-20`, garantindo uma folga visual perfeita abaixo do cabeçalho durante a rolagem completa da página.
- O card de resumo da vaga desliza suavemente e para abaixo do cabeçalho sem nenhuma sobreposição ou corte de texto.
🎨UI Pura & Layout / Expansão de Largura Dinâmica no Primitivo `Modal` (`4xl`, `5xl`, `6xl`, `full`)
Aprimoramento da flexibilidade de dimensionamento do componente primitivo `Modal` e ampliação do modal de vagas: 1. **Suporte a Novas Larguras (`Modal.types.ts` & `Modal.tsx`)**: - `sm` (384px), `md` (448px), `lg` (512px), `xl` (576px), `2xl` (672px), `3xl` (768px), **`4xl` (896px)**, **`5xl` (1024px)**, **`6xl` (1152px)** e **`full` (95vw)**. 2. **Modal de Vagas Ampliado (`JobPositionsManager.tsx`)**: - Atualizado para `maxWidth="5xl"` (1024px), proporcionando maior amplitude, legibilidade e conforto visual para preenchimento de formulários longos e uso do editor de texto rico.
- Modal de vagas significativamente mais espaçoso e confortável para edição, mantendo 100% de responsividade em telas menores.
🎨UI Pura & Componentização / Componente `RichTextEditor` & `RichTextToolbar`
Criação e integração do componente genérico de UI Pura `RichTextEditor` para edição rica de textos, descrições e conteúdos estruturados: 1. **Arquitetura de UI Desacoplada (`src/components/ui/RichTextEditor/`)**: - `RichTextToolbar.tsx`: Barra de ferramentas modular com suporte a H2, H3, H4, Negrito, Itálico, Listas (com marcadores e numeradas), Citações, Links, Código e Limpeza. - `RichTextEditor.tsx`: Editor com manipulação precisa de cursor, suporte a atalhos de teclado (`Ctrl+B`, `Ctrl+I`, `Tab`), alternador entre abas *Editar* e *Pré-visualizar*, além de contagem em tempo real de palavras e caracteres. - `RichTextEditor.types.ts` e `index.ts`: Contrato de tipos reutilizável e fortemente tipado. 2. **Integração no Painel (`JobPositionsManager.tsx`)**: Substituição da implementação inline pela instância do `<RichTextEditor />` na aba de descrição de vagas. 3. **Compatibilidade Sanity Studio (`jobPositionType.ts`)**: Adicionados estilos `h4` e `blockquote` ao schema de Portable Text para evitar erros de renderização no Studio.
- Interface de edição de texto rica, padronizada no Design System, reutilizável e com pré-visualização em tempo real.
🔧Correção / Build Turbopack / Isolamento de Client Component para o Sanity Studio
Resolução do erro de bundling no Turbopack / Next.js (*"Export default doesn't exist in target module swr/react-server.mjs"*): 1. **Isolamento de Camada Client (`Studio.tsx`)**: Criado o componente com diretiva `'use client'` para encapsular a importação do `sanity.config.ts` e do `NextStudio`. Isso impede que o compilador do Next.js processe dependências exclusivas de cliente (como `swr` e plugins de estrutura do Sanity) no contexto de React Server Components (`app-rsc`). 2. **Camada Server de Rota (`page.tsx`)**: Mantém a exportação estática de metadados, viewport e instanciação do `<Studio />`.
- Compilação e carregamento instantâneos do Sanity Studio sem conflito de módulos Server/Client no Turbopack.
🔧Correção / Sanity Studio / Resolução de Conflito de Hook no `NextStudio`
Correção do erro de React Hooks no Sanity Studio (*"The final argument passed to useMemo changed size between renders"*): 1. **Padronização do `NextStudio`**: Removido o import dinâmico com `ssr: false` que causava divergência de hidratação nos arrays de dependência de `useMemo`. 2. **Exportação Oficial Next.js App Router**: Atualizado `src/app/studio/[[...tool]]/page.tsx` para o padrão oficial da biblioteca `next-sanity/studio` com `export const dynamic = 'force-static'` e metadata nativa.
- O Sanity Studio (`/studio`) carrega sem erros de console ou incompatibilidade de hooks no React / Turbopack.
🎨UI & UX / Ocultação do Botão Flutuante "Simular Agora" nas Páginas de Candidatura
Remoção e ocultação global do botão flutuante de simulação (*"Simular Agora"* / `FloatingCta`) em todas as rotas do funil de recrutamento: 1. **Regra de Rota no Componente Flutuante (`FloatingCta.tsx`)**: O componente agora verifica automaticamente a rota via `usePathname()` e se oculta de forma transparente em `/trabalhe-conosco`, `/trabalhe-conosco/[slug]`, `/trabalhe-conosco/[slug]/candidatar` e no painel `/admin`. 2. **Limpeza de Componentes**: Removidas chamadas residuais de `<FloatingCta />` nas páginas de listagem e detalhes de vagas.
- Experiência focada exclusivamente no processo seletivo e envio de currículo sem distrações de simulação comercial.
✨Feature & Schema / Suporte ao Campo de Remuneração e Faixa Salarial
Implementação do campo opcional de remuneração / salário para divulgação de vagas: 1. **Flexibilidade de Formato**: O campo aceita valor fixo único (ex.: *R$ 4.500,00*), faixa salarial (ex.: *R$ 3.500 a R$ 5.000,00*), termos flexíveis (ex.: *A combinar*) ou pode ser deixado em branco. 2. **Schema do Sanity (`jobPositionType.ts`)**: Adicionado campo `salary` (string opcional) com validação e descrição no estúdio. 3. **Painel Administrativo (`JobPositionsManager.tsx`)**: Campo integrado na aba *Informações Gerais* e exibição da remuneração no `meta` dos cards (`DataCard`). 4. **Páginas Públicas (`/trabalhe-conosco` e `/trabalhe-conosco/[slug]`)**: Exibição da remuneração com destaque visual através de badge verde semântico (`bg-status-approved/15`) e no resumo lateral da oportunidade.
- Transparência salarial configurável para cada vaga com suporte a valores fixos, faixas ou omissão.
🎨UI & UX / Limpeza de Jargões Técnicos no Painel Administrativo
Revisão e substituição de todos os termos e jargões técnicos de infraestrutura (`Sanity`, `Portable Text`, `Graph API`, etc.) por terminologias amigáveis de negócios voltadas para o usuário final: 1. **Abas e Modais**: - De *"Descrição Completa (Sanity)"* para **"Descrição da Vaga"**. - De *"Editor de Descrição Completa (Portable Text)"* para **"Editor de Descrição da Oportunidade"**. - De *"URL Amigável (Slug)"* para **"URL Amigável (Link da Vaga)"**. 2. **Mensagens e Notificações (Toasts)**: - De *"Vaga publicada com sucesso no Sanity Studio!"* para **"Vaga publicada com sucesso no portal!"**. - De *"Carregando vagas do Sanity Studio..."* para **"Carregando oportunidades cadastradas..."**. 3. **Módulos de Eventos e Disparos**: - De *"Enviar E-mail (Graph API)"* para **"Enviar E-mail Oficial"**.
- Interface 100% humanizada, intuitiva e amigável para a equipe de Gente & Gestão e administradores não técnicos.
🔧Correção / UI & Primitivos / Renderização de Abas e Formulários no `Modal`
Correção na renderização do componente primitivo `Modal`: 1. **Renderização de `children` com Abas**: O primitivo `Modal` agora renderiza a barra de abas (`Tabs`) no cabeçalho e garante a renderização contínua do conteúdo/formulário recebido via `children`. 2. **Scroll Responsivo (`max-h-[92vh]`)**: Adicionado controle de altura máxima e overflow com rolagem suave no corpo do modal para evitar cortes em formulários longos.
- O modal de edição/criação de vagas agora exibe todos os formulários e campos das 4 abas perfeitamente.
✨Feature & Schema / Compatibilidade Total com Schema do Sanity, Editor de Descrição Completa e Adaptação da Página Pública
Total compatibilidade entre o formulário/modal do painel administrativo, o schema do Sanity Studio e a página pública da vaga (`/trabalhe-conosco/[slug]`): 1. **Modal de Vagas com Abas Declarativas (`JobPositionsManager.tsx`)**: - **Aba 1 (Informações Gerais)**: Título, Slug customizável, Departamento, Localização/Modelo, Contrato, Nível de Senioridade, Resumo (*excerpt*), Toggles de Vaga Ativa e Destaque (*featured*) e Ordem de exibição. - **Aba 2 (Descrição Completa / Portable Text)**: Editor amplo com conversão bidirecional Markdown ↔ Portable Text e botões de atalho (`## H2`, `### H3`, `- Lista`, `**Negrito**`, `> Citação`). - **Aba 3 (Requisitos & Benefícios)**: Gerenciamento dinâmico de itens com adição/remoção em tempo real. - **Aba 4 (Questionário)**: Configuração de campos e perguntas dinâmicas para a etapa 3 do formulário público. 2. **Conversor Bidirecional (`src/lib/portableTextHelpers.ts`)**: - `portableTextToMarkdown`: Converte blocos do Sanity Portable Text para edição legível no painel. - `markdownToPortableText`: Converte texto formatado de volta em blocos nativos do Sanity (`h2`, `h3`, `normal`, `bullet`, `strong`, etc.). 3. **Página Pública da Vaga (`src/app/(site)/trabalhe-conosco/[slug]/page.tsx`)**: - Layout moderno com grid de 2 colunas: - Renderização da **Descrição Completa** via `PortableTextRenderer`. - Seção dedicada de **Requisitos & Qualificações** com marcadores estilizados. - Seção dedicada de **Benefícios & Diferenciais The One** em grid de cards. - Painel lateral *sticky* com resumo da vaga (Área, Local, Regime, Senioridade) e botão de candidatura rápida. - Banner final de CTA para submissão direta.
- Sincronização 100% fiel com o schema do Sanity Studio, permitindo ao RH redigir descrições completas e detalhadas que são refletidas com alta fidelidade visual na página pública da vaga.
✨Feature & UX / Dropdown no Card de Vagas, Card Clicável e Modal de Edição
Implementação do menu de ações dropdown no card de vagas, tornando o card clicável e permitindo edição completa diretamente pelo painel: 1. **Dropdown de Ações no `DataCard` (`ActionMenu`)**: - 👥 **Ver Candidatos**: Filtra a tabela de candidatos automaticamente pelo slug da vaga e alterna para a aba *"Candidatos & Pipeline"*. - ✏️ **Editar Vaga**: Abre o modal com os dados da vaga pré-carregados para alteração de título, departamento, localização, contrato, nível, resumo, requisitos e benefícios. - 🗑️ **Excluir Vaga**: Opção com confirmação e exclusão no Sanity Studio. 2. **Card Clicável**: Ao clicar em qualquer área do card da vaga, abre o modal de visualização e edição. 3. **Endpoint PUT em `/api/admin/vagas`**: Adicionado suporte para atualização de vagas no Sanity CMS com regeneração dos blocos formatados de Portable Text.
- Gestão ágil de vagas com acesso direto aos candidatos daquela posição e edição visual completa via modal.
🔧Correção / Sanity Schema & Rotas / Sincronização de Vagas & Resolução do 404
Diagnóstico e correção dos avisos de schema do Sanity Studio (*"Unknown fields found"*) e do erro 404 ao acessar vagas recém-criadas: 1. **Adição dos Campos `requirements` e `benefits` ao Schema (`jobPositionType.ts`)**: Inseridas definições explícitas de arrays de string no schema do Sanity para requisitos e benefícios da vaga. 2. **Unificação do Campo `active`**: Ajustado o endpoint `/api/admin/vagas` para gravar estritamente a propriedade oficial `active: true` do schema (removendo `isActive`), eliminando o aviso de campo desconhecido. 3. **Resolução do 404 na Página da Vaga (`/trabalhe-conosco/[slug]`)**: Atualizadas as consultas GROQ em `src/lib/jobs.ts` para buscar `active != false`, garantindo que vagas recém-criadas sejam encontradas e renderizadas imediatamente. 4. **Enriquecimento do Portable Text**: Requisitos e benefícios são automaticamente convertidos em blocos formatados de lista no `description` da vaga.
- Vagas criadas no painel abrem instantaneamente na página pública `/trabalhe-conosco/[slug]` sem erro 404 e sem warnings no Sanity Studio.
🏗️Design System & UI / Componentização da Aba de Gestão de Vagas (`JobPositionsManager`)
Padronização da aba **Gestão de Vagas (Sanity)** e criação da casca visual pura `DataCard`: 1. **Primitivo `DataCard` (`src/components/ui/DataCard/`)**: Casca visual genérica e agnóstica para cards de conteúdo com slots flexíveis para `badge`, `headerActions`, `title`, `description`, `meta`, `footerLeft` e `footerRight`. 2. **Header da Aba Padronizado (`PageHeader`)**: O cabeçalho interno da aba agora utiliza o primitivo `<PageHeader />` com título e descrição alinhados. 3. **Remoção do Atalho do Sanity Studio**: Removido o botão de atalho externo para o Sanity Studio da aba de gestão de vagas conforme solicitado. 4. **Botões e Ações Padrão (`Button` e `IconButton`)**: Botão de cadastro (*"Cadastrar Nova Vaga"*), botões do modal (*"Cancelar"* e *"Publicar no Portal"*) e botão de exclusão de vaga migrados para os primitivos de UI.
- Aba de gestão de vagas 100% componentizada com design system puro e sem links residuais externos desnecessários.
🏗️Design System & UI Pura / Primitivos `PageHeader`, `Button` e `StatCard`
Padronização e migração de todo o cabeçalho e cards de métricas do painel de recrutamento para componentes puros e reutilizáveis do Design System: 1. **Primitivo `PageHeader` (`src/components/ui/PageHeader/`)**: Casca visual desacoplada com slots flexíveis para `badge`, `title`, `description` e `actions`. 2. **Primitivo `Button` (`src/components/ui/Button/`)**: Componente polimórfico (botão ou link Next.js) com suporte a variantes do tema (`gold`, `primary`, `secondary`, `outline`, `ghost`, `danger`, `success`), tamanhos e ícones. 3. **Primitivo `StatCard` (`src/components/ui/StatCard/`)**: Card estatístico universal com suporte a variantes semânticas por status (`default`, `received`, `analyzing`, `interview`, `approved`, `rejected`, `gold`), ícones e subtextos. 4. **Refatoração do `RecruitmentView.tsx`**: O topo da página agora consome exclusivamente `<PageHeader />`, `<Badge />`, `<Button />` e `<StatCard />`, eliminando qualquer HTML ou estilo inline repetido.
- Topo do painel 100% componentizado, modular e reutilizável em qualquer módulo administrativo da plataforma.
🔧Correção / Deploy / Docker Build Args para Supabase Auth
Diagnóstico e correção do erro de autenticação em ambiente de produção Docker (*"Erro ao conectar com o serviço de autenticação"*): 1. **Causa Raiz**: No Next.js, variáveis com prefixo `NEXT_PUBLIC_*` são embutidas diretamente no bundle JavaScript do cliente durante o estágio de compilação (`npm run build`). No `dockerfile` e no `docker-compose.yml`, apenas as variáveis do Sanity estavam declaradas nos `args` de build, fazendo com que `NEXT_PUBLIC_SUPABASE_URL` e `NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY` fossem compiladas como `undefined` no frontend. 2. **Correção no Dockerfile & Compose**: Adicionados os `ARG` e `ENV` correspondentes a `NEXT_PUBLIC_SUPABASE_URL`, `NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY` e `NEXT_PUBLIC_SITE_URL` no `dockerfile` e mapeados nos `args` do `docker-compose.yml` a partir do `stack.env`.
- O cliente de autenticação do Supabase no browser recebe os endpoints corretos compilados, permitindo o login sem falhas em produção.
🔧Correção / CMS / Exibição no Menu do Sanity Studio
Correção na navegação do Sanity Studio (`sanity.config.ts`): 1. **Inclusão no Menu Lateral**: Os tipos singleton `privacyPolicy` e `termsOfUse` estavam cadastrados no conjunto de exclusão `singletonTypes` da lista genérica, porém os botões diretos de navegação (`S.listItem()`) ainda não haviam sido declarados na barra lateral do Studio. 2. **Novas Entradas Visíveis**: Adicionados os itens **📜 Política de Privacidade & LGPD** e **⚖️ Termos e Condições de Uso** diretamente na barra lateral do Sanity Studio (`/studio`).
- Os documentos de Política de Privacidade e Termos de Uso agora aparecem diretamente no menu lateral esquerdo do Sanity Studio para edição visual direta.
📜Feature / Conteúdo & Legal / Política de Privacidade Meta & WhatsApp (LGPD)
Atualização integral do documento oficial de Política de Privacidade e Proteção de Dados Pessoais no Sanity CMS, incluindo todas as diretrizes de conformidade com a LGPD e integrações com WhatsApp Business, Meta Platforms e canais de atendimento: 1. **Seed no Sanity CMS (`scripts/seed_privacy_policy.mjs`)**: Extração e publicação automatizada das 22 seções do documento `docs/politica_privacidade_the_one_meta_whatsapp.md` diretamente no documento `privacyPolicy` do Sanity Studio. 2. **Renderização Aprimorada (`src/app/(site)/politica-de-privacidade/page.tsx`)**: Implementado formatador inteligente para subtítulos (`###`), listas com marcadores (`-`) e itens numerados, garantindo legibilidade e harmonia com o tema escuro/dourado da The One. 3. **Data e Metadados**: Última atualização registrada em 21 de Agosto de 2026.
- Política de privacidade atualizada em tempo real no Sanity e refletida na rota `/politica-de-privacidade`.
✨Feature / UX / Dropdown Interativo de Mudança de Status na Tabela
Implementação de menu dropdown interativo na célula de status da tabela de candidatos: 1. **Gatilho Visual no Badge (`CandidateStatusBadge.tsx`)**: O badge de status agora funciona como um gatilho de clique elegante com ícone de chevron giratório (`ChevronDown`) e feedback de hover. 2. **Menu Flutuante via Portal**: Ao clicar no badge, abre um menu flutuante renderizado via `createPortal` com posicionamento inteligente (*smart flip* para cima/baixo), listando todas as etapas disponíveis com marcadores coloridos e marcação de status ativo (`Check`). 3. **Fluxo Unificado com Justificativa do RH**: Ao selecionar uma nova etapa no dropdown, o sistema abre o modal `CandidateStageModal` com a nova etapa pré-selecionada para inserção do parecer obrigatório do RH.
- Mudança de etapa de candidatos rápida e intuitiva diretamente pela coluna de status da tabela.
🎨UI / Design System / Primitivo `Checkbox` com Cantos Suaves
Criação do componente primitivo de interface `Checkbox` (`src/components/ui/Checkbox/`) com controle preciso de raio de curvatura dos cantos, suporte a estado indeterminado e ícones vetoriais dourados: 1. **Primitivo `Checkbox`**: Substitui o checkbox nativo do navegador por um elemento estilizado com `rounded-[7px]`, transições fluidas e ícones SVG (`Check` e `Minus`) renderizados no tema oficial (`bg-gold` / `text-navy-darker`). 2. **Integração com `DataTable.tsx`**: Aplicado no cabeçalho e em todas as linhas da tabela de recrutamento.
- Checkboxes visualmente harmonizados com o design system, com bordas arredondadas suaves (`rounded-[7px]`) e animações de clique.
✨Feature / UX / Seleção Discreta em Lote & Ações Coletivas (Bulk Actions)
Implementação completa da funcionalidade de seleção de linhas em lote com comportamento visual discreto e barra de ações flutuante: 1. **Visual Discreto de Checkbox (`DataTable.tsx`)**: Os checkboxes permanecem invisíveis por padrão, surgindo suavemente (`opacity-0 group-hover:opacity-100`) ao passar o mouse sobre a linha. Assim que qualquer item é marcado, os checkboxes e a coluna permanecem visíveis e fixos (`opacity-100`) até a desmarcação. O cabeçalho possui suporte nativo a estado intermediário (*indeterminate*). 2. **Barra Flutuante de Ações em Lote (`DataTableBulkBar.tsx`)**: Surge com animação no topo da tabela quando há seleção ativa, exibindo o contador de itens selecionados, botão de desmarcar todos e botões/ações em lote permitidas. 3. **Propriedade `bulk` no `ActionMenuItem`**: Introduzida a prop `bulk?: boolean` (padrão `true`). Ações exclusivas de um único candidato (ex: *Exibir Detalhes*, *Enviar WhatsApp*, *Enviar E-mail*) utilizam `bulk: false` e são automaticamente omitidas do menu de lote. 4. **Execução em Lote com Histórico Unificado (`CandidateStageModal.tsx` & `/api/admin/candidatos`)**: As mudanças de etapa em lote (*Entrevista*, *Aprovar*, *Reprovar*) acionam o modal com título dinâmico para múltiplos candidatos e gravam o parecer do RH no histórico de cada candidato individualmente no banco de dados. Exclusão em lote com contagem e confirmação.
- Experiência de gestão em lote ultra-fluida, discreta e segura, permitindo triar dezenas de candidatos simultaneamente sem poluição visual na interface.
🔧Correção / API / Upload de Currículos no Supabase Storage
Diagnóstico e correção na rotina de processamento de anexos na API de candidatura (`/api/trabalhe-conosco`): 1. **Conversão de Buffer Node.js**: O payload do arquivo binário agora é convertido de `ArrayBuffer` para `Buffer.from(arrayBuffer)` antes do envio ao `@supabase/storage-js`, corrigindo a incompatibilidade de streaming no runtime do Node.js. 2. **Criação Automática de Bucket e Logs Detalhados**: Adicionada verificação/criação preventiva do bucket `curriculos` e logs de erro explícitos no console do servidor. 3. **Identificação da Chave `SUPABASE_SERVICE_ROLE_KEY`**: Identificado que o ambiente `.env.local` possuía apenas a chave pública (`sb_publishable_...`), sendo necessária a chave secreta (`sb_secret_...` / `SUPABASE_SERVICE_ROLE_KEY`) para que o servidor possa gravar arquivos no Storage contornando as políticas de RLS.
- Uploads de currículos preparados para envio direto à CDN do Supabase Storage com fallback para anexo de e-mail.
🏗️Design System & UI Pura / Primitivos `Tabs` e `IconButton` / Abas Dinâmicas no `Modal`
Criação e padronização dos primitivos agnósticos de interface `Tabs` e `IconButton`, com suporte a abas dinâmicas declarativas no componente `Modal`: 1. **Primitivo `Tabs` (`src/components/ui/Tabs/`)**: Componente genérico e desacoplado orientado a esquema (`TabItem<T>[]`), com suporte a ícones, contadores numéricos de badge, variantes visuais (`underline`, `pills`, `segmented`) e controle autônomo ou controlado de abas ativas. 2. **Primitivo `IconButton` (`src/components/ui/IconButton/`)**: Componente genérico de botão exclusivo de ícone com suporte a variantes semânticas do tema (`approved`, `interview`, `rejected`, `gold`, `ghost`, `outline`, `default`), tamanhos padronizados (`xs`, `sm`, `md`, `lg`) e acessibilidade com `aria-label`/`title`. 3. **Abas Dinâmicas no `Modal` (`src/components/ui/Modal/`)**: O modal agora aceita nativamente a prop `tabs?: TabItem[]`, eliminando a necessidade de reescrever lógica de abas dentro de cada modal específico. 4. **Refatoração do `CandidateDetailsModal.tsx`**: Migrado para declarar apenas seu esquema de abas (`TabItem[]`) e utilizar `IconButton` em suas ações de cabeçalho. 5. **Refatoração do `RecruitmentView.tsx`**: As abas superiores da tela principal ("Candidatos & Pipeline" e "Gestão de Vagas") agora utilizam o componente `<Tabs />`.
- Arquitetura 100% aderente ao Design System, zero duplicação de lógica de abas nos modais e botões de ícone unificados em toda a plataforma.
✨Feature / UX / Central de Templates WhatsApp
Integração direta de todos os pontos de contato telefônico do painel com o modal de mensagens e templates: 1. **Clique no Telefone da Tabela (`CandidateContactCell.tsx`)**: Ao clicar no número do candidato, abre diretamente o modal com os templates oficiais do WhatsApp pré-carregados e personalizados (`{nome}`, `{vaga}`, `{protocolo}`). 2. **Clique no WhatsApp do Kanban (`RecruitmentView.tsx`)**: No rodapé de cada card do Kanban, o link "WhatsApp" agora aciona a Central de Templates com o candidato em contexto. 3. **Clique no WhatsApp do Modal de Detalhes (`CandidateDetailsModal.tsx`)**: O número de telefone no painel de dados agora também redireciona para a seleção de templates.
- Experiência unificada onde qualquer clique de WhatsApp leva o recrutador diretamente para a seleção de templates com mensagens pré-formatadas para disparo.
🔧Correção / 🎨 UI & UX / Posicionamento Inteligente (Smart Flip)
Implementação de posicionamento inteligente com detecção de colisão de borda de tela (*Smart Flip Positioning*) para todos os menus suspensos e modais flutuantes: 1. **Menu de Ações (`ActionMenu.tsx`)**: Calcula a distância da linha em relação à borda inferior da tela. Se a linha estiver no final da tabela/viewport e o menu não couber abaixo, o menu inverte dinamicamente e abre **para cima** (`translateY(-100%)`), permanecendo 100% visível. 2. **Seletor de Colunas e Filtros (`DataViewToolbar.tsx` e `RecruitmentView.tsx`)**: Adicionada a mesma lógica de *Smart Flip* com rolagem segura (`max-height: calc(100vh - 24px)`) para evitar cortes em telas menores.
- Menus de ação das últimas linhas da tabela nunca mais são cortados ou escondidos pela borda inferior da tela.
📎Carga de Dados / Integração de Anexos
Vinculação dos anexos de currículos mapeados no manifesto (`source/curriculos/manifesto_curriculos.json`): 1. **Atalhos Diretos do Outlook Web**: Vinculados os links diretos de download/popout dos 9 anexos de currículos aos respectivos candidatos no Supabase. 2. **Acesso Imediato no Painel**: Ao clicar no botão **"CV"** na tabela ou **"Abrir Documento"** no modal de detalhes, o anexo original é aberto instantaneamente para visualização pelo time de RH.
- Candidatos agora possuem acesso direto e instantâneo aos seus currículos originais no painel.
🔧Correção / 🎨 UI & UX / 📥 Carga de Dados
Ajustes finos na interface do módulo de recrutamento e importação do histórico legado de candidatos: 1. **Filtros de Coluna sem Borda**: Removida a borda dos ícones de filtro nos cabeçalhos de "Vaga" e "Status" na tabela para um visual mais limpo e minimalista. 2. **Seleção Automática de Etapas via Menu de Ações**: Sincronização via `useEffect` no modal `CandidateStageModal`, garantindo que os botões rápidos do menu de ações ("Convidar para Entrevista", "Aprovar Candidato", "Reprovar Candidato") pré-selecionem automaticamente o status correspondente no formulário. 3. **Dropdown de Seleção de Colunas Imune a Sobreposição (`createPortal`)**: O menu de visibilidade de colunas agora utiliza `createPortal(..., document.body)` com `zIndex: 9999`, garantindo que nenhuma tabela, efeito de desfoque ou container irmão sobreponha o menu. 4. **Importação e Enriquecimento dos Candidatos Legados**: Inseridos e atualizados no Supabase os 11 candidatos recebidos por e-mail armazenados em `source/candidatos.json`, com protocolos originais, telefones reais formatados (WhatsApp) e datas históricas de recebimento registradas.
- Menus e dropdowns 100% livres de sobreposição, transição de etapas fluida e base de candidatos totalmente restaurada com telefones e histórico reais.
🏗️Design System & UI Pura / 🛡️ Regra de Cascas Visuais Agnósticas
Aplicação do **Princípio da Casca Visual Agnóstica** e consolidação de primitivos reutilizáveis: 1. **Regra de Engenharia Mestre (Seção 4.E)**: Adicionada diretriz obrigatória que proíbe cascas visuais por entidade e exige injeção de slots em primitivos de UI pura. 2. **`KanbanCard` (`src/components/ui/DataKanban/KanbanCard.tsx`)**: Primitivo genérico de card para qualquer quadro Kanban do sistema (Recrutamento, Eventos, Cotações, Leads). 3. **`Badge` (`src/components/ui/Badge/`)**: Componente semântico genérico para status, departamentos e categorias. 4. **`ActionMenu` (`src/components/ui/ActionMenu/`)**: Menu flutuante universal (`fixed z-50`) com cálculo de viewport e encerramento ao clicar fora. 5. **Remoção de Código Redundante**: Exclusão de `CandidateKanbanCard.tsx`, refatoração de `CandidateStatusBadge.tsx`, `CandidateActionCell.tsx` e `JobPositionsManager.tsx` para consumir os novos primitivos.
- Eliminação total de cascas visuais acopladas a entidades e reutilização de 100% dos componentes atômicos em todos os módulos.
🏗️Refatoração Arquitetural / ✨ Clean Code & Design System
Refatoração estrutural completa do módulo de **Recrutamento** para aderência de 100% às novas diretrizes de engenharia do projeto: 1. **Camada de UI Pura (`src/components/ui/`)**: Criação de componentes 100% genéricos, agnósticos e parametrizados por tipo `<TData>`: - `DataTable<TData>`: Tabela genérica orientada a esquema de colunas com ordenação, filtros e visibilidade dinâmica. - `DataKanban<TData>`: Quadro Kanban desacoplado com renderização customizada de cards. - `DataViewToolbar`: Barra de ferramentas genérica para busca, alternador de visualização e colunas. - `Modal`: Contêiner genérico de modais com blur reduzido e controles de cabeçalho. 2. **Camada de Feature / Domínio (`src/features/recrutamento/`)**: - `useCandidates`: Hook customizado para gerenciamento de estado, paginação, filtros, mutações e chamadas de API. - `CandidateTableColumns`: Esquema de dados declarativo (`ColumnDef<JobApplication>[]`). - Células atômicas com padrão *Events Up* (`CandidateActionCell`, `CandidateContactCell`, `CandidateResumeCell`, `CandidateStatusBadge`). - Modais dedicados desacoplados (`CandidateDetailsModal`, `CandidateStageModal`, `CandidateMessageModal`). - `RecruitmentView`: Container orquestrador da tela. 3. **Página Enxuta**: `src/app/admin/candidatos/page.tsx` reduzida a um entrypoint limpo que apenas renderiza `<RecruitmentView />`. 4. **Tokens Semânticos de Tema**: Adicionadas variáveis de estado no `@theme` do `globals.css` (`--color-status-received`, `--color-status-analyzing`, `--color-status-interview`, `--color-status-approved`, `--color-status-rejected`).
- Arquitetura 100% modular, desacoplada, fortemente tipada e com zero componentes inline.
🔧Correção / 🎨 UI & UX
Ajuste definitivo no posicionamento dos dropdowns flutuantes da tabela de candidatos: 1. **Dropdowns de Filtro de Vagas e Status Flutuantes (`fixed z-50`)**: Migração do posicionamento absoluto interno do `<th>` para posicionamento fixo (`fixed`) calculado via `getBoundingClientRect()`, escapando completamente do container com `overflow-x-auto` da tabela e impedindo que o menu fique oculto atrás das linhas da tabela. 2. **Dropdown de Seleção de Colunas Flutuante (`fixed z-50`)**: Posicionado de forma fixa sobre a barra de ferramentas e a tabela. 3. **Coluna de Ações Fixa e Incondicional**: Coluna de ações mantida permanentemente acessível à direita da tabela.
- Dropdowns de filtro e colunas abrem 100% livres e desimpedidos por cima de qualquer elemento ou rolagem da tabela.
✨Feature / Segurança / Arquitetura Next.js 16 / Multi-Eventos
Implementação da **Central Administrativa Unificada com Supabase Auth** e do módulo de **Gestão Multi-Eventos** (`/admin/eventos`), incorporando os conectores e o painel de convidados do **THE ONE 360°** (`theone360`). A interceptação e proteção de rotas foi arquitetada em conformidade estrita com o padrão oficial do **Next.js 16 (Turbopack)** via `src/proxy.ts` (substituindo a convenção legada de `middleware.ts`).
- Central Administrativa 100% operacional, protegida por Supabase Auth, com gestão de eventos (THE ONE 360°), módulo completo de gestão de candidaturas de RH e recuperação de histórico de candidaturas anteriores.
🔧Correção / 🎨 UI & UX
Ajuste nas camadas visuais e comportamento de sobreposição de menus na tabela de candidatos: 1. **Menu de Ações Flutuante (`fixed z-50`)**: Posicionado via coordenadas de viewport para flutuar livremente acima da tabela e do scroll horizontal, eliminando qualquer corte (`overflow-hidden` / `overflow-x-auto`). 2. **Elevação do Dropdown de Colunas (`z-50`)**: Correção do empilhamento (`stacking context`) no seletor de colunas ativas para não ficar sob a tabela. 3. **Filtros Multi-Select nos Cabeçalhos**: Substituição dos dropdowns nativos por botões compactos com ícone `<Filter />` que abrem popovers multi-select com checkboxes para **Vagas** e **Status**, permitindo selecionar múltiplos filtros simultaneamente com suporte a limpeza rápida.
- Navegação fluida, menus totalmente visíveis sem cortes e filtros multi-seleção modernos e intuitivos.
✨Feature / UI / Arquitetura & Workflow
Implementação completa da reestruturação do módulo de **Recrutamento** (`/admin/candidatos`), incluindo visualização híbrida (Tabela Dinâmica e Quadro Kanban), seletor de colunas visíveis, filtros inline nos cabeçalhos, ordenação interativa, menu de ações por linha, histórico de transições de etapa com parecer obrigatório, aba integrada para publicação de vagas no **Sanity Studio** e uma nova **Central de Templates de Mensagens** (`/admin/templates`) com suporte a variáveis dinâmicas e disparos via **E-mail (Microsoft Graph)** e **WhatsApp**.
- Módulo de Recrutamento completo, profissional e integrado, com gestão ágil de vagas, controle rigoroso de etapas por parecer e disparos multicanal com templates.
✨Feature / Módulo Completo / Sanity / Wizard UI
Criação do módulo completo **Trabalhe Conosco & Carreiras** na plataforma The One Seguros. O módulo possibilita a exibição e cadastro de vagas de emprego no Sanity Studio, visualização detalhada da vaga e formulário de candidatura multietapas com o **mesmo layout e UX do Wizard de Cotação** (`WizardForm.tsx`), com suporte a upload de currículo (PDF/DOCX) via Supabase Storage, gravação no banco de dados e notificação de candidatura por e-mail para a equipe de RH (`vagas@theoneseguros.com.br`) via Microsoft Graph API.
- Módulo Trabalhe Conosco 100% integrado ao Sanity Studio, Supabase e Microsoft Graph API, oferecendo uma experiência de candidatura rápida, elegante e totalmente responsiva.
✨Feature / UI / CMS / Embeds
Implementação do **Suporte NATIVO a Embeds de Sites e Redes Sociais** (Instagram Posts, Reels, Stories, vídeos do YouTube e iFrames genéricos) no leitor de artigos ([PortableTextRenderer.tsx](file:///c:/Projetos/site/src/components/PortableTextRenderer.tsx)) e no Sanity Studio ([articleType.ts](file:///c:/Projetos/site/src/sanity/schemaTypes/articleType.ts)). Agora é possível incorporar postagens e vídeos diretamente dentro dos artigos com tratamento responsivo, proporções configuráveis (`1:1` quadrado, `9/16` vertical reels/stories, `16/9` horizontal youtube/web) e botões de atalho com link direto para abrir na rede original.
- Artigos podem exibir postagens e Reels do Instagram, vídeos do YouTube e páginas integradas no meio do texto com design responsivo e refinado.
🔧Correção / Schema / UI
Ajuste no JSON Schema de validação ([article-output.schema.json](file:///c:/Projetos/site/.agents/skills/artigo-the-one/schemas/article-output.schema.json)) e no renderizador ([PortableTextRenderer.tsx](file:///c:/Projetos/site/src/components/PortableTextRenderer.tsx)) para permitir **links inline em parágrafos de texto**. Anteriormente, o schema restringia o array de `marks` do span a um enum fechado `["strong", "em", "code"]`, rejeitando qualquer `_key` de link declarado em `markDefs` (ex: `link-1`). O schema agora aceita chaves dinâmicas em `marks` e o `PortableTextRenderer` cruza as chaves dos spans com `markDefs`, renderizando os hiperlinks inline com estilo dourado e sublinhado (`<a href="..." target="_blank">`).
- Artigos com links no meio de parágrafos para portais oficiais (BCB, Planalto, ABAC, IBGE) passam 100% na validação de schema. - Hiperlinks inline são renderizados com estilo acessível e de destaque visual no leitor de artigos.
🎨Feature / Automação / Fallback IA
Atualização da skill `artigo-the-one` ([SKILL.md](file:///c:/Projetos/site/.agents/skills/artigo-the-one/SKILL.md)) adicionando a regra de **Fallback em Vetor SVG** como última alternativa para IAs que não possuem ferramentas nativas de geração de imagem bitmap (ex: **Claude** no Claude.ai ou LLMs sem DALL-E/Midjourney integrados). Quando não houver alternativa para gerar imagem raster, a IA cria um arquivo SVG vetorial (`viewBox="0 0 1600 900"`) com a paleta oficial da marca (Azul Marinho e Dourado), salva em `public/media/artigos/{slug}.svg` ou envia ao Supabase Storage CDN com `contentType: "image/svg+xml"`.
- Suporte total ao Claude e a assistentes de IA que só conseguem gerar código SVG, garantindo que o artigo sempre saia com uma capa pronta de alto padrão.
🔧Correção / Schema / UI
Suporte nativo ao bloco de fontes e referências oficiais (`_type: "reference"` / `_type: "officialReference"`) no Sanity Schema e no renderizador de Portable Text. Resolve o aviso *"Invalid Portable Text value: Block of type reference is not allowed by the schema"*. Os blocos de legislação, normas da SUSEP/ANS e citações legais agora são aceitos sem warnings no Sanity Studio e renderizados no leitor ([PortableTextRenderer.tsx](file:///c:/Projetos/site/src/components/PortableTextRenderer.tsx)) com um card estilizado com ícone de livro/lei, tipo de fonte, título, vigência e botão de atalho "Acessar Fonte".
- Eliminação de alertas de schema no Sanity Studio ao importar artigos com referências regulatórias ou leis (ex: Código Civil). - Destaque visual elegante para embasamentos legais nos artigos da The One Seguros.
✨Feature / UI / Schema
Implementação do campo opcional **"Revisado por" (`reviewedBy`)** em todos os artigos. O campo permite declarar o especialista ou consultor responsável pela revisão técnica do conteúdo (ex: "Rodrigo Motta"). Foi adicionado ao Sanity Schema ([articleType.ts](file:///c:/Projetos/site/src/sanity/schemaTypes/articleType.ts)), às consultas GROQ ([articles.ts](file:///c:/Projetos/site/src/lib/articles.ts)), às rotas de importação em lote e renderizado no leitor ([page.tsx](file:///c:/Projetos/site/src/app/(site)/artigos/[slug]/page.tsx)) ao lado do autor com selo de verificação visual (`CheckCircle2`). **Quando o campo está em branco ou omitido no JSON, ele é completamente oculto do layout.**
- Maior autoridade e rigor técnico para artigos revisados por especialistas da The One Seguros. - Zero impacto visual em artigos antigos ou não revisados (permanecem exibindo apenas o autor).
🎯Feature / UX / Automação
Reescrita completa do fluxo interativo da skill `artigo-the-one` ([SKILL.md](file:///c:/Projetos/site/.agents/skills/artigo-the-one/SKILL.md)) para integrar a metodologia da skill `grilling` (árvore de decisão com rodadas progressivas de perguntas fechadas + recomendação). O agente agora tem **liberdade total** para formular as perguntas que julgar necessárias (não uma lista fixa), com checkpoints obrigatórios de decisão mínima. Na Etapa 2, o agente propõe 3 conceitos visuais de capa e **gera 2 imagens reais** para aprovação visual antes da redação.
- Entrevista de alinhamento mais natural, completa e adaptável ao contexto de cada artigo. - Validação visual real das capas antes da redação, eliminando retrabalho.
✨Feature / Automação / UX
Integração do fluxo interativo de alinhamento (estilo `grill-me`) na skill de geração de artigos ([SKILL.md](file:///c:/Projetos/site/skills/artigo-the-one/SKILL.md)). O agente agora executa um processo estruturado em 3 etapas: (1) Entrevista inicial de alinhamento sobre a pauta e público; (2) Apresentação prévia de **3 opções de Títulos/Subtítulos** e **2 Conceitos visuais de Capa** para aprovação do usuário; (3) Geração da imagem aprovada, upload automático no Supabase Storage CDN e redação do artigo em Portable Text com entrega do JSON.
- Controle total do usuário sobre a linha editorial, títulos e estética das capas antes da geração completa do conteúdo.
✨Feature / Automação / Schema
Atualização da skill `artigo-the-one` ([SKILL.md](file:///c:/Projetos/site/skills/artigo-the-one/SKILL.md)) para suporte condicional de geração de imagem de capa: quando executado em ambiente com suporte a ferramentas (`generate_image`), a imagem é gerada e salva em `public/media/artigos/{slug}.png` com atribuição automática do atributo `imageUrl` no JSON. Em ambientes sem ferramentas ou uso por usuários finais em chat externo, o briefing completo de imagem é entregue no JSON. Suporte nativo ao campo `coverImageUrl` adicionado no Sanity Schema ([articleType.ts](file:///c:/Projetos/site/src/sanity/schemaTypes/articleType.ts)) e nas rotas de importação.
- Integração perfeita entre o gerador de artigos IA, salvamento local de imagens e publicação via importador `/subir-artigos`.
✨UX / Refatoração
Transformação do componente `ArticleCard.tsx` para que a área inteira do cartão seja interativa e clicável como um único link do Next.js (`<Link href="...">`), eliminando a necessidade do usuário precisar clicar especificamente no título ou no texto do rodapé.
- Navegação mais intuitiva e agradável para usuários em dispositivos móveis e desktop.
✨Feature / UI
Implementação de sistema de paginação server-side na Central Hub de Artigos (`/artigos`). Configurado limite de **9 artigos por página** (3 linhas completas de 3 cards), suporte a navegação por parâmetros na URL (`?categoria=...&pagina=2`), contador de itens ("Exibindo X a Y de Z artigos") e botões "Anterior", "Próxima" e numéricos atômicos.
- Navegação fluida em acervos grandes mantendo rápida velocidade de carregamento e suporte a SEO.
✨UX / Refatoração
Limitação da quantidade de artigos exibidos nas páginas institucionais das verticais (`/seguros`, `/consorcios` e `/saude`) aos **3 mais recentes** (`.slice(0, 3)`). Essa mudança deixa as páginas de produto enxutas, melhora a performance e dá um propósito claro ao botão **"Ver todos de [Categoria]"**, que direciona o usuário para a Central de Artigos completa em `/artigos?categoria=...`.
- Páginas de verticais mais rápidas e equilibradas visualmente. - O botão "Ver todos" agora cumpre sua função de direcionar para o acervo completo daquela categoria.
✨Feature / UX / Navegação
Implementação de **captura inteligente da rota de origem** no Cotador Multietapas ([WizardForm.tsx](file:///c:/Projetos/site/src/components/WizardForm.tsx)). Ao clicar no botão fechar (**X**), na opção **"Voltar para a página anterior"** da Etapa 1 ou na tela de conclusão de cotação, o formulário direciona o usuário de volta à rota de onde ele veio (ex: `/seguros`, `/consorcios`, `/saude`, `/artigos/[slug]`), em vez de forçar um retorno fixo para a home `/`.
- Experiência de navegação sem fricção: o usuário retorna exatamente para a página ou artigo em que estava antes de iniciar a cotação.
🔑Integração / Autenticação
Atualizado o utilitário `writeClient` ([src/sanity/client.ts](file:///c:/Projetos/site/src/sanity/client.ts)) e os scripts do importador para priorizarem o token com permissão de escrita `SANITY_API_WRITE_TOKEN`, mantendo fallback para `SANITY_API_READ_TOKEN`.
- Suporte nativo ao token de escrita de nível Editor no Sanity CMS para importação imediata via painel `/subir-artigos` ou CLI.
✨Feature / Admin / UI
Criação da rota restrita de administração `/subir-artigos` e do backend de publicação em lote (`/api/artigos/import`). A ferramenta permite selecionar ou arrastar múltiplos arquivos JSON com artigos formatados em Portable Text, exibe uma pré-visualização rica dos cartões (título, subtítulo, resumo, quantidade de palavras e tags) e publica tudo no Sanity CMS com 1 clique.
- Publicação de novos artigos em massa sem necessidade de digitação ou preenchimento de formulários manuais.
✨Feature / Infraestrutura / Storage / IA
Integração oficial do **Supabase** no ecossistema da **The One Seguros**, fornecendo infraestrutura para armazenamento de imagens de artigos em CDN pública de alta performance (Supabase Storage Bucket `artigos`), cliente de servidor (`supabaseAdmin`) e cliente público (`supabase`), além de preparar a base para autenticação (Supabase Auth) e futuras tabelas de banco de dados.
- Armazenamento em CDN global de alta velocidade para imagens de artigos. - Fluxo de trabalho automatizado para IAs: Geração de Imagem -> Upload no Supabase -> Injeção de URL da CDN no JSON -> Exibição imediata no Sanity e no site. - Fundação completa pronta para autenticação e tabelas no Supabase.
🔧Correção / UI
Ajuste da classe utilitária de largura máxima no componente de breadcrumbs da rota leitora de artigos (`src/app/(site)/artigos/[slug]/page.tsx`), substituindo a sintaxe arbitrária `max-w-[200px]` pelo padrão nativo do Tailwind CSS v4 `max-w-50`.
- Eliminação do alerta de sintaxe e total conformidade com as regras do Tailwind CSS v4.
✨Feature / SEO / UI
Criação e implementação completa da Central de Artigos & Conhecimento Tecnológico e das 3 novas rotas dedicadas por vertical de negócio: **Seguros** (`/seguros`), **Consórcios** (`/consorcios`) e **Planos de Saúde** (`/saude`). A estrutura conta com integração ao Sanity Studio (`articleType`), leitor de PortableText com estilização em Tailwind v4, cartões de conversão final para o simulador `/cotacao`, navegação por categorias, metadados de SEO avançado (Open Graph, Twitter Cards, `metadataBase`) e dados estruturados Schema.org (`BlogPosting`) em Português (`pt-BR`).
- Portal educativo e de autoridade técnica pronto para atração orgânica de clientes via SEO. - Experiência completa com navegação por categorias e conversão direta para o cotador multietapas.
🎨UI / Tipografia
Aplicação da fonte proprietária institucional `Brave Eightyone` (`/fonts/BRAVEEightyone-Regular.ttf`) ao texto "Simular Agora" do CTA flutuante, reforçando a identidade tipográfica oficial da marca.
- Alinhamento da tipografia institucional no botão flutuante de cotação.
🎨UI / Ajuste
Refinamento das dimensões do botão CTA flutuante para um formato mais compacto (`px-4 py-2`), substituição do ícone de estrela pela logo simplificada da empresa (`/media/logos/logo-simple.webp` em 20x20px) e simplificação do texto para "SIMULAR AGORA", adequando-se universalmente a todos os produtos de seguros, saúde e consórcios.
- Botão mais discreto, leve e perfeitamente harmonizado com o favicon e a identidade visual do site.
✨Feature / UI
Criação do componente de CTA Flutuante Pílula (`FloatingCta.tsx`) para direcionar o usuário diretamente para o simulador online em `/cotacao`. O botão fica centralizado na parte inferior da tela com efeito glassmorphism (fundo escuro translúcido e borda dourada), aparecendo com animação suave (*Fade In + Slide Up*) apenas quando o usuário rolar a página pelas seções intermediárias, ocultando-se no topo (seção Hero) e no rodapé (Footer).
- Elemento de chamada para ação elegante, acessível e não intrusivo. - Aumento da taxa de conversão sem poluição visual no topo e no footer.
🔗UI / Integração
Atualização do link do ícone do Google no rodapé para apontar diretamente para a caixa modal de avaliação de 5 estrelas do Google Meu Negócio (`https://www.google.com/search?q=the+one+seguros#lrd=0xa6c3000f850d15:0x786f23efbe5a9704,3`), facilitando o envio imediato de feedback pelos clientes.
- Ao clicar no botão do Google no rodapé, o visitante é direcionado diretamente para a janela pop-up de avaliação da The One Seguros no Google.
📋Regra de Projeto / Governança
Inclusão da Regra 6 nos arquivos de diretrizes do agente (`CLAUDE.md` e `AGENTS.md`). A diretriz obriga a aplicação contínua dos padrões de SEO, Open Graph, Twitter Cards, URLs Canônicas e Dados Estruturados Schema.org em Português (`pt-BR`) para todas as novas páginas/rotas públicas criadas no projeto.
- Garantia de que qualquer nova página desenvolvida no futuro pelo assistente atenda rigorosamente aos critérios de SEO, compartilhamento social e marcação estruturada.
✨Feature
Expansão da cobertura geográfica de atendimento para todo o território nacional (`areaServed: Brasil / BR`), inclusão de todos os 6 domínios do ecossistema The One (`theonenegocios.com.br`, `theonesolucoes.com.br`, `theonelegacy.com.br`, `theoneconsorcios.com.br`, `theonevida.com.br`, `theone360.com.br`) no parâmetro `sameAs` do Schema.org para unificação da autoridade de marca, e inclusão antecipada da vertical de **Planos de Saúde & Saúde Corporativa/Individual** e **Financiamentos & Crédito Imobiliário** no catálogo de serviços para indexação prévia no lançamento da nova marca.
- Consolidação da autoridade de marca do ecossistema The One no algoritmo do Google através do vínculo dos 6 domínios secundários. - Indexação prévia no Google para pesquisas de "Planos de Saúde", "Seguro Saúde", "Financiamentos" e "Crédito Imobiliário" preparando o terreno para o lançamento da marca esta semana. - Posicionamento de atendimento em todo o Brasil.
✨Feature
Expansão do objeto de dados estruturados Schema.org JSON-LD para um grafo de conhecimento interconectado (`@graph`). Incorporação das marcações simultâneas de `InsuranceAgency`, `FinancialService`, `WebSite`, `OfferCatalog` com a listagem detalhada dos serviços de seguros e consórcios em Português do Brasil, raio de atuação (`areaServed`: Betim, Belo Horizonte, Contagem, MG) e horário de atendimento.
- Indexação máxima no Google para pesquisas regionais e institucionais em Português ("corretora de seguros Betim", "seguro auto", "consórcio imobiliário"). - Reconhecimento dos serviços específicos do catálogo diretamente no painel de conhecimento do Google.
✨Feature
Implementação completa de otimizações de SEO avançado, dados estruturados (JSON-LD) e cartões de visualização social (Open Graph, Twitter Cards e WhatsApp Link Preview) para todas as rotas da aplicação. Criação do arquivo Web App Manifest (`site.webmanifest`) para suporte a PWA e favoritos em dispositivos móveis.
- Pré-visualização rica de links ao compartilhar no WhatsApp, Instagram, LinkedIn, Facebook e X (Twitter), com título, descrição e imagem de banner oficial. - Indexação otimizada no Google Search Engine com Schema.org JSON-LD para agência de seguros. - Suporte a instalação como Web App em dispositivos móveis.
✨Feature
Adição do campo `order` ("Ordem de Exibição") no schema de sócios no Sanity Studio (`memberType.ts`) e atualização da consulta GROQ em `page.tsx` para ordenar os cards numericamente (`order asc, _createdAt asc`). Permite ao cliente definir a sequência exata de apresentação dos sócios na Landing Page.
- Controle de ordem dos sócios editável diretamente pelo Sanity Studio (`/studio`).
🧹Refatoração / Limpeza
Remoção completa do layout alternativo de foto única compartilhada (`socios.jpeg`), eliminação do estado `layoutMode` e remoção do botão flutuante de alternância. A seção "Quem Somos" retornou ao padrão definitivo de **dois cards individuais**, preservando 100% da integração com o Sanity CMS (fotos, nomes, cargos e biografias dos sócios) e mantendo as classes responsivas do Tailwind CSS v4.
- Código-fonte limpo e sem redundâncias. - Padrão definitivo de 2 cards individuais estabelecido para os sócios. - Dados alimentados dinamicamente via Sanity CMS preservados.
🔑Integração / Validação
Homologação e validação com **sucesso de 100%** do fluxo de autenticação OAuth2 no Microsoft Entra ID (Azure AD) e disparo de e-mails transacionais com relatórios PDF em anexo via **Microsoft Graph API REST** (`POST /users/cotacao@theoneseguros.com.br/sendMail`).
- Autenticação OAuth2 no tenant da Microsoft 365 homologada com sucesso. - E-mails de notificação comercial com PDF anexo e e-mails de confirmação para o cliente prontos para produção.
✨Feature
Implementação da geração automática de Relatório PDF executivo em memória (`PDFKit`) e envio transacional de e-mails via **Microsoft Graph API (Office 365 / Exchange)** para o comercial (`cotacao@theoneseguros.com.br`) com o PDF anexo, além de e-mail de confirmação elegante ao cliente. Integração efetuada no Wizard e no Formulário da Landing Page.
- Todas as solicitações de cotação geram um relatório PDF executivo em memória. - E-mail com PDF anexo enviado para `cotacao@theoneseguros.com.br`. - E-mail de confirmação institucional enviado para o cliente. - Integração nativa com o Microsoft 365 / Exchange.
✨Feature
Inclusão do suporte ao parâmetro de URL `?dev=true` (ou modo de desenvolvimento) na rota `/novidades`. Por padrão, o público geral visualiza a linha do tempo limpa com novidades de produtos e UI. Ao acessar com `?dev=true` (ou ambiente dev local), a página desativa o filtro de segurança e exibe inclusive os patch notes técnicos armazenados em `patch-notes/protected/`.
- Usuários normais enxergam uma linha do tempo amigável e limpa. - Desenvolvedores podem visualizar todos os patch notes (inclusive arquivos técnicos e infraestrutura de dev) adicionando `?dev=true` na URL.
✨Feature
Implementação da rota de Novidades (`/novidades`) com linha do tempo interativa dos updates da plataforma, filtrando e ignorando patch notes técnicos restritos ao desenvolvedor (armazenados em `patch-notes/protected/`). Inclusão dos schemas `privacyPolicyType` e `termsOfUseType` no Sanity Studio para gerenciamento dos textos legais, com a criação das rotas `/politica-de-privacidade` e `/termos-de-uso`. Reorganização dos assets de fontes (`public/fonts/`) e logotipos (`public/media/logos/logo-simple.webp` e `public/media/logos/logo.png`).
- Linha do tempo de novidades em `/novidades` com filtragem automática de notas técnicas de desenvolvimento. - Textos legais de Política de Privacidade e Termos de Uso 100% gerenciáveis pelo Sanity Studio. - Estrutura de arquivos limpa com fontes em `public/fonts` e logos em `public/media/logos`.
✨Feature
Remoção da restrição de ambiente de desenvolvimento (`isDev`) do botão de alternar layout na seção "Quem Somos". O botão de alternância entre "Dois Cards" e "Card Único" agora está disponível publicamente para todos os usuários.
- Botão de alternância de visual da seção de sócios totalmente acessível no site em ambiente de produção.
🔧Correção
Atualização de sintaxe das classes utilitárias do Tailwind CSS no componente `TeamCarousel.tsx` para seguir o padrão da versão 4, eliminando todos os avisos do linter (substituição de sintaxe arbitrária `min-h-[px]`, `bg-gradient-to-b`, `z-[n]` e `bg-[center_15%]` por `min-h-120`/`140`/`180`, `bg-linear-to-b`, `z-1`/`z-2` e `bg-position-[center_15%]`).
- Eliminação total dos avisos de linting no arquivo `TeamCarousel.tsx`. - Código padronizado com as convenções mais recentes do Tailwind v4.
🎨Feature
Implementação de layout alternativo para a seção "Quem Somos" (sócios). A versão atual com dois cards individuais foi preservada, e uma nova versão com card único utilizando a foto conjunta dos sócios (`socios.jpeg`) foi adicionada. Um botão de toggle em modo dev (visível apenas em `NODE_ENV === 'development'`) permite alternar entre as duas versões para validação antes da adoção definitiva. **Motivação:** Solicitação de um dos sócios para unificar a apresentação em um único card com foto conjunta.
- Versão com dois cards (padrão) funciona exatamente como antes - Nova versão com card único disponível via toggle em modo dev - Botão de toggle **não aparece** em build de produção - Layout responsivo: em mobile as bios empilham verticalmente, em desktop ficam lado a lado
🔧Correção
Correção de bug crítico no drawer mobile do header. O menu abria corretamente no topo da página, mas ao rolar para baixo e tentar abrir, o drawer ficava "condensado" mostrando apenas os botões CTA do rodapé. A causa raiz era que o Backdrop e o Mobile Drawer estavam renderizados como filhos do `<header>` (que é `fixed` com altura limitada `h-20`/`h-24`). Navegadores mobile tratavam o overflow do pai de forma diferente quando havia scroll.
- Drawer mobile abre corretamente em qualquer posição de scroll da página. - Z-index hierárquico garante sobreposição consistente.
✨Feature
Reestruturação completa do Header: remoção do botão "Falar Conosco", alinhamento do menu à direita, inclusão do item "Simular" com dropdown personalizado (sub-itens editáveis via Sanity CMS). Integração com o novo campo `headerNavigation` no Sanity Studio.
- Menu do header totalmente gerenciável via Sanity Studio. - Dropdown "Simular" direciona para o wizard de cotação com tipo pré-selecionado. - Layout do menu alinhado à direita para melhor hierarquia visual.
🔧Correção
Correção do hover do botão opcional nos cards de Soluções. O texto ficava dourado sobre fundo dourado ao passar o mouse, tornando-o invisível. A classe base `text-gold` prevalecia na especificidade do Tailwind sobre o `hover:text-white`.
- Texto do botão alterna nitidamente para branco ao passar o mouse, destacando-se sobre o fundo dourado.
✨Feature
Inclusão de botão opcional no final de cada card de Soluções. Texto e link editáveis via Sanity CMS. Estilo "terceira variante" de botão: fundo dourado translúcido com texto dourado, preenchimento sólido e texto branco no hover.
- Botões opcionais nos cards de Soluções com estilo premium dourado. - Gerenciamento de texto e link via Sanity Studio.
✨Feature
Grid da seção de Soluções & Consórcios tornado 100% dinâmico e auto-adaptável. Ao adicionar ou excluir categorias no Sanity Studio, o layout reorganiza automaticamente as colunas com limite máximo de 4.
- Grid se reorganiza automaticamente sem "buracos" visuais ao alterar a quantidade de categorias.
✨Feature
Criação do botão flutuante (FAB - Floating Action Button) do WhatsApp. Posicionado fixo no canto inferior direito, acompanha a rolagem da tela com animação sutil de pulso e tooltip ao hover.
- Botão de WhatsApp sempre visível durante a navegação. - Animação de pulso atrai atenção do visitante sem ser invasiva. - Tooltip informa a ação antes do clique.
✨Feature
Inclusão da logo da The One no topo da página de cotação (entre botão "Voltar" e contador de etapas), adição de botão "X" para cancelar e retornar à landing page, e cards da primeira tela (segmentos) tornados editáveis via Sanity Studio.
- Logo visível no topo da cotação para reforço de marca. - Botão X para cancelamento rápido e retorno à landing page. - Primeira tela do wizard totalmente editável via Sanity Studio.
🔧Correção
Correção do erro `Missing <html> and <body> tags in the root layout` na rota `/cotacao`. No Next.js App Router, rotas fora do grupo `(site)` precisam de seu próprio layout raiz com tags `<html>` e `<body>`.
- Erro de runtime resolvido. Todas as rotas (`/`, `/cotacao`, `/studio`, `/api/cotacao`) compilam sem erros.
✨Feature
Criação do formulário multietapas (Wizard) avançado em rota dedicada `/cotacao`. Layout imersivo em fundo escuro premium sem Header/Footer. Fluxo condicional por árvore de produtos com 5 etapas e preenchimento automático via query params.
- Wizard avançado funcional com fluxo condicional e preenchimento automático via landing page. - Todas as etapas, perguntas e configurações gerenciáveis no Sanity Studio. - Endpoint de API pronto para integração com motor de cotação.
✨Feature
Seção Diferenciais mapeada para o Sanity CMS com schema dedicado. Cards de diferenciais são gerenciáveis via Studio com título, descrição, ícone (campo texto livre referenciando lucide.dev/icons) e ordem de exibição. Grid dinâmico auto-adaptável.
- Seção Diferenciais 100% editável via Sanity Studio. - Grid se adapta automaticamente à quantidade de cards cadastrados. - Qualquer ícone do Lucide pode ser utilizado via nome no campo texto.
✨Feature
Campo "Solução de Interesse" do formulário de contato tornado gerenciável via Sanity CMS. Opções do menu suspenso e textos da mensagem de sucesso (pós-envio) agora são editáveis no Sanity Studio, na aba `6. Formulário & Cotação`.
- Opções do formulário gerenciáveis diretamente pelo Sanity Studio. - Mensagem de sucesso personalizável sem editar código.
🔧Correção
Correção da responsividade do header em telas pequenas. Logo, menu e botões de ação estavam sobrepostos em smartphones de tela estreita (360px-390px).
- Header responsivo sem sobreposição em dispositivos móveis estreitos.
✨Feature
Publicação em massa de todas as 15 seguradoras parceiras via script automatizado (`seed-sanity.mjs`). Upload automático das logos para a CDN do Sanity e criação dos documentos de parceiros.
- 15 seguradoras parceiras cadastradas automaticamente no Sanity Studio em segundos. - Carrossel de parceiros alimentado em tempo real pelo CMS.
🎨UI
Simplificação da seção "Quem Somos": remoção de textos institucionais longos (Missão, Visão, Valores), mantendo apenas o título e os cards dos sócios lado a lado, estáticos (sem carrossel/transição).
- Seção limpa e focada nos perfis dos sócios sem distrações textuais.
🎨UI
Padronização da cor do ícone do WhatsApp no rodapé para dourado, alinhando-o visualmente com os ícones do Instagram e Google que já estavam em dourado.
- Todos os ícones de redes sociais no rodapé seguem o mesmo padrão visual dourado.
✨Feature
Instalação da biblioteca `react-icons` e substituição dos ícones genéricos (câmera, estrela, balãozinho) pelos ícones oficiais das marcas no rodapé.
- Ícones oficiais de marca (Instagram, Google, WhatsApp) exibidos no rodapé.
🎨UI
Substituição da logo de imagem do header pela logo oficial atualizada `The-One-Proposta-LOGO.png` (com o texto "Seguros e Consórcios"). Tentativa intermediária de montagem via código (HTML/CSS com fonte BRAVEEightyone + ícone solo + linhas horizontais douradas) foi substituída pela imagem definitiva.
- Logo oficial atualizada exibida no cabeçalho do site.
🔧Correção
Correção definitiva do carrossel de sócios: remoção de botões de seta e dots, correção da transição automática (fade de 0.8s a cada 5s) e clique na área inteira do card para avançar.
- Carrossel automático funcional com fade suave e clique para avançar.
🎨UI
Redesign do carrossel de sócios: foto como background do card, texto em estilo citação (blockquote itálico com ícone de aspas), remoção de fundo/borda rígida, carrossel automático (5.5s) e clicável.
- Visual premium com foto imersiva e texto tipo citação profissional.
✨Feature
Transformação da área dos sócios em carrossel interativo, exibindo um sócio por vez com setas de navegação, dots indicadores e alternância automática a cada 7s. Fotos ampliadas de 90px para 150px.
- Carrossel funcional alternando perfis dos sócios automaticamente.
✨Feature
Criação do componente Footer com informações institucionais completas, links de redes sociais e dados de contato da The One Seguros.
- Rodapé funcional com todas as informações institucionais da empresa.
✨Feature
Criação do formulário de cotação interativo na seção inferior da landing page. Sistema dinâmico que coleta nome, e-mail, telefone, solução de interesse e mensagem, com botão acelerador para WhatsApp comercial.
- Formulário de contato funcional com fluxo de envio e redirecionamento WhatsApp.
🔧Correção
Restauração da tipografia e espaçamento do menu do header. A fonte de títulos pesada (`Russo One`) foi substituída por `Montserrat` (via Google Fonts) para corrigir quebras de layout e manter proporcionalidade.
- Menu do cabeçalho sem quebras de linha e com navegação fluida.
✨Feature
Criação do componente Header com efeito vidro flutuante, menu responsivo para desktop e mobile, atalhos de cotação e WhatsApp.
- Header funcional com navegação completa e efeitos visuais premium.
🎨UI
Remoção do card lateral "Seguro Auto Premium" da Hero Section e substituição por uma imagem de fundo gerada por IA focada em planejamento financeiro, família e proteção de ativos. Aplicada camada de gradiente escuro (`heroOverlay`) para legibilidade.
- Hero Section com visual genérico voltado para seguros e planejamento de vida (não mais exclusivamente auto). - Excelente legibilidade dos CTAs e textos sobre a imagem de fundo.
✨Feature
Criação da Hero Section da landing page com apresentação premium da corretora, CTAs de impacto (Simular Cotação e Falar com Especialista) e card de destaque.
- Seção de destaque funcional com chamadas para ação direcionando para cotação e WhatsApp.
🎨UI
Aumento do tamanho e visibilidade dos logotipos no carrossel de parceiros. Download de todas as 19 logos e imagens do site original para a pasta `public/media`, eliminando dependência de links externos.
- Logos maiores e mais visíveis no carrossel. - Projeto 100% autônomo sem dependência de links externos para imagens.
✨Feature
Criação do componente PartnerCarousel com carrossel infinito em CSS puro exibindo as logomarcas oficiais das seguradoras parceiras em escala de cinza (com cores sob hover).
- Carrossel de seguradoras parceiras funcional com animação contínua.
✨Feature
Adição do perfil de Luiz Otávio (Sócio Diretor) e inclusão de fotos executivas geradas por IA para ambos os sócios (Bruno Miranda e Luiz Otávio) na seção Sobre Nós.
- Ambos os sócios apresentados com fotos profissionais e bios detalhadas.
✨Feature
Criação da grade de Soluções na landing page com 3 categorias: "Para Você" (Auto, Residencial, Embarcações, Vida), "Para Empresas" (Empresarial, Garantia, Responsabilidade Civil, Saúde) e "Consórcios" (Imóveis, Automóveis, Pesados, Serviços).
- Seção de soluções funcional com apresentação visual premium dos serviços da corretora.
