import React, { useState, useMemo } from 'react'; import { CheckCircle2, Circle, Briefcase, Rocket, MonitorPlay, Megaphone, LayoutList } from 'lucide-react'; // Categorias e ícones para melhorar a UX const CATEGORIES = { 'Operacional & Financeiro': , 'Vendas & Comercial': , 'Produto & Tecnologia': , 'Marketing & Tráfego': }; // Lista de tarefas inicial baseada no rascunho const initialTasks = [ { id: 1, category: 'Operacional & Financeiro', text: 'Modelo de contrato', completed: false }, { id: 2, category: 'Operacional & Financeiro', text: 'Metodologia de cobrança (Asaas - Boleto / Pix)', completed: false }, { id: 3, category: 'Operacional & Financeiro', text: 'E-mail comercial administrativo@envise.com.br (verificar plano de hospedagem)', completed: false }, { id: 4, category: 'Vendas & Comercial', text: 'Proposta comercial (modelo do site - usar Claude/Gemini) e forma de apresentar', completed: false }, { id: 5, category: 'Vendas & Comercial', text: 'Estruturar serviços com precificação individual e com pacotes', completed: false }, { id: 6, category: 'Vendas & Comercial', text: 'Guia/Estrutura de reunião de fechamento (condução e possíveis demonstrações)', completed: false }, { id: 7, category: 'Vendas & Comercial', text: 'Briefing e roadmap base após fechamento', completed: false }, { id: 8, category: 'Produto & Tecnologia', text: 'Levantar custo de assinaturas ao cliente e diferenças das LLMs', completed: false }, { id: 9, category: 'Produto & Tecnologia', text: 'Testar Manychat para domínio e entendimento', completed: false }, { id: 10, category: 'Produto & Tecnologia', text: 'Testar criação de sites Gemini Canvas + Netlify', completed: false }, { id: 11, category: 'Marketing & Tráfego', text: 'Configuração BM Envise (Tráfego)', completed: false }, { id: 12, category: 'Marketing & Tráfego', text: 'Criativos de tráfego (vários criativos em imagens que segmentam)', completed: false }, { id: 13, category: 'Marketing & Tráfego', text: 'Estratégia de prospecção: currículo', completed: false }, ]; export default function App() { const [tasks, setTasks] = useState(initialTasks); // Função para alternar o status da tarefa const toggleTask = (taskId) => { setTasks(tasks.map(task => task.id === taskId ? { ...task, completed: !task.completed } : task )); }; // Cálculos de progresso const totalTasks = tasks.length; const completedTasks = tasks.filter(t => t.completed).length; const progressPercentage = Math.round((completedTasks / totalTasks) * 100); // Agrupar tarefas por categoria const tasksByCategory = useMemo(() => { return tasks.reduce((acc, task) => { if (!acc[task.category]) acc[task.category] = []; acc[task.category].push(task); return acc; }, {}); }, [tasks]); return (
{/* HEADER */}
Envise Logo { // Fallback caso a imagem não carregue no ambiente de preview e.target.style.display = 'none'; e.target.nextSibling.style.display = 'block'; }} /> Envise

Próximos Passos

Roadmap 25/04

{/* MAIN CONTENT */}
{/* PROGRESS SECTION */}

Visão Geral

Acompanhe o progresso do lançamento da Envise.

{progressPercentage}%

Concluído

{/* Progress Bar */}

{completedTasks} de {totalTasks} tarefas finalizadas

{/* TASKS LIST BY CATEGORY */}
{Object.entries(tasksByCategory).map(([category, categoryTasks]) => (
{CATEGORIES[category]}

{category}

{categoryTasks.map((task, index) => ( ))}
))}
{/* FOOTER */}
Envise Ícone { e.target.style.display = 'none'; }} />

© 2026 Envise. Todos os direitos reservados.

Foco e execução.