// Dashboard — dark mode v2, translucent cards, purple/blue accents
const Dashboard = ({ onNavigate }) => {
return (
{/* Greeting */}
Boa noite, Rafael 👋
Sábado, 18 de abril de 2026 · 21:14 · Padaria São João
{/* KPIs */}
Faturas vencidas {BRL(5850)} >}/>
{/* Quick access */}
{[
{ icon: 'users', color: '#60a5fa', label: 'CRM', onClick: () => onNavigate('crm') },
{ icon: 'wallet', color: '#22c55e', label: 'Faturamento' },
{ icon: 'receipt', color: '#f59e0b', label: 'Despesas' },
{ icon: 'briefcase', color: '#ec4899', label: 'RH' },
{ icon: 'megaphone', color: '#06b6d4', label: 'Marketing' },
{ icon: 'folder', color: '#a78bfa', label: 'Projetos' },
{ icon: 'file', color: '#f472b6', label: 'Documentos' },
{ icon: 'book', color: '#34d399', label: 'Knowledge' },
{ icon: 'calc', color: '#fb7185', label: 'Estimativas' },
{ icon: 'doc', color: '#818cf8', label: 'Propostas' },
{ icon: 'message', color: '#fb923c', label: 'Comunicados' },
{ icon: 'whatsapp', color: '#25d366', label: 'WhatsApp' },
].map(a => (
{a.label}
))}
{/* Main grid */}
{/* Revenue chart */}
Rendimento vs Despesas
Últimos 6 meses · out/25 – abr/26
Receita
Despesa
{/* Invoices & Projects */}
Total faturado em abril: {BRL(84290.50)}
{/* Tickets and RH */}
Chamados
Suporte · SLA 96%
Hoje
{[
['Funcionários ativos', '17', 'var(--text-0)'],
['Folgas pendentes', '4', '#fbbf24'],
['Comissões do mês', BRL(7500), 'var(--text-0)'],
].map(([l, v, c]) => (
{l}
{v}
))}
Próxima folha
30/abr
{/* Expenses & Campaigns */}
{[
{ name: 'Energia elétrica — CPFL', cat: 'Operacional', val: 842.30, date: '14/04' },
{ name: 'Google Workspace', cat: 'Software', val: 186.00, date: '12/04' },
{ name: 'CombustÃvel — frota', cat: 'VeÃculos', val: 612.40, date: '10/04' },
{ name: 'Material de limpeza', cat: 'Insumos', val: 369.00, date: '08/04' },
].map((e, i) => (
{e.name}
{e.cat} · {e.date}
{BRL(e.val)}
))}
{[
{ name: 'Promo Páscoa WhatsApp', ch: 'WhatsApp', reach: '2.841', conv: '12,4%', color: '#25D366' },
{ name: 'Reengajamento 60d', ch: 'E-mail', reach: '1.204', conv: '8,1%', color: '#60a5fa' },
{ name: 'SMS — Dia das Mães', ch: 'SMS', reach: '640', conv: '4,9%', color: '#a78bfa' },
].map((c, i) => (
Alcance: {c.reach}
Conversão: {c.conv}
))}
{/* Right column */}
{/* AI insight — signature widget */}
Insight da IA Claude
Detectado há 2 min
Sua conversão caiu 18% na etapa
"Proposta → Negociação" nos últimos 14 dias. Três leads acima de {BRL(10000)} estão parados há mais de 7 dias com score de churn alto.
onNavigate('crm')}>
Revisar leads
{/* Terminal system status widget */}
{/* Next events */}
Próximos eventos
Hoje e amanhã
Agenda
{[
{ time: '14h00', name: 'Reunião — Padaria São João', type: 'Cliente', color: '#a78bfa' },
{ time: '16h30', name: 'Assinatura contrato Vila Nova', type: 'JurÃdico', color: '#60a5fa' },
{ time: '19h00', name: 'Fechamento de caixa', type: 'Financeiro', color: '#4ade80' },
{ time: 'Dom 10h', name: 'Folha de abril — prévia', type: 'RH', color: '#f472b6' },
].map((e, i) => (
))}
{/* Team */}
Equipe online
5 de 17 ativos agora
{[
{ name: 'Camila Rocha', role: 'Vendas', status: 'online' },
{ name: 'Bruno Tavares', role: 'Financeiro', status: 'online' },
{ name: 'LÃvia Mendes', role: 'Suporte', status: 'busy' },
{ name: 'João Pedro', role: 'Marketing', status: 'away' },
{ name: 'ThaÃs Lima', role: 'RH', status: 'online' },
].map((t, i) => (
))}
{/* Activity timeline */}
{[
{ dot: '#22c55e', text: <>
Camila fechou lead
Hamburgueria 22 por {BRL(12400)}>, time: 'há 12 min' },
{ dot: '#a78bfa', text: <>
NF-e 0124 emitida para Restaurante do Zé>, time: 'há 38 min' },
{ dot: '#60a5fa', text: <>
PIX recebido de Vila Nova Comércio>, time: 'há 1h' },
{ dot: '#f472b6', text: <>
Campanha Reengajamento 60d iniciada>, time: 'há 2h' },
{ dot: '#fbbf24', text: <>
IA detectou anomalia em despesas operacionais>, time: 'há 3h' },
].map((a, i) => (
))}
Automatiza v4.2.1 · Uptime 99,97% · Sincronizado às 21:14
);
};
// KPI component with colored icon square (matches screenshot exactly)
const KpiCard = ({ icon, color, value, label, alert }) => (
);
const RevenueChart = () => {
const data = [
{ m: 'Out', r: 42000, d: 28000 },
{ m: 'Nov', r: 58000, d: 34000 },
{ m: 'Dez', r: 71000, d: 42000 },
{ m: 'Jan', r: 65000, d: 38000 },
{ m: 'Fev', r: 78000, d: 45000 },
{ m: 'Mar', r: 84290, d: 52000 },
];
const max = 90000;
return (
{data.map((d, i) => (
{i === 5 && (
{BRLShort(d.r)}
)}
))}
{data.map((d, i) => (
{d.m}
))}
);
};
Object.assign(window, { Dashboard });