Conectando ao Supabase…

Hoje

Seu cockpit diário de prospecção
conectado

Registro rápido do dia

Bateu o telefone? Clique. Cada toque registra uma atividade de hoje contra a meta.

Funil de prospecção

Follow-ups

próximos contatos

Fila do dia

ligar agora

Rascunho

EmpresaDecisorCanalStatus EstágioPesquisaValorFollow

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.

  1. 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.
  2. 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.
  3. 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 · xwnkmzrycvcwwoqnzulb

Passo 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 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:

60% noite
30% creme
10% roxo
Roxo#6E23D7
Noite#15101F
Preto#0E0E0E
Creme#F9F3E9
Roxo claro#8B4FDF

Tipografia: Fraunces nos títulos, Nunito no corpo, JetBrains Mono nos rótulos e números.