Skip to content

Repository files navigation

Logo BarberKR

BarberKR

Agendamento inteligente e gestão de rotina para barbearias.

Flutter Dart Firebase Android CI License: MIT

Ambiente visual do BarberKR


✨ Sobre o projeto

O BarberKR é uma aplicação mobile construída em Flutter para conectar clientes e barbearias em uma experiência única de descoberta, agendamento e atendimento. O cliente encontra estabelecimentos próximos, consulta horários, conversa com a barbearia e acompanha seus agendamentos. O barbeiro recebe uma visão operacional do dia, administra serviços, planos, disponibilidade, histórico e faturamento. Cada barbearia define os próprios planos mensais para clientes, enquanto o BarberKR Premium é exclusivo do barbeiro.

Mais do que uma demonstração visual, este projeto explora problemas reais de produto: concorrência na reserva do mesmo horário, identidade de quem cancelou, comunicação individual, notificações persistentes, privacidade, pagamentos marketplace e preparação de releases assinados.

🚀 Projeto de portfólio desenvolvido por Kennedy Ramos, com foco em engenharia mobile, experiência do usuário e evolução contínua de produto.

🎯 Destaques

  • Dois perfis no mesmo aplicativo: cliente e barbeiro.
  • Reserva transacional: um horário não pode ser ocupado por dois clientes.
  • Painel diário com próximos atendimentos e atividades recentes.
  • Agenda e histórico separados, com pesquisa por cliente e filtros por período.
  • Cancelamento rastreável por autor, motivo e data.
  • Chat individual com histórico e notificações não lidas.
  • Descoberta de barbearias próximas, com consentimento de localização.
  • Logo personalizada por barbearia e identidade visual moderna.
  • Pix, saldo Mercado Pago e dinheiro no local, com integração marketplace segura.
  • Planos mensais definidos pelo barbeiro e exibidos somente dentro da respectiva barbearia.
  • Recursos administrativos Premium sinalizados de forma clara para o barbeiro.
  • Painel financeiro mensal com gráfico diário, serviços realizados, taxas e movimentações.
  • Navegação do barbeiro reduzida a Resumo, Agenda e Mais, priorizando as ações diárias.
  • Regras de segurança, CI, testes e assinatura de release para Android.

📱 Experiência por perfil

Tela de acesso do BarberKR

Cliente

  • Cadastro, login e recuperação de senha com Firebase Authentication.
  • Busca por nome, bairro ou cidade.
  • Sugestões ordenadas por proximidade; a localização do cliente não é persistida.
  • Perfil público da barbearia, serviços, preços, avaliações e rotas.
  • Consulta de horários e agendamento com pagamento em dinheiro ou online quando habilitado pela barbearia.
  • Planos mensais definidos pelo barbeiro e disponíveis apenas na página da barbearia.
  • Cancelamento de agendamento permitido até 12 horas antes do horário.
  • Histórico de atendimentos confirmados.
  • Avaliação da barbearia após o atendimento.
  • Chat e central de notificações.

Barbeiro

  • Dashboard de rotina com total do dia, próximo horário e indicadores.
  • Atividades recentes limitadas aos cinco eventos mais relevantes.
  • Agenda operacional e conclusão de atendimentos.
  • Histórico com filtros por dia, mês ou ano, nome do cliente e tipo de evento.
  • Cadastro de serviços, preços, planos, endereço, localização e horários.
  • Premium exclusivo para liberar pagamentos online, cancelamentos administrativos, histórico e financeiro.
  • Personalização da logo exibida aos clientes.
  • Conversas individuais e notificações de agendamento, cancelamento e pagamento.
  • Conexão de uma conta Mercado Pago por barbearia, quando o backend estiver publicado.
  • Painel financeiro por mês, com receita bruta/líquida, gráfico diário, serviços, taxas e previsões.
  • Área Mais agrupando Financeiro, Histórico e Minha barbearia sem sobrecarregar a navegação.

💼 Valor de produto e engenharia

O projeto foi desenvolvido como um produto real, e não apenas como uma coleção de telas. Cada fluxo considera experiência, segurança e operação:

  • Produto: descoberta local, agenda, comunicação e financeiro no mesmo aplicativo.
  • UX: ações frequentes permanecem na navegação principal; recursos administrativos ficam agrupados.
  • Planos: planos mensais pertencem à barbearia que os criou; o Premium comercial pertence somente ao barbeiro.
  • Backend: valores e comissão são calculados no servidor, nunca confiados ao cliente Flutter.
  • Escalabilidade: consultas possuem limites, avaliações são carregadas em lotes e imagens são comprimidas e mantidas em cache durante a renderização.
  • Entrega: análise estática, testes Flutter/Node, auditoria de dependências, CI e artefatos Android assinados.

🧠 Decisões de engenharia

flowchart LR
    A[Flutter / Android] --> B[Firebase Authentication]
    A --> C[Cloud Firestore]
    A --> D[Firebase Cloud Messaging]
    A --> E[Mapas e localização]
    A --> F[Cloud Functions]
    F --> G[Mercado Pago Marketplace]
    C --> H[Regras e índices]
    F --> C
Loading
Tema Solução aplicada
Concorrência de horários Transação atômica entre appointments e slots
Consistência de cadastro Perfil do barbeiro e barbearia gravados no mesmo batch; falhas iniciais são revertidas
Segurança Regras com campos permitidos, identidade imutável e validação de participantes
Pagamentos Pix/saldo Mercado Pago, preço validado no servidor, OAuth por estabelecimento e webhook assinado
Financeiro Valores calculados no backend; saldo e transferências permanecem no Mercado Pago
Navegação Três destinos principais; ferramentas de gestão agrupadas em Mais
Desempenho Consultas limitadas, carregamento concorrente controlado e logos otimizadas
Tokens OAuth Criptografia AES-256-GCM antes de persistir
Notificações Push em primeiro plano + histórico por usuário + contador de não lidas
Privacidade Consentimento contextual de localização e links legais dentro do app
Release Android Chave privada fora do Git, R8 e bloqueio de fallback para assinatura debug
Qualidade flutter analyze, testes automatizados e workflow de CI

🛠️ Stack

  • Flutter / Dart — interface e regras de apresentação.
  • Firebase Authentication — contas e sessões.
  • Cloud Firestore — perfis, barbearias, agenda, chat, avaliações e notificações.
  • Firebase Cloud Messaging — notificações push.
  • Cloud Functions for Firebase — eventos e backend seguro de pagamentos.
  • Mercado Pago Marketplace — Pix e saldo da conta direcionados a cada barbearia.
  • Geolocator + OpenStreetMap — proximidade, geocodificação e apoio à navegação.
  • GitHub Actions — análise, testes e validação das funções.

🗂️ Organização

lib/
├── app/
│   ├── models/       # Entidades e conversões de dados
│   ├── screens/      # Fluxos de cliente, barbeiro, chat e checkout
│   ├── services/     # Firebase, agenda, mensagens, notificações e pagamentos
│   ├── utils/        # Disponibilidade, cancelamento e mapas
│   └── widgets/      # Componentes reutilizáveis
└── main.dart         # Inicialização das integrações

functions/            # Backend Firebase e Mercado Pago
docs/                 # Privacidade, publicação e configuração
scripts/              # Execução e geração de releases
test/                 # Testes unitários e de widgets

🚀 Executando localmente

Pré-requisitos

  • Flutter 3.38.5 ou uma versão estável compatível.
  • Android Studio com Android SDK 36.
  • Um emulador Android ou dispositivo físico.
  • JDK 17 ou superior para o build Android.
  • Firebase CLI e JDK 21+ apenas para validar regras no emulador local.

1. Clone e dependências

git clone https://github.com/KennnedyRamos/barberkr-app.git
cd barberkr-app
flutter pub get

2. Firebase

O repositório inclui a configuração pública do cliente Firebase usada na demonstração Android. Como essas chaves também ficam presentes no APK, a proteção dos dados é feita por Authentication, regras do Firestore e restrições de API. Para trabalhar em um ambiente isolado, crie ou selecione seu próprio projeto, habilite Authentication por e-mail/senha, Cloud Firestore e Cloud Messaging, e então reconfigure o aplicativo:

dart pub global activate flutterfire_cli
flutterfire configure

Confirme que o arquivo foi criado em:

android/app/google-services.json

Para publicar as regras e os índices no projeto selecionado:

firebase deploy --only firestore

3. Emulador

flutter emulators
flutter emulators --launch Pixel_7_Pro
flutter devices
flutter run -d emulator-5554

Se aparecer INSTALL_FAILED_INSUFFICIENT_STORAGE, abra Android Studio → Device Manager → menu do emulador → Wipe Data e inicie o dispositivo novamente.

✅ Qualidade e testes

dart format --set-exit-if-changed lib test
flutter analyze
flutter test
npm audit --prefix functions --omit=dev --audit-level=high
npm test --prefix functions
node --check functions/index.js
node --check functions/mercado_pago.js

Os testes cobrem disponibilidade, identificação do responsável pelo cancelamento, regra de 12 horas, IDs estáveis de conversa, prioridade da logo, contador de notificações, navegação de gestão, layout financeiro compacto, proteção Premium, política promocional de comissão, checkout anual, resumo financeiro e agrupamentos por dia/serviço.

💳 Mercado Pago

O agendamento com Dinheiro — pagar no local funciona independentemente da conexão de pagamentos. Pix e saldo Mercado Pago usam uma arquitetura marketplace: cada barbearia autoriza a própria conta, e o backend cria o checkout com o preço obtido do cadastro no Firestore. Cartões e boleto ficam desabilitados nesse fluxo. A chave Pix é cadastrada somente na conta Mercado Pago da barbearia e não é armazenada pelo BarberKR.

No lançamento, cada barbearia recebe 30 dias sem comissão do BarberKR. Depois do período promocional, o backend aplica automaticamente 3% apenas aos pagamentos online aprovados; pagamentos no local não geram comissão para a plataforma. O painel financeiro informa receitas e taxas, mas o saldo real e as transferências via Pix são administrados na conta Mercado Pago da barbearia.

As Cloud Functions exigem um projeto Firebase no plano Blaze para publicação. Enquanto o backend não estiver publicado, o aplicativo mantém automaticamente a alternativa de pagamento no local. Consulte o guia completo em docs/mercado_pago_setup.md.

⭐ BarberKR Premium

O Premium é uma assinatura exclusiva do dono da barbearia. Ele não é um plano oferecido aos clientes. Sem Premium, o barbeiro mantém acesso à agenda básica, mas os recursos administrativos avançados ficam sinalizados e protegidos:

  • pagamentos online via Mercado Pago;
  • cancelamento administrativo de agendamentos;
  • histórico completo;
  • painel financeiro;
  • conexão da conta Mercado Pago.

O cancelamento do Premium interrompe a renovação futura sem reembolso. O acesso permanece disponível até o fim do período contratado, conforme o estado oficial da assinatura no backend.

Os planos mensais definidos por cada barbearia são diferentes do Premium do barbeiro. O cliente escolhe o plano, dia e horário, conclui o checkout do Mercado Pago e somente depois do pagamento aprovado a assinatura e os agendamentos são ativados. No chat, clientes continuam podendo conversar normalmente; barbeiros sem Premium veem apenas uma prévia e precisam assinar o Premium para ler e responder mensagens.

📦 Release Android

Nunca use uma chave debug em produção. Gere uma chave de upload local e faça backup dos arquivos privados:

.\scripts\create_upload_keystore.ps1
.\scripts\build_release.ps1

Saídas esperadas:

build/app/outputs/flutter-apk/app-release.apk
build/app/outputs/bundle/release/app-release.aab

O AAB é o artefato para a Play Store; o APK é útil para instalação direta e homologação. Veja o checklist em docs/PLAY_STORE_RELEASE.md.

🔐 Privacidade e segurança

Arquivos realmente sensíveis, como key.properties, keystores, tokens OAuth e segredos do backend, permanecem fora do controle de versão. As configurações públicas dos clientes Firebase não concedem acesso administrativo e continuam protegidas pelas regras versionadas neste projeto.

🧭 Status e próximos passos

Entrega Status
Fluxos de cliente e barbeiro ✅ Implementado
Agenda, histórico e cancelamentos ✅ Implementado
Chat e notificações no app ✅ Implementado
Descoberta por proximidade ✅ Implementado
Dinheiro no local ✅ Implementado
Painel financeiro mensal ✅ Implementado; dados online dependem das Functions
Mercado Pago Marketplace 🟡 Código pronto; publicação das Functions pendente do plano Blaze
Release Android assinado ✅ Automatizado
Publicação na Play Store 🟡 Requer conta do desenvolvedor, ficha da loja e envio manual do AAB

Próximas evoluções possíveis: testes de integração com Firebase Emulator Suite, paginação de históricos extensos, observabilidade de produção e painel web administrativo.

🤝 Contribuição

Issues e pull requests são bem-vindos. Antes de enviar uma alteração, execute a suíte de qualidade e descreva o impacto no fluxo de cliente e/ou barbeiro.

📄 Licença

Distribuído sob a licença MIT. Consulte LICENSE.

👨‍💻 Autor

Kennedy Ramos


Feito com Flutter, Dart e dedicação por Kennedy Ramos. 🚀

About

Aplicativo mobile de agendamento para barbearias, desenvolvido com Flutter e Firebase, com autenticação, agenda, chat, notificações, localização e integração com pagamentos.

Topics

Resources

Security policy

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages