TR CRM

Faça login com sua conta Google para acessar o painel e os orçamentos.

Kanban Arraste e gerencie negócios por estágio
Modo demonstração — dados locais. Conectar ao Supabase para sincronizar com o app Android.
Título Contato / Empresa Estágio Valor Vencimento Tags Ações

Agenda de Clientes

Gerencie os contatos vinculados aos orçamentos.

Indicadores & Funil de Vendas

Resultados e conversões do CRM Aero Tecnologia em tempo real.

Acompanhamento do Funil

Volume financeiro aproximado de negociação por etapa.

Integração com Supabase

Sincronize o site web e o app Android via backend compartilhado. Ambos leem e escrevem no mesmo banco de dados.

Arquitetura de integração

O app Android usa Room (SQLite local). O site web usa Supabase (PostgreSQL remoto). Para sincronizar, você precisa de uma camada de API REST compartilhada.

┌─────────────┐    REST API    ┌──────────────────┐
│  App Android │ ─────────────▶│  Supabase Cloud  │
│ (Room local) │◀───────────── │  (PostgreSQL)    │
└─────────────┘               └────────┬─────────┘

              ┌────────────────────────┘

     ┌────────────────┐
     │  TR CRM Web  │  (este site)
     └────────────────┘
1

Criar projeto no Supabase

Acesse supabase.com, crie um novo projeto e copie a URL e a anon key.

2

Criar as tabelas (SQL)

Execute no SQL Editor do Supabase:

-- Contatos
CREATE TABLE contacts (
  id SERIAL PRIMARY KEY,
  name TEXT NOT NULL,
  email TEXT,
  phone TEXT,
  company TEXT,
  created_at TIMESTAMPTZ DEFAULT NOW()
);

-- Estágios do Kanban
CREATE TABLE stages (
  key TEXT PRIMARY KEY,
  display_name TEXT NOT NULL,
  color BIGINT,
  icon_name TEXT,
  order_index INT DEFAULT 0
);

-- Tags
CREATE TABLE tags (
  name TEXT PRIMARY KEY,
  color BIGINT
);

-- Tarefas / Negócios
CREATE TABLE tasks (
  id SERIAL PRIMARY KEY,
  title TEXT NOT NULL,
  description TEXT,
  estimate_value NUMERIC(12,2) DEFAULT 0,
  status TEXT NOT NULL DEFAULT 'UNREGISTERED',
  due_date BIGINT,
  assigned_contact_id INT REFERENCES contacts(id) ON DELETE SET NULL,
  tags TEXT DEFAULT '',
  created_at BIGINT DEFAULT EXTRACT(EPOCH FROM NOW())*1000
);
3

Configurar credenciais neste site

Clique no botão abaixo e insira a URL e a chave do seu projeto.

4

Adaptar o app Android

No app, adicione a dependência do cliente Supabase Kotlin e substitua as queries do Room por chamadas à API REST. Use o arquivo .env.example já incluso no projeto.

// build.gradle.kts
implementation("io.github.jan-tennert.supabase:postgrest-kt:2.x.x")

// Inicialização
val supabase = createSupabaseClient(
  supabaseUrl = "https://SEU_PROJETO.supabase.co",
  supabaseKey = BuildConfig.SUPABASE_ANON_KEY
) { install(Postgrest) }

// Exemplo: buscar tarefas
val tasks = supabase.from("tasks")
  .select().decodeList<CRMTask>()

Realtime (dados ao vivo)

Ative Realtime no Supabase para que app e site se atualizem instantaneamente quando qualquer ponta muda um dado.

// No site (JavaScript)
const channel = supabase
  .channel('tasks-changes')
  .on('postgres_changes', {
    event: '*', schema: 'public', table: 'tasks'
  }, (payload) => {
    // atualiza UI automaticamente
    loadData()
  })
  .subscribe()