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.
- 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.
- 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.
- 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.
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.
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
| 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 |
- 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.
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
- 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.
git clone https://github.com/KennnedyRamos/barberkr-app.git
cd barberkr-app
flutter pub getO 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 configureConfirme que o arquivo foi criado em:
android/app/google-services.json
Para publicar as regras e os índices no projeto selecionado:
firebase deploy --only firestoreflutter emulators
flutter emulators --launch Pixel_7_Pro
flutter devices
flutter run -d emulator-5554Se aparecer INSTALL_FAILED_INSUFFICIENT_STORAGE, abra Android Studio → Device Manager → menu do emulador → Wipe Data e inicie o dispositivo novamente.
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.jsOs 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.
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.
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.
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.ps1Saí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.
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.
| 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.
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.
Distribuído sob a licença MIT. Consulte LICENSE.
Kennedy Ramos


