CodeWolf ERPDocumentação
v0.1.0 MVPAcessar Sistema
Documentação Técnica

CodeWolf ERP — Guia Completo

Sistema ERP modular e WhatsApp-first para micro e pequenas empresas. Gerencie agendamentos, clientes, financeiro e integrações de forma simples e conversacional.

Visão Geral

O CodeWolf ERP é uma plataforma multi-tenant onde cada empresa (tenant) possui seu próprio ambiente isolado de dados. O sistema é construído com foco em WhatsApp-first — os clientes interagem via WhatsApp e os gestores usam o painel web para configurações avançadas.

CRM
Agenda
WhatsApp
Financeiro
MVP focado em prestadores de serviços — Barbearias, salões de beleza, clínicas, estúdios e qualquer negócio que trabalhe com agendamentos.

Stack Tecnológica

Next.js 15 (App Router)Core

Framework full-stack com Server Components e Server Actions

PostgreSQL + Prisma 6Banco

Banco relacional com ORM typesafe e migrations

Better-AuthAuth

Autenticação moderna com sessões, roles e multi-tenant

Evolution APIWhatsApp

Integração WhatsApp via Baileys — envio, recebimento e automações

Tailwind CSS + Shadcn/uiUI

Design system consistente com componentes acessíveis

TypeScript + ZodDX

Type safety end-to-end com validação de schemas em runtime

date-fns + SonnerUtils

Manipulação de datas (ptBR) e notificações toast

Estrutura do Projeto

Estrutura de diretóriostext
src/
├── app/
│   ├── (auth)/                   # Grupo de rotas públicas
│   │   ├── login/
│   │   └── register/
│   ├── (dashboard)/              # Grupo de rotas protegidas
│   │   ├── dashboard/            # Overview + estatísticas
│   │   ├── clientes/             # CRM de clientes
│   │   ├── agenda/               # Agendamentos
│   │   ├── profissionais/        # Gestão de equipe
│   │   ├── servicos/             # Catálogo de serviços
│   │   ├── financeiro/           # Transações e fluxo de caixa
│   │   ├── whatsapp/             # Integração WhatsApp
│   │   └── configuracoes/        # Configurações da empresa
│   ├── api/
│   │   ├── webhook/evolution/    # Webhook da Evolution API
│   │   └── cron/
│   │       ├── reminders/        # Lembretes de agendamento
│   │       └── payment-reminders/ # Lembretes de pagamento
│   └── docs/                     # Esta documentação
├── components/
│   ├── ui/                       # Shadcn UI components
│   └── layout/                   # Header, Sidebar
└── lib/
    ├── prisma.ts                 # Prisma client singleton
    ├── auth.ts                   # Better-Auth config
    ├── evolution-api.ts          # Evolution API client
    ├── session.ts                # Utilitários de sessão
    └── utils.ts                  # Helpers gerais

prisma/
├── schema.prisma                 # Schema do banco de dados
└── seed.ts                       # Dados iniciais

Convenção por módulo

Cada página do dashboard segue a mesma estrutura modular:

(dashboard)/[modulo]/
├── page.tsx                 # Server Component — busca dados e passa para o Client
├── _data-access/
│   └── get-[modulo].ts      # Funções de leitura do banco (server-only)
├── _actions/
│   └── [modulo]-actions.ts  # Server Actions — mutações com Zod + revalidatePath
└── _components/
    └── content.tsx          # Client Component — UI interativa

Instalação

1

Clone o repositório e instale as dependências

# Clone
git clone https://github.com/seu-usuario/codewolf-erp.git
cd codewolf-erp

# Instale as dependências
npm install
2

Configure as variáveis de ambiente

Copie o arquivo de exemplo e preencha com seus dados:

cp env.example .env
O arquivo .env contém credenciais sensíveis. Nunca o comite no Git. Ele já está no .gitignore.
3

Configure o banco de dados PostgreSQL

Certifique-se de ter PostgreSQL rodando e defina a DATABASE_URL no .env:

.envbash
DATABASE_URL="postgresql://USER:PASSWORD@HOST:5432/codewolf_erp?schema=public"

Gere as tabelas e rode o seed inicial:

# Gera as tabelas no banco
npm run db:push

# Popula com dados iniciais (tenant demo + admin)
npm run db:seed
4

Inicie o servidor de desenvolvimento

npm run dev

Acesse http://localhost:3000 — será redirecionado para o login.

O seed cria um usuário admin padrão com email admin@demo.com e senha admin123. Troque imediatamente em produção!

Banco de Dados

O schema foi desenhado com arquitetura multi-tenant via coluna — todos os modelos possuem tenantId como chave de isolamento.

Principais modelos

TenantEmpresa/negócio — raiz da hierarquia multi-tenant
UserUsuários com roles: ADMIN, MANAGER, EMPLOYEE, VIEWER
ClientCRM de clientes com fidelidade, tags e histórico
ProfessionalProfissionais com agenda, comissão e serviços vinculados
ServiceCatálogo de serviços com preço e duração
AppointmentAgendamentos com status, pagamento e notificações
TransactionFinanceiro: receitas, despesas, recorrências
WhatsappInstanceInstância Evolution API por tenant
WhatsappMessageHistórico de mensagens enviadas/recebidas
NotificationLogLog de todas as notificações disparadas
WorkingHoursHorários de funcionamento por dia da semana

Comandos Prisma

# Gerar tabelas (desenvolvimento — sem migration files)
npm run db:push

# Criar migration (produção)
npm run db:migrate

# Regenerar Prisma Client após mudança no schema
npm run db:generate

# Abrir Prisma Studio (GUI visual)
npm run db:studio

# Popular banco com dados iniciais
npm run db:seed

Variáveis de Ambiente

.envenv
# ---- Banco de Dados (PostgreSQL) -------------------------
DATABASE_URL="postgresql://USER:PASSWORD@HOST:5432/codewolf_erp?schema=public"

# ---- Better-Auth ----------------------------------------
BETTER_AUTH_SECRET="string-aleatoria-minimo-32-caracteres"
BETTER_AUTH_URL="https://seu-dominio.com"

# ---- Next.js --------------------------------------------
NEXT_PUBLIC_APP_URL="https://seu-dominio.com"
NEXT_PUBLIC_APP_NAME="Nome do seu Sistema"

# ---- Evolution API (WhatsApp) ---------------------------
EVOLUTION_API_URL="https://sua-evolution-api.com"
EVOLUTION_API_KEY="sua-api-key-global"
EVOLUTION_WEBHOOK_SECRET="token-para-validar-webhook"  # Opcional

# ---- Cron Jobs ------------------------------------------
CRON_SECRET="token-para-autenticar-crons"

# ---- E-mail (Opcional) ----------------------------------
SMTP_HOST="smtp.seu-provedor.com"
SMTP_PORT="587"
SMTP_USER="email@empresa.com"
SMTP_PASS="sua-senha"
SMTP_FROM="noreply@empresa.com"
BETTER_AUTH_SECRETObrigatório

Gere com: openssl rand -base64 32

CRON_SECRETObrigatório

Qualquer string segura para autenticar as rotas /api/cron/*

EVOLUTION_API_KEYObrigatório

Encontrada nas configurações da sua instância Evolution API

EVOLUTION_WEBHOOK_SECRETOpcional

Opcional — adiciona camada de segurança no webhook

Evolution API (WhatsApp)

A Evolution API é uma API open-source baseada no Baileys que permite integração completa com o WhatsApp Web. Cada tenant cria sua própria instância e conecta via QR Code.

Fluxo de Conexão

1

Tenant acessa Painel → WhatsApp

2

Clica em 'Conectar WhatsApp'

3

Sistema chama POST /instance/create na Evolution API

4

Evolution retorna QR Code (base64)

5

Usuário escaneia com celular

6

Evolution dispara webhook CONNECTION_UPDATE (state: open)

7

Sistema salva status CONNECTED + número do celular

8

Notificações automáticas passam a funcionar

Mensagens automáticas disponíveis

sendAppointmentConfirmation()Enviada ao criar agendamento
sendAppointmentReminder24h()Lembrete 24h antes — disparado pelo cron
sendAppointmentReminder1h()Lembrete 1h antes — disparado pelo cron
sendPaymentReminder()Cobrança de pagamentos pendentes
sendWelcomeMessage()Boas-vindas ao cadastrar novo cliente
Todas as funções estão em src/lib/evolution-api.ts. Os números são normalizados automaticamente para o formato internacional: 5511999999999.

Webhook WhatsApp

Endpoint que recebe eventos em tempo real da Evolution API:

POST https://seu-dominio.com/api/webhook/evolution

Eventos tratados

QRCODE_UPDATEDSalva novo QR Code no banco para exibição em tempo real
CONNECTION_UPDATEAtualiza status (CONNECTED, DISCONNECTED, CONNECTING)
MESSAGES_UPSERTProcessa mensagens recebidas e aciona o bot
MESSAGES_UPDATEAtualiza status de entrega (DELIVERED, READ)

Comandos do Bot WhatsApp-First

Quando um cliente manda mensagem, o bot responde automaticamente:

Cliente: "oi"  →  Bot exibe menu principal
Cliente: "1"   →  Lista de serviços disponíveis
Cliente: "2"   →  Próximos agendamentos do cliente
Cliente: "3"   →  Instruções para cancelar
Cliente: "0"   →  Transfere para atendente humano
Clientes novos são cadastrados automaticamente no CRM ao enviar a primeira mensagem, usando o nome do perfil WhatsApp e o número de telefone.

Configurar Webhook na Evolution API

# Via API (após criar a instância)
curl -X POST https://sua-evo.api.com/webhook/set/NOME_INSTANCIA \
  -H "apikey: SUA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://seu-dominio.com/api/webhook/evolution",
    "enabled": true,
    "events": ["MESSAGES_UPSERT", "CONNECTION_UPDATE", "QRCODE_UPDATED"]
  }'

Cron Jobs

Dois endpoints de cron que rodam automaticamente via vercel.json ou serviço externo (EasyCron, Render, etc):

GET /api/cron/remindersA cada hora

Envia lembretes de agendamento via WhatsApp para clientes dos tenants ativos.

  • Lembretes 24h antes (janela de ±1h)
  • Lembretes 1h antes (janela de ±5min)
  • Marcação de enviado para evitar duplicatas
  • Log salvo em NotificationLog
GET /api/cron/payment-remindersDiário 09h

Notifica clientes sobre pagamentos pendentes e marca vencidos como OVERDUE.

  • Pagamentos vencendo hoje → lembrete WhatsApp
  • Pagamentos em atraso → atualiza status para OVERDUE

Segurança dos Crons

Todos os endpoints verificam o header Authorization: Bearer CRON_SECRET:

# Testar manualmente
curl -H "Authorization: Bearer SEU_CRON_SECRET" \
  https://seu-dominio.com/api/cron/reminders

vercel.json

vercel.jsonjson
{
  "crons": [
    {
      "path": "/api/cron/reminders",
      "schedule": "0 * * * *"
    },
    {
      "path": "/api/cron/payment-reminders",
      "schedule": "0 9 * * *"
    }
  ]
}

Módulos do Sistema

Dashboard/dashboard

Overview com KPIs: agendamentos do dia, receita, clientes ativos, taxa de ocupação

Clientes (CRM)/clientes

Cadastro completo, tags, histórico de visitas, pontos de fidelidade, origem

Agenda/agenda

Calendário de agendamentos, criação, edição, status e integração com WhatsApp

Profissionais/profissionais

Equipe com comissão, cor no calendário, serviços vinculados e horários

Serviços/servicos

Catálogo com preço, duração, categoria e ativação por serviço

Financeiro/financeiro

Receitas, despesas, status (pendente/pago/vencido), recorrências, relatórios

WhatsApp/whatsapp

Conexão via QR Code, histórico de mensagens, configuração de notificações automáticas

Configurações/configuracoes

Dados da empresa, horários de funcionamento, equipe (usuários), senha e planos

Arquitetura Multi-tenant

O sistema usa multi-tenancy via coluna (Row-Level) — todos os dados compartilham o mesmo banco mas são isolados por tenantId.

Isolamento de dados

Cada query no servidor sempre filtra por tenantId — nenhum dado de uma empresa vaza para outra

Módulos plugáveis

Cada tenant pode ter moduleServices e moduleSales habilitados independentemente

Instância WhatsApp própria

Cada empresa tem sua própria instância na Evolution API, isolando completamente as comunicações

Planos e limites

O campo plan no Tenant controla acesso às funcionalidades premium (FREE, CORE, SERVICES, HYBRID, ENTERPRISE)

Exemplo — filtro por tenant em data-accesstypescript
// src/app/(dashboard)/clientes/_data-access/get-clients.ts
export async function getClients() {
  const tenantId = await getTenantId(); // ← pega da sessão autenticada

  return prisma.client.findMany({
    where: {
      tenantId,          // ← isolamento garantido
      active: true,
    },
    orderBy: { name: "asc" },
  });
}

Deploy na Vercel

1

Crie um projeto na Vercel

Conecte o repositório GitHub na Vercel e ela detectará automaticamente o Next.js.

2

Configure as variáveis de ambiente

Em Settings → Environment Variables, adicione todas as variáveis do .env.

Certifique-se de definir BETTER_AUTH_URL e NEXT_PUBLIC_APP_URL com o domínio de produção (ex: https://erp.suaempresa.com.br).
3

Configure o banco de dados em produção

Use um PostgreSQL gerenciado (Neon, Supabase, Railway, ou seu próprio servidor):

# Execute as migrations no banco de produção
DATABASE_URL="postgresql://..." npx prisma migrate deploy

# Rode o seed (apenas na primeira vez)
DATABASE_URL="postgresql://..." npx tsx prisma/seed.ts
4

Configure o webhook da Evolution API

Após o deploy, configure a URL do webhook na Evolution API:

https://seu-dominio.vercel.app/api/webhook/evolution
5

Crons automáticos via vercel.json

O arquivo vercel.json já está configurado com os cron schedules. Eles serão ativados automaticamente no deploy.

Cron jobs na Vercel requerem plano Pro. Para o plano gratuito, use um serviço externo como EasyCron ou cron-job.org.

CodeWolf ERP

MVP v0.1.0 — Modular • Multi-tenant • WhatsApp-First

Acessar o Sistema