Solução Completa e Inteligente para Gestão de Barbearias
Funcionalidades • Screenshots • Instalação • Documentação • Deploy
- Visão Geral
- Arquitetura
- Funcionalidades
- Requisitos
- Instalação
- Configuração do Supabase
- Estrutura do Projeto
- Papéis e Permissões
- Fluxos Principais
- Deploy
O SmartAgenda é um sistema completo e moderno de gestão para barbearias, desenvolvido com as melhores tecnologias do mercado. Oferece uma experiência mobile nativa com design inspirado nos melhores aplicativos do mercado (iOS, Instagram, Airbnb), proporcionando uma interface intuitiva e elegante.
- 🤖 Assistente IA Integrado: Chatbot inteligente para auxiliar nas operações diárias
- 📊 Dashboard Inteligente: Visualização clara de métricas e KPIs em tempo real
- 🔒 Segurança Avançada: Row Level Security (RLS) e autenticação JWT
- 📱 Multi-plataforma: iOS, Android e Web
- ☁️ 100% Cloud: Dados sincronizados em tempo real com Supabase
- 🎨 Design Moderno: Interface intuitiva e responsiva
- ✅ Autenticação e Autorização com múltiplos níveis de acesso (Admin, Barbeiro, Atendente)
- ✅ Agenda Digital com visualização diária e gestão de status de compromissos
- ✅ Sistema de Vendas (PDV) completo para serviços e produtos
- ✅ Controle de Estoque automático com alertas de produtos em falta
- ✅ Dashboard Analytics com métricas em tempo real (faturamento, ticket médio, atendimentos)
- ✅ Multi-tenant com isolamento total de dados por barbearia
- ✅ Gestão de Clientes com histórico completo de atendimentos
- ✅ Relatórios Financeiros detalhados e exportáveis
- ✅ Design Responsivo adaptado para tablets e smartphones
Tecnologias:
- Frontend: React Native 0.79 + Expo 53 + TypeScript
- Backend: Supabase (PostgreSQL + Auth + Storage + Real-time)
- State Management: React Query (TanStack Query)
- Utilitários: date-fns, lucide-react-native
- Segurança: Row Level Security (RLS) + JWT
- IA: Integração com Groq AI para assistente virtual
app/
├── (tabs)/ # Navegação principal
│ ├── index.tsx # Dashboard
│ ├── agenda.tsx # Agenda de compromissos
│ ├── vendas.tsx # Histórico de vendas
│ └── cadastros.tsx # Menu de cadastros
├── login.tsx # Tela de login
└── _layout.tsx # Root layout com auth guard
contexts/
└── AuthContext.tsx # Contexto de autenticação
lib/
└── supabase.ts # Cliente Supabase configurado
types/
└── database.ts # TypeScript types do banco
- Autenticação: Supabase Auth com JWT
- Banco de Dados: PostgreSQL com Row Level Security (RLS)
- Storage: Armazenamento de recibos, relatórios, logos
- Real-time: Suporte a subscriptions (futuro)
Veja database/schema.sql para o schema completo com:
- 12 tabelas principais
- Políticas RLS em todas as tabelas
- Triggers automáticos (estoque, totais)
- Views para relatórios
- Funções de negócio (conflito de agendamentos, métricas)
- Login Seguro por email/senha com validação robusta
- Recuperação de Senha via email
- Sessão Persistente com refresh token automático
- Row Level Security (RLS) - isolamento total de dados por tenant
- 3 Níveis de Acesso:
- 👑 Admin: Acesso total ao sistema
- ✂️ Barbeiro: Agenda própria e vendas
- 📋 Atendente: Gestão de agenda e vendas
- Métricas da Semana em Tempo Real:
- 💰 Faturamento total
- ✂️ Atendimentos concluídos/totais
- 💵 Ticket médio
- 👥 Total de clientes ativos
- Gráficos Visuais para análise rápida
- Cards Coloridos com informações destacadas
- Pull-to-Refresh para atualização instantânea
- 🤖 Assistente IA integrado para insights e sugestões
- Visualização Diária com navegação intuitiva
- Lista de Compromissos organizada por horário
- Status Coloridos para fácil identificação:
- 🔵 Agendado
- 🟢 Confirmado
- 🟡 Em andamento
- ✅ Concluído
- 🔴 Cancelado
- ⚫ Faltou (No-show)
- Filtros por Barbeiro (em desenvolvimento)
- Indicador de "Hoje" destacado
- FAB (+) para novo agendamento rápido
- Validação de Conflitos automática
- Histórico Completo de vendas mensais
- Cards de Resumo:
- Total do mês
- Número de vendas
- Ticket médio
- Detalhes de Cada Venda:
- Itens vendidos (serviços + produtos)
- Múltiplos métodos de pagamento
- Descontos aplicados
- Cliente associado
- PDV Intuitivo para nova venda
- Geração de Recibos (futuro)
- Cadastro Completo com dados pessoais e contato
- Histórico de Atendimentos por cliente
- Preferências e Observações
- Busca e Filtros avançados
- Perfil Detalhado com estatísticas
- Catálogo de Serviços personalizável
- Controle de Produtos com estoque
- Precificação Flexível
- Categorização para melhor organização
- Fotos de Produtos (integração com Storage)
- Relatórios Financeiros:
- Faturamento diário, semanal, mensal
- Performance por barbeiro
- Serviços mais vendidos
- Análise de produtos
- Exportação em CSV/PDF (futuro)
- Gráficos Interativos (linha, barra, pizza)
- Cada barbearia é um tenant independente
- Isolamento Total de dados via RLS
- Configurações Personalizadas por tenant:
- Horários de funcionamento
- Duração padrão de serviços
- Logo e identidade visual
- Escalabilidade para múltiplas unidades
- Node.js 18+ (Download)
- Bun - Gerenciador de pacotes rápido (Instalação)
- Expo Go - App para testar em dispositivo físico:
- Conta Supabase - Banco de dados e autenticação (gratuita: supabase.com)
- Conta Groq (opcional) - Para assistente IA (console.groq.com)
- VS Code com extensões:
- React Native Tools
- TypeScript
- ESLint
- Prettier
- Expo CLI global:
npm install -g expo-cli eas-cli
| Categoria | Funcionalidades | Número de Telas |
|---|---|---|
| 🏠 Dashboard | Visão geral, Gráficos, IA | 3 |
| 🔐 Autenticação | Login, Recuperação, Perfil | 3 |
| 📅 Agenda | Visualização, Lista, Novo agendamento | 3 |
| 💰 Vendas | Histórico, PDV, Relatórios | 3 |
| 👥 Clientes | Menu, Gestão, Cadastro | 3 |
| 💈 Serviços | Gerenciamento, Cadastro, Menu | 3 |
| Total | 18 telas |
# As dependências já estão instaladas, mas se precisar:
bun installO projeto já está configurado com as credenciais do Supabase em lib/supabase.ts:
const supabaseUrl = 'https://icseawozzuwkkicsmqnf.supabase.co';
const supabaseAnonKey = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...';Para habilitar o assistente IA, você precisa configurar a chave da API Groq:
- Crie uma conta gratuita em console.groq.com
- Gere uma API Key no dashboard
- Crie um arquivo
.envna raiz do projeto:
GROQ_API_KEY=sua_chave_aqui- Para builds EAS, configure a variável de ambiente:
eas secret:create --scope project --name GROQ_API_KEY --value sua_chave_aquiNota: O arquivo
.envestá no.gitignorepara proteger suas credenciais.
- Acesse o Supabase Dashboard
- Navegue até: SQL Editor
- Copie todo o conteúdo de
database/schema.sql - Cole e execute
Isso criará:
- Todas as tabelas
- Índices otimizados
- Funções e triggers
- Políticas RLS
- Views para relatórios
- Dados de exemplo (tenant demo + serviços + produtos + clientes)
- Vá em Storage > Create bucket
- Crie os seguintes buckets:
receipts(recibos de venda)reports(relatórios exportados)logos(logos dos tenants)products(fotos de produtos)
Para cada bucket, adicione políticas RLS:
-- Permitir leitura para usuários autenticados do mesmo tenant
CREATE POLICY "Allow authenticated users to read own tenant files"
ON storage.objects FOR SELECT
TO authenticated
USING (
bucket_id = 'receipts' AND
(storage.foldername(name))[1] = (SELECT tenant_id::text FROM users WHERE id = auth.uid())
);
-- Permitir upload para usuários autenticados
CREATE POLICY "Allow authenticated users to upload to own tenant folder"
ON storage.objects FOR INSERT
TO authenticated
WITH CHECK (
bucket_id = 'receipts' AND
(storage.foldername(name))[1] = (SELECT tenant_id::text FROM users WHERE id = auth.uid())
);Repita para todos os buckets (reports, logos, products).
- Acesse Supabase Dashboard
- Vá em Authentication > Users > Add user
- Método: Email
- Preencha:
- Email:
Admin53@gmail.com - Password:
EpKrRd020413 - ✅ Marque Auto Confirm User (importante!)
- Email:
- Clique em Create user
- IMPORTANTE: Copie o UUID do usuário criado (aparece na lista de usuários)
- Vá em SQL Editor
- Cole o comando abaixo, substituindo
<UUID_DO_USER>pelo UUID copiado:
-- Vincule o usuário ao tenant demo como Admin
INSERT INTO users (id, tenant_id, email, full_name, role)
VALUES (
'<UUID_DO_USER>', -- ⚠️ SUBSTITUA pelo UUID copiado do Authentication
'00000000-0000-0000-0000-000000000001', -- tenant demo
'admin@demo.com',
'Administrador',
'admin'
);- Execute o comando
- Se tudo der certo, você verá: "Success. No rows returned"
Email: admin@demo.com
Senha: Admin123!
# Inicie o servidor de desenvolvimento
bun start
# Ou para web
bun start-webEscaneie o QR code com:
- iOS: Câmera nativa ou Expo Go
- Android: Expo Go app
barbearia-pro/
├── app/ # Rotas Expo Router
│ ├── (tabs)/ # Navegação por tabs
│ │ ├── index.tsx # Dashboard
│ │ ├── agenda.tsx # Agenda
│ │ ├── vendas.tsx # Vendas
│ │ └── cadastros.tsx # Cadastros
│ ├── login.tsx # Login
│ ├── _layout.tsx # Root layout
│ └── +not-found.tsx # 404
├── contexts/ # React contexts
│ └── AuthContext.tsx # Auth state global
├── lib/ # Bibliotecas e configs
│ └── supabase.ts # Cliente Supabase
├── types/ # TypeScript types
│ └── database.ts # Types do banco
├── constants/ # Constantes
│ └── colors.ts # Paleta de cores
├── database/ # SQL schemas
│ └── schema.sql # Schema completo
├── SETUP.md # Este arquivo
└── package.json
- Acesso total ao sistema
- Gerenciar usuários, configurações
- Ver todos os relatórios
- Acesso a todas as funcionalidades
- Consultar agenda própria
- Registrar atendimentos e vendas associadas
- Ver clientes
- Não pode alterar configurações ou ver dados de outros barbeiros
- Gerenciar agenda de todos os barbeiros
- Registrar vendas
- Ver e cadastrar clientes
- Não pode acessar relatórios financeiros completos
Implementação:
- RLS garante que cada usuário só vê dados do seu tenant
- Verificações adicionais por papel podem ser feitas no frontend
- Funções do Supabase:
get_user_role(),get_user_tenant_id()
- Usuário insere email/senha
signIn()chamasupabase.auth.signInWithPassword()- Supabase retorna JWT
AuthContextbusca perfil do usuário na tabelausers- Se autenticado, redireciona para
/(tabs) - Se não autenticado, redireciona para
/login
- Usuário clica no FAB da Agenda
- Formulário de novo agendamento
- Seleção de cliente, serviço, barbeiro, data/hora
- Validação de conflitos via função
check_appointment_conflict() - Inserção na tabela
appointments - RLS garante que
tenant_idestá correto - Lista de agendamentos atualiza automaticamente (React Query)
- Atendente/Admin clica no FAB de Vendas
- PDV: adiciona serviços/produtos ao carrinho
- Seleciona cliente (opcional)
- Aplica desconto (opcional)
- Registra pagamentos (pode ser múltiplos)
- Ao salvar:
- Cria registro em
sales - Cria registros em
sale_items - Cria registros em
payments - Trigger automático diminui estoque de produtos
- Trigger automático recalcula totais da venda
- Cria registro em
- Geração de recibo (futuro: PDF no Storage)
- Entrada de produto: Admin registra compra → trigger cria
stock_movementtipopurchase - Venda de produto: Trigger automático cria
stock_movementtiposalee diminuistock_quantity - Ajuste manual: Admin pode ajustar estoque → cria movimento tipo
adjustment - Alertas: View
inventory_statusmostra produtos com estoque baixo
O banco possui views otimizadas para relatórios:
SELECT * FROM daily_revenue
WHERE tenant_id = '<tenant_id>'
AND sale_date >= '2025-01-01';Retorna: total_sales, total_revenue, avg_ticket, total_discounts por dia
SELECT * FROM service_performance
WHERE tenant_id = '<tenant_id>'
ORDER BY total_revenue DESC
LIMIT 10;Retorna: serviços mais vendidos, receita por serviço
SELECT * FROM barber_performance
WHERE tenant_id = '<tenant_id>'
ORDER BY total_revenue DESC;Retorna: performance por barbeiro (vendas, itens, receita)
SELECT * FROM inventory_status
WHERE tenant_id = '<tenant_id>' AND status = 'low_stock';Retorna: produtos com estoque baixo ou zerado
# Build APK (Android)
eas build --platform android --profile production
# Build IPA (iOS)
eas build --platform ios --profile productionbun expo export:web- Row Level Security (RLS): Todas as tabelas têm políticas que verificam
tenant_id - Auth Context: Verifica autenticação antes de renderizar rotas protegidas
- Anon Key: Só a chave anônima é exposta no cliente
- Senhas: Hash com bcrypt no Supabase Auth
- Audit Logs: Tabela
audit_logsregistra ações importantes
O schema inclui dados de exemplo:
- Tenant: Barbearia Demo (slug:
demo) - Serviços: Corte Masculino, Barba, Corte + Barba, Corte Infantil, Pézinho
- Produtos: Pomada, Shampoo, Óleo para Barba, Cera, Balm
- Clientes: João Silva, Pedro Santos, Carlos Oliveira, Rafael Costa, Lucas Ferreira
Credenciais de acesso:
Email: admin@demo.com
Senha: Admin123!
- CRUD Completo de Clientes, Serviços e Produtos
- PDV Completo com carrinho de compras interativo
- Notificações Push para lembretes de agendamento
- Calendário Semanal na Agenda com visualização ampliada
- Modo Escuro (Dark Mode)
- Relatórios Exportáveis (CSV, PDF, Excel)
- Gráficos Avançados (Linhas, Barras, Pizza, Funil)
- Envio de Lembretes por email/SMS/WhatsApp
- Busca e Filtros Avançados em todas as telas
- Perfil de Cliente com histórico completo de atendimentos
- Sistema de Comissões para barbeiros
- Programa de Fidelidade para clientes
- Agendamento Online - App para clientes finais
- Integração com Pagamento (PIX, Cartão)
- Multi-idioma (PT, EN, ES)
- Backup Automático de dados
- Modo Offline com sincronização
- Reconhecimento Facial para check-in
- Análise Preditiva de horários de pico com IA
- Sugestões Personalizadas de serviços baseadas em IA
- Integração com Redes Sociais para marketing
- Gamificação para engajamento de clientes
Causa: O usuário não está vinculado corretamente ao tenant.
Solução:
- Verifique se o usuário existe na tabela
users:
SELECT * FROM users WHERE email = 'seu@email.com';- Verifique se o
tenant_idestá correto - Confirme que as políticas RLS foram criadas corretamente executando todo o
schema.sql
Causa: Token de autenticação expirado ou inválido.
Solução:
- Faça logout e login novamente no app
- Verifique se as credenciais do Supabase em
lib/supabase.tsestão corretas - Limpe o cache do app e reinstale
Causa: Sem dados no banco ou problema de sincronização.
Solução:
- Verifique se o
tenant_iddo usuário está correto:
SELECT tenant_id FROM users WHERE id = auth.uid();- Execute queries diretamente no SQL Editor do Supabase para verificar dados
- Confira o console do navegador/app para erros JavaScript
- Use
Pull-to-Refreshnas telas para forçar atualização
Causa: API keys expostas no código.
Solução:
- Mova todas as chaves para variáveis de ambiente (
.env) - Configure secrets no EAS:
eas secret:create --scope project --name GROQ_API_KEY --value sua_chave- Reescreva o histórico do Git se necessário (veja seção anterior)
Causa: Credenciais incorretas ou problemas de rede.
Solução:
- Verifique a URL e Anon Key em
lib/supabase.ts - Teste a conexão no SQL Editor do Supabase
- Verifique se o projeto Supabase está ativo
- Confirme que não há firewall bloqueando a conexão
Causa: Chave da API Groq não configurada ou inválida.
Solução:
- Verifique se
GROQ_API_KEYestá no.env - Confirme que a chave é válida em console.groq.com
- Verifique se há créditos disponíveis na conta Groq
- Confira o console para erros de API
R: O SmartAgenda é um software proprietário da SmartAgenda. Para uso comercial é necessário obter uma licença. Entre em contato para mais informações sobre planos e preços. Para demonstração ou avaliação, consulte nossa equipe de vendas.
R: Sim! O sistema é multi-tenant e suporta múltiplas unidades. Cada barbearia é um tenant separado com isolamento total de dados. Consulte nossos planos para licenciamento de múltiplas unidades.
R: Atualmente não, mas está no roadmap. O app requer conexão com internet para sincronizar com o Supabase.
R: Sim! O código é totalmente aberto. Você pode modificar cores em constants/colors.ts e componentes conforme necessário.
R: Os dados estão no Supabase. Você pode exportar via SQL Editor ou usar a API do Supabase para backups automáticos.
R: Atualmente registra vendas com múltiplos métodos (Dinheiro, Cartão, PIX, etc.). Integração com gateways de pagamento está planejada.
R: Este é um software proprietário. Contribuições externas não são aceitas no momento. Se você identificou um bug ou tem sugestões de melhorias, entre em contato com nosso suporte técnico.
R: Não. Modificações, engenharia reversa, descompilação ou qualquer alteração no código são estritamente proibidas nos termos da licença proprietária. Para customizações, consulte nossos planos empresariais.
Interessado em usar o SmartAgenda na sua barbearia ou rede de barbearias?
- 📧 Email Comercial: vendas@smartagenda.com.br
- 📞 Telefone: +55 (11) 9999-9999
- 💬 WhatsApp Business: Clique aqui
- 🌐 Website: www.smartagenda.com.br
Já é cliente e precisa de ajuda?
- 📧 Email Suporte: suporte@smartagenda.com.br
- 📚 Central de Ajuda: help.smartagenda.com.br
- 🎫 Abrir Ticket: Portal do Cliente
Para entender melhor a arquitetura e configuração:
- 📖 Este README: Documentação completa do sistema
- 🗄️ Schema SQL: Consulte
database/schema.sqlpara o modelo de dados - 📚 Documentação Supabase: supabase.com/docs
- 📱 Documentação Expo: docs.expo.dev
Este projeto está sob Licença Proprietária da SmartAgenda. Todos os direitos reservados.
Para questões sobre licenciamento comercial, permissões especiais ou uso autorizado, entre em contato:
- 📧 Email: contato@smartagenda.com.br
- 🌐 Website: www.smartagenda.com.br
Veja o arquivo LICENSE para os termos completos e condições de uso.
Este projeto foi construído com tecnologias incríveis:
- React Native - Framework mobile
- Expo - Plataforma de desenvolvimento
- Supabase - Backend as a Service
- TypeScript - Tipagem estática
- TanStack Query - Gerenciamento de estado
- Lucide Icons - Ícones modernos
- Groq - API de IA ultrarrápida
Interessado no SmartAgenda? Vamos conversar!
📧 comercial@smartagenda.com.br | 📞 +55 (11) 9999-9999 | 🌐 www.smartagenda.com.br
© 2025 SmartAgenda - Todos os direitos reservados 💈
Software Proprietário | Licença Comercial Necessária
Transformando a gestão de barbearias com tecnologia e inovação
Uso não autorizado, cópia, modificação ou distribuição são estritamente proibidos.

















