Skip to content

Smart-Agenda-Pro/SmartAgenda

Repository files navigation

SmartAgenda Management

💈 SmartAgenda - Sistema de Gestão para Barbearias

Solução Completa e Inteligente para Gestão de Barbearias

React Native Expo TypeScript Supabase License

FuncionalidadesScreenshotsInstalaçãoDocumentaçãoDeploy


📋 Índice


🎯 Visão Geral

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.

🌟 Diferenciais

  • 🤖 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

✅ Principais Recursos

  • 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

🏗️ Arquitetura

Frontend (React Native)

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

Backend (Supabase)

  • 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)

Banco de Dados

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)

✨ Funcionalidades

1. 🔐 Autenticação e Segurança

  • 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

2. 📊 Dashboard Inteligente

  • 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

3. 📅 Agenda Digital Avançada

  • 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

4. 💰 Sistema de Vendas (PDV)

  • 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)

5. 👥 Gestão de Clientes

  • 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

6. 💈 Gerenciamento de Serviços e Produtos

  • 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)

7. 📊 Relatórios e Análises

  • 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)

8. 🏢 Multi-tenant (Multi-loja)

  • 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

📦 Requisitos

Pré-requisitos

Ferramentas Recomendadas

  • VS Code com extensões:
    • React Native Tools
    • TypeScript
    • ESLint
    • Prettier
  • Expo CLI global: npm install -g expo-cli eas-cli

� Screenshots da Aplicação

🏠 Telas Principais

Dashboard Principal
Dashboard Principal
Gráficos e Análises
Gráficos e Análises
Assistente IA
Assistente IA

🔐 Autenticação

Tela de Login
Login Seguro
Recuperação de Senha
Recuperação de Senha
Perfil do Usuário
Perfil do Usuário

📅 Agenda e Compromissos

Agenda Diária
Agenda Diária
Lista de Compromissos
Lista de Compromissos
Novo Agendamento
Novo Agendamento

💰 Vendas e Financeiro

Histórico de Vendas
Histórico de Vendas
Nova Venda - PDV
Nova Venda - PDV
Relatórios
Relatórios

👥 Cadastros e Gestão

Menu de Cadastros
Menu de Cadastros
Total de Clientes
Gestão de Clientes
Novo Cliente
Cadastro de Cliente

💈 Serviços e Produtos

Gerenciar Serviços
Gerenciar Serviços
Novo Serviço
Cadastro de Serviço
Menu de Navegação
Menu de Navegação

📊 Resumo das Funcionalidades

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

�🚀 Instalação

1. Clone e instale dependências

# As dependências já estão instaladas, mas se precisar:
bun install

2. Configure variáveis de ambiente

Supabase

O projeto já está configurado com as credenciais do Supabase em lib/supabase.ts:

const supabaseUrl = 'https://icseawozzuwkkicsmqnf.supabase.co';
const supabaseAnonKey = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...';

Groq AI (Assistente Inteligente)

Para habilitar o assistente IA, você precisa configurar a chave da API Groq:

  1. Crie uma conta gratuita em console.groq.com
  2. Gere uma API Key no dashboard
  3. Crie um arquivo .env na raiz do projeto:
GROQ_API_KEY=sua_chave_aqui
  1. Para builds EAS, configure a variável de ambiente:
eas secret:create --scope project --name GROQ_API_KEY --value sua_chave_aqui

Nota: O arquivo .env está no .gitignore para proteger suas credenciais.


🗄️ Configuração do Supabase

1. Execute o Schema SQL

  1. Acesse o Supabase Dashboard
  2. Navegue até: SQL Editor
  3. Copie todo o conteúdo de database/schema.sql
  4. 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)

2. Crie os Storage Buckets

  1. Vá em Storage > Create bucket
  2. Crie os seguintes buckets:
    • receipts (recibos de venda)
    • reports (relatórios exportados)
    • logos (logos dos tenants)
    • products (fotos de produtos)

3. Configure Políticas de Storage

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).

4. Crie o primeiro usuário Admin

Passo 1: Criar usuário no Supabase Auth

  1. Acesse Supabase Dashboard
  2. Vá em Authentication > Users > Add user
  3. Método: Email
  4. Preencha:
    • Email: Admin53@gmail.com
    • Password: EpKrRd020413
    • ✅ Marque Auto Confirm User (importante!)
  5. Clique em Create user
  6. IMPORTANTE: Copie o UUID do usuário criado (aparece na lista de usuários)

Passo 2: Vincular ao tenant

  1. Vá em SQL Editor
  2. 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'
);
  1. Execute o comando
  2. Se tudo der certo, você verá: "Success. No rows returned"

Credenciais para login no app:

Email: admin@demo.com
Senha: Admin123!

📱 Executar o App

# Inicie o servidor de desenvolvimento
bun start

# Ou para web
bun start-web

Escaneie o QR code com:

  • iOS: Câmera nativa ou Expo Go
  • Android: Expo Go app

📂 Estrutura do Projeto

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

👥 Papéis e Permissões

Admin

  • Acesso total ao sistema
  • Gerenciar usuários, configurações
  • Ver todos os relatórios
  • Acesso a todas as funcionalidades

Barbeiro

  • Consultar agenda própria
  • Registrar atendimentos e vendas associadas
  • Ver clientes
  • Não pode alterar configurações ou ver dados de outros barbeiros

Atendente

  • 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()

🔄 Fluxos Principais

Fluxo de Login

  1. Usuário insere email/senha
  2. signIn() chama supabase.auth.signInWithPassword()
  3. Supabase retorna JWT
  4. AuthContext busca perfil do usuário na tabela users
  5. Se autenticado, redireciona para /(tabs)
  6. Se não autenticado, redireciona para /login

Fluxo de Agendamento

  1. Usuário clica no FAB da Agenda
  2. Formulário de novo agendamento
  3. Seleção de cliente, serviço, barbeiro, data/hora
  4. Validação de conflitos via função check_appointment_conflict()
  5. Inserção na tabela appointments
  6. RLS garante que tenant_id está correto
  7. Lista de agendamentos atualiza automaticamente (React Query)

Fluxo de Venda

  1. Atendente/Admin clica no FAB de Vendas
  2. PDV: adiciona serviços/produtos ao carrinho
  3. Seleciona cliente (opcional)
  4. Aplica desconto (opcional)
  5. Registra pagamentos (pode ser múltiplos)
  6. 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
  7. Geração de recibo (futuro: PDF no Storage)

Fluxo de Estoque

  • Entrada de produto: Admin registra compra → trigger cria stock_movement tipo purchase
  • Venda de produto: Trigger automático cria stock_movement tipo sale e diminui stock_quantity
  • Ajuste manual: Admin pode ajustar estoque → cria movimento tipo adjustment
  • Alertas: View inventory_status mostra produtos com estoque baixo

📊 Relatórios e Views

O banco possui views otimizadas para relatórios:

daily_revenue

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

service_performance

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

barber_performance

SELECT * FROM barber_performance
WHERE tenant_id = '<tenant_id>'
ORDER BY total_revenue DESC;

Retorna: performance por barbeiro (vendas, itens, receita)

inventory_status

SELECT * FROM inventory_status
WHERE tenant_id = '<tenant_id>' AND status = 'low_stock';

Retorna: produtos com estoque baixo ou zerado


🚢 Deploy

Mobile (Expo)

# Build APK (Android)
eas build --platform android --profile production

# Build IPA (iOS)
eas build --platform ios --profile production

Web (se aplicável)

bun expo export:web

🔐 Segurança

  1. Row Level Security (RLS): Todas as tabelas têm políticas que verificam tenant_id
  2. Auth Context: Verifica autenticação antes de renderizar rotas protegidas
  3. Anon Key: Só a chave anônima é exposta no cliente
  4. Senhas: Hash com bcrypt no Supabase Auth
  5. Audit Logs: Tabela audit_logs registra ações importantes

🧪 Dados de Teste

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!

⚠️ Importante: Você precisa criar o usuário manualmente no Supabase seguindo as instruções na seção Configuração do Supabase.


📝 Próximos Passos e Roadmap

🚀 Em Desenvolvimento

  • 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)

🎯 Planejado para Próximas Versões

  • 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

💡 Ideias Futuras

  • 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

🐛 Troubleshooting

❌ Erro: "Row Level Security policy violation"

Causa: O usuário não está vinculado corretamente ao tenant.

Solução:

  1. Verifique se o usuário existe na tabela users:
SELECT * FROM users WHERE email = 'seu@email.com';
  1. Verifique se o tenant_id está correto
  2. Confirme que as políticas RLS foram criadas corretamente executando todo o schema.sql

❌ Erro: "Invalid JWT" ou "Session expired"

Causa: Token de autenticação expirado ou inválido.

Solução:

  1. Faça logout e login novamente no app
  2. Verifique se as credenciais do Supabase em lib/supabase.ts estão corretas
  3. Limpe o cache do app e reinstale

❌ Dados não aparecem no Dashboard

Causa: Sem dados no banco ou problema de sincronização.

Solução:

  1. Verifique se o tenant_id do usuário está correto:
SELECT tenant_id FROM users WHERE id = auth.uid();
  1. Execute queries diretamente no SQL Editor do Supabase para verificar dados
  2. Confira o console do navegador/app para erros JavaScript
  3. Use Pull-to-Refresh nas telas para forçar atualização

❌ Erro ao fazer build EAS: "Secret scanning detected"

Causa: API keys expostas no código.

Solução:

  1. Mova todas as chaves para variáveis de ambiente (.env)
  2. Configure secrets no EAS:
eas secret:create --scope project --name GROQ_API_KEY --value sua_chave
  1. Reescreva o histórico do Git se necessário (veja seção anterior)

❌ App não conecta ao Supabase

Causa: Credenciais incorretas ou problemas de rede.

Solução:

  1. Verifique a URL e Anon Key em lib/supabase.ts
  2. Teste a conexão no SQL Editor do Supabase
  3. Verifique se o projeto Supabase está ativo
  4. Confirme que não há firewall bloqueando a conexão

❌ Assistente IA não responde

Causa: Chave da API Groq não configurada ou inválida.

Solução:

  1. Verifique se GROQ_API_KEY está no .env
  2. Confirme que a chave é válida em console.groq.com
  3. Verifique se há créditos disponíveis na conta Groq
  4. Confira o console para erros de API

❓ FAQ (Perguntas Frequentes)

P: O SmartAgenda é gratuito?

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.

P: Posso usar para múltiplas barbearias?

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.

P: Funciona offline?

R: Atualmente não, mas está no roadmap. O app requer conexão com internet para sincronizar com o Supabase.

P: Posso personalizar o design?

R: Sim! O código é totalmente aberto. Você pode modificar cores em constants/colors.ts e componentes conforme necessário.

P: Como faço backup dos dados?

R: Os dados estão no Supabase. Você pode exportar via SQL Editor ou usar a API do Supabase para backups automáticos.

P: Suporta quais formas de pagamento?

R: Atualmente registra vendas com múltiplos métodos (Dinheiro, Cartão, PIX, etc.). Integração com gateways de pagamento está planejada.

P: Posso contribuir com o projeto?

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.

P: Posso modificar o código-fonte?

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.


📞 Suporte e Contato Comercial

💼 Vendas e Licenciamento

Interessado em usar o SmartAgenda na sua barbearia ou rede de barbearias?

🛠️ Suporte Técnico

Já é cliente e precisa de ajuda?

📚 Recursos para Desenvolvedores

Para entender melhor a arquitetura e configuração:

  • 📖 Este README: Documentação completa do sistema
  • 🗄️ Schema SQL: Consulte database/schema.sql para o modelo de dados
  • 📚 Documentação Supabase: supabase.com/docs
  • 📱 Documentação Expo: docs.expo.dev

📄 Licença

Este projeto está sob Licença Proprietária da SmartAgenda. Todos os direitos reservados.

⚠️ IMPORTANTE: Este é um software proprietário. O uso, cópia, modificação ou distribuição não autorizados são estritamente proibidos e podem resultar em ações legais.

Para questões sobre licenciamento comercial, permissões especiais ou uso autorizado, entre em contato:

Veja o arquivo LICENSE para os termos completos e condições de uso.


� Agradecimentos e Tecnologias

Este projeto foi construído com tecnologias incríveis:


💼 Entre em Contato

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


⚠️ AVISO LEGAL: Este software é protegido por direitos autorais e leis de propriedade intelectual.
Uso não autorizado, cópia, modificação ou distribuição são estritamente proibidos.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors