Registro rápido do dia
Funil de prospecção
Follow-ups
próximos contatosFila do dia
ligar agoraRascunho
| Empresa | Decisor | Canal | Status | Estágio | Pesquisa | Valor | Follow |
|---|
Gargalos de conversão — taxa por etapa
Fechamentos por mês
Motivos de perda
Investimentos por campanha
Nenhuma campanha cadastrada.
Canal de aquisição
Segmentos com mais leads
Leads por mês (entrada no pipeline)
Como usar este painel
Três telas, um ritmo. O painel foi desenhado em volta do seu método de prospecção, não o contrário.
- Hoje é o cockpit do telefone. Antes de discar, sua meta diária está no topo:
100 ligações → 50 conexões → 20 decisores → 5 reuniões marcadas → 4 realizadas → 3 vendas. A cada atividade, clique no+do contador. O funil abaixo mostra suas taxas de conversão reais contra o método. - Pipeline é onde cada lead vive. Arraste o card entre as colunas conforme ele avança: Pesquisa, Prospecção, Decisor, Reunião marcada, Reunião realizada, Cliente. Use as setas do card se preferir não arrastar.
- Leads é a lista completa, com a ficha e o checklist de pesquisa individual (CNPJ, sócios, capital social e presença digital nos 5 pontos do método).
O checklist de pesquisa
Cada lead carrega 5 marcadores de presença digital: site, social media, anúncio Meta, anúncio Google e Google Meu Negócio. Eles aparecem como cinco quadradinhos na lista. Quanto menos verde, mais buraco digital, mais espaço para a Nettu's entrar.
Honestidade dos dados
Os contadores de atividade começam em zero, porque número de prospecção não se inventa. As metas (100 / 50 / 20 / 5 / 4 / 3) são as do método do Rugido.
Status do banco de dados
O painel está conectado ao Supabase. Todos os leads, atividades e metas são salvos e lidos do banco em tempo real.
Supabase · xwnkmzrycvcwwoqnzulbPasso 1 — Criar as tabelas (obrigatório)
Se o painel está dando erro ao carregar ou ao salvar, as tabelas ainda não existem. Acesse Supabase → SQL Editor → New query, cole o SQL abaixo e clique em Run.
-- ═══════════════════════════════════════════
-- NETTU'S · Criar tabelas
-- Execute no Supabase → SQL Editor → Run
-- ═══════════════════════════════════════════
-- 1. Leads
create table if not exists leads (
id uuid primary key default gen_random_uuid(),
criado_em timestamptz default now(),
empresa text not null,
decisor text,
cargo text,
canal text,
telefone text,
segmento text,
capital_social text,
estagio text default 'pesquisa',
valor_potencial numeric default 0,
proximo_follow date,
canal_follow text,
obs text,
tem_site boolean default false,
faz_social boolean default false,
anuncia_meta boolean default false,
anuncia_google boolean default false,
gmn_ok boolean default false
);
-- 2. Atividades diárias (uma linha por dia)
create table if not exists atividades (
data date primary key,
ligacoes int default 0,
conexoes int default 0,
decisores int default 0,
reunioes_marcadas int default 0,
reunioes_realizadas int default 0,
vendas int default 0
);
-- 3. Metas (linha única — id = 1)
create table if not exists metas (
id int primary key,
ligacoes int default 100,
conexoes int default 50,
decisores int default 20,
reunioes_marcadas int default 5,
reunioes_realizadas int default 4,
vendas int default 3
);
-- Inserir metas padrão (só executa se a linha não existir)
insert into metas (id, ligacoes, conexoes, decisores, reunioes_marcadas, reunioes_realizadas, vendas)
values (1, 100, 50, 20, 5, 4, 3)
on conflict (id) do nothing;
-- ═══════════════════════════════════════════
-- FASE 1.1 · Migração (rode se as tabelas já existem)
-- ═══════════════════════════════════════════
-- Status de tentativa nos leads
alter table leads add column if not exists status_tentativa text default 'A contatar';
-- Timeline de anotações
create table if not exists anotacoes (
id uuid primary key default gen_random_uuid(),
lead_id uuid references leads(id) on delete cascade,
tipo text default 'geral',
texto text not null,
criado_em timestamptz default now()
);
-- Canal WhatsApp nas atividades diárias
alter table atividades add column if not exists wpp_disparos int default 0;
alter table atividades add column if not exists wpp_enviados int default 0;
alter table atividades add column if not exists wpp_respostas int default 0;
alter table atividades add column if not exists wpp_decisores int default 0;
alter table atividades add column if not exists wpp_reunioes_marcadas int default 0;
alter table atividades add column if not exists wpp_reunioes_realizadas int default 0;
alter table atividades add column if not exists wpp_vendas int default 0;
-- Metas do canal WhatsApp
alter table metas add column if not exists wpp_disparos int default 200;
alter table metas add column if not exists wpp_enviados int default 150;
alter table metas add column if not exists wpp_respostas int default 50;
alter table metas add column if not exists wpp_decisores int default 20;
alter table metas add column if not exists wpp_reunioes_marcadas int default 5;
alter table metas add column if not exists wpp_reunioes_realizadas int default 4;
alter table metas add column if not exists wpp_vendas int default 3;
Passo 1b — Migração Módulo 3 · Pipeline ⚠ rode uma vez
Se você já tinha leads cadastrados com o pipeline antigo, este SQL converte as etapas antigas para as 8 novas e adiciona os campos de reunião, feedback e histórico.
-- ═══════════════════════════════════════════
-- MÓDULO 3 · Pipeline reformulado
-- Execute no Supabase → SQL Editor → Run
-- ═══════════════════════════════════════════
-- Converter estágios antigos para os novos
update leads set estagio = 'potencial' where estagio = 'pesquisa';
update leads set estagio = 'ligar' where estagio in ('prospeccao','decisor');
update leads set estagio = 'reuniao_agendada' where estagio = 'marcada';
update leads set estagio = 'reuniao_realizada' where estagio = 'realizada';
update leads set estagio = 'fechado' where estagio = 'cliente';
update leads set estagio = 'desqualificado' where estagio = 'perdido';
-- Novos campos no lead
alter table leads add column if not exists motivo_perda text;
alter table leads add column if not exists data_reuniao_marcada timestamptz;
alter table leads add column if not exists feedback_reuniao text;
alter table leads add column if not exists data_reuniao_realizada date;
alter table leads add column if not exists tipo_lead text default 'outbound';
-- Tabela de histórico de etapas
create table if not exists historico_lead (
id uuid primary key default gen_random_uuid(),
lead_id uuid references leads(id) on delete cascade,
estagio_anterior text,
estagio_novo text not null,
obs text,
criado_em timestamptz default now()
);
Passo 1c — Migração Módulo 4 · Ficha expandida ⚠ rode uma vez
Adiciona todos os campos novos da ficha do lead (tipo, closer, dados de reunião, faturamento, contrato etc.).
-- ═══════════════════════════════════════════
-- MÓDULO 4 · Ficha do lead expandida
-- Execute no Supabase → SQL Editor → Run
-- ═══════════════════════════════════════════
alter table leads add column if not exists closer text;
alter table leads add column if not exists faturamento_medio text;
alter table leads add column if not exists produtos_ofertados text;
alter table leads add column if not exists criterios_produto text;
alter table leads add column if not exists criterio_nao_cumpre text;
alter table leads add column if not exists capacidade_produtiva text;
alter table leads add column if not exists valor_contrato numeric;
alter table leads add column if not exists forma_pagamento text;
alter table leads add column if not exists data_aquisicao date;
-- (tipo_lead, data_reuniao_marcada, feedback_reuniao, data_reuniao_realizada
-- já foram adicionados no SQL do Módulo 3)
Passo 1f — Migração Módulo 8 · Dashboard Estratégico ⚠ rode uma vez
Cria a tabela campanhas para registrar investimentos de marketing e calcular CAC e ROI.
-- ═══════════════════════════════════════════
-- MÓDULO 8 · Dashboard Estratégico
-- Execute no Supabase → SQL Editor → Run
-- ═══════════════════════════════════════════
create table if not exists campanhas (
id uuid primary key default gen_random_uuid(),
nome text not null,
canal text,
valor numeric not null default 0,
data_inicio date,
data_fim date,
criado_em timestamptz default now()
);
-- Também garante que leads tem campo canal_aquisicao e segmento
alter table leads add column if not exists canal_aquisicao text;
alter table leads add column if not exists segmento text;
Passo 1e — Migração Módulo 7 · Atividades CRM ⚠ rode uma vez
Cria a tabela atividades_crm para follow-ups, lembretes e cobranças gerados manual ou automaticamente pelas etapas do pipeline.
-- ═══════════════════════════════════════════
-- MÓDULO 7 · Atividades e Notificações
-- Execute no Supabase → SQL Editor → Run
-- ═══════════════════════════════════════════
create table if not exists atividades_crm (
id uuid primary key default gen_random_uuid(),
lead_id uuid references leads(id) on delete cascade,
tipo text not null default 'follow_up',
-- follow_up | reuniao | cobranca | lembrete | outro
canal text,
-- ligacao | whatsapp | email | linkedin
data_prev date not null,
hora_prev time,
obs text,
status text default 'pendente',
-- pendente | concluida | reagendada
auto boolean default false,
criado_em timestamptz default now()
);
create index if not exists idx_ativ_crm_lead_id on atividades_crm(lead_id);
create index if not exists idx_ativ_crm_status on atividades_crm(status);
create index if not exists idx_ativ_crm_data on atividades_crm(data_prev);
Passo 1d — Migração Módulo 6 · Listas de Prospecção ⚠ rode uma vez
Cria as tabelas listas e leads_lista para o sistema de importação de planilhas.
-- ═══════════════════════════════════════════
-- MÓDULO 6 · Sistema de Listas de Prospecção
-- Execute no Supabase → SQL Editor → Run
-- ═══════════════════════════════════════════
-- Tabela: listas de prospecção importadas
create table if not exists listas (
id uuid primary key default gen_random_uuid(),
nome text not null,
descricao text,
data_inicio date,
total_leads int default 0,
criado_em timestamptz default now()
);
-- Tabela: leads dentro de cada lista
create table if not exists leads_lista (
id uuid primary key default gen_random_uuid(),
lista_id uuid references listas(id) on delete cascade,
empresa text,
decisor text,
cargo text,
telefone text,
segmento text,
cidade text,
email text,
site text,
status text default 'pendente', -- pendente | importado | descartado
lead_id uuid references leads(id) on delete set null,
criado_em timestamptz default now()
);
-- Índices para performance
create index if not exists idx_leads_lista_lista_id on leads_lista(lista_id);
create index if not exists idx_leads_lista_status on leads_lista(status);
Passo 2 — Ativar RLS (login) — opcional por enquanto
Quando quiser trancar o painel com login por e-mail, rode o SQL abaixo no Supabase (SQL Editor) e depois ative a autenticação por Magic Link ou senha em Authentication → Providers.
-- Ativa proteção por linha (RLS)
alter table leads enable row level security;
alter table atividades enable row level security;
alter table metas enable row level security;
-- Permite acesso só para usuários autenticados
create policy "dono" on leads
for all using (auth.role() = 'authenticated');
create policy "dono" on atividades
for all using (auth.role() = 'authenticated');
create policy "dono" on metas
for all using (auth.role() = 'authenticated');
Sistema de design
Este painel segue o manual da marca à risca. A regra 60/30/10:
Tipografia: Fraunces nos títulos, Nunito no corpo, JetBrains Mono nos rótulos e números.