APP_BARBEARIA é uma aplicação web desenvolvida com Flask, projetada para gerenciar as operações de uma barbearia moderna.
A plataforma permite que clientes criem contas, agendem serviços e gerenciem seus perfis pessoais.
Administradores têm acesso a um painel completo que inclui:
- Visualização da agenda diária.
- Consulta de agendamentos por data.
- Gerenciamento dos serviços oferecidos (CRUD).
- Acesso a relatórios analíticos sobre desempenho do negócio, incluindo lucros e serviços populares.
Um diferencial importante do sistema é a incorporação de inteligência artificial, que sugere datas de agendamento para clientes com base no histórico, além de segmentar os clientes em grupos de valor (baseado em RFM — Recência, Frequência e Valor Monetário), auxiliando em estratégias de marketing e fidelização.
- Autenticação de Usuários:
Cadastro, login, logout e recuperação de senha via e-mail de forma segura. - Gerenciamento de Perfil:
Visualização e edição do nome de usuário, e-mail e foto de perfil. - Sistema de Agendamento:
Formulário intuitivo para agendar serviços, com seleção dinâmica de data, hora e serviço, validação de dados e prevenção de agendamentos duplicados. - Notificação por E-mail:
Envio automático de confirmação de agendamento para o e-mail do cliente. - Sugestão Inteligente:
Sistema que usa modelo de machine learning para sugerir a melhor data para o próximo agendamento do cliente, com base na frequência histórica.
- Controle de Acesso:
Rotas administrativas protegidas por permissãoadmin. - Visualização da Agenda:
- Agenda do Dia: visualização dos agendamentos no dia atual, com possibilidade de exclusão.
- Consulta por Data: pesquisa de agendamentos por data específica.
- Gerenciamento de Serviços (CRUD):
Interface para adicionar, editar e excluir serviços, atualizando nome e valor. - Relatórios e Dashboards:
Gráficos interativos que mostram:- Número de agendamentos por dia.
- Tipos de serviço mais procurados (doughnut).
- Lucro diário acumulado, com filtro de período.
- Segmentação de Clientes (K-means):
Agrupamento dos clientes em segmentos "Alto Valor", "Intermediário" e "Novo Cliente" baseado na análise RFM para ajudar no direcionamento de ações de marketing.
-
Backend:
- Python
- Flask
- Flask-SQLAlchemy
- Flask-Migrate & Alembic (migrações de banco)
- Flask-Login
- Flask-Bcrypt (hashing de senha)
- Flask-Mail (envio de emails)
- Flask-WTF (formularios e validação)
-
Banco de Dados:
- SQLite (desenvolvimento)
- SQLAlchemy (ORM)
-
Frontend:
- Jinja2 (templating Flask)
- HTML5, CSS3, JavaScript
- Bootstrap 5 (UI responsiva)
- Chart.js (visualização gráfica dos relatórios)
-
Machine Learning:
- Pandas (manipulação de dados)
- Scikit-learn (modelos RandomForestRegressor para previsão e KMeans para segmentação)
-
Outras:
- python-dotenv (variáveis de ambiente)
- Pillow (manipulação de imagens)
APP_BARBEARIA_PI/
├── App_Barbearia/ # Pacote principal da aplicação
│ ├── static/ # Arquivos estáticos (CSS, imagens, JS)
│ ├── templates/ # Templates HTML (Jinja2)
│ ├── __init__.py # Fábrica da aplicação e inicialização das extensões Flask
│ ├── decorators.py # Decorators personalizados (ex: controle de acesso admin)
│ ├── forms.py # Definição dos formulários via Flask-WTF
│ ├── ml_model.py # Modelos de Machine Learning (previsão e segmentação)
│ ├── models.py # Modelos do banco de dados com SQLAlchemy
│ ├── routs.py # Rotas e controladores (lógica das views)
│ └── instance/ # Configurações da instância e scripts auxiliares
│ ├── reset_banco.py # Reset de tabelas, exclusão e atualização no banco
│ ├── reset_usuario.py # Reset da tabela usuário (ex: senha padrão)
│ └── verificar_senha.py # Ferramenta para checar hash de senha
├── migrations/ # Scripts de migração do banco via Alembic
│ └── versions/ # Versões das migrações
├── tests/ # Testes unitários e funcionais da aplicação
│ ├── conftest.py # Configuração para o ambiente de testes
│ ├── test_auth.py # Testes para autenticação e registro
│ └── test_admin.py # Testes para funcionalidades administrativas
├── app.py # Arquivo principal para iniciar a aplicação
├── ler_db.py # Script para consulta rápida ao banco SQLite (debug)
├── set_admin.py # Script CLI para promover usuários a admins
└── requirements.txt # Arquivo de dependências do projeto
O banco é composto pelas tabelas principais:
| Coluna | Tipo | Restrições | Descrição |
|---|---|---|---|
| id | Integer | PK | Identificador único |
| username | String(30) | Único, não nulo | Nome do usuário |
| String(120) | Único, não nulo | ||
| foto_perfil | String(20) | Não nulo, padrão 'default.jpg' | Nome arquivo foto perfil |
| senha | String(60) | Não nulo | Senha (hash bcrypt) |
| role | String(20) | Não nulo, default 'cliente' | Papel do usuário (admin/cliente) |
| Coluna | Tipo | Restrições | Descrição |
|---|---|---|---|
| id | Integer | PK | Identificador único |
| nome | String(100) | Único, não nulo | Nome do serviço (ex: Corte) |
| valor | Float | Não nulo | Preço do serviço |
| Coluna | Tipo | Restrições | Descrição |
|---|---|---|---|
| id | Integer | PK | Identificador único |
| username | String | Não nulo | Nome do cliente para o agendamento |
| cell | String | Não nulo | Número de celular do cliente |
| servico | String | Não nulo | Nome do serviço agendado |
| valor | Float | Não nulo, default 0.0 | Valor do serviço no momento do agendamento |
| hora | String | Não nulo | Hora agendada |
| data | Date | Não nulo | Data do agendamento |
| id_usuario | Integer | FK para usuario.id | Referência ao usuário que agendou |
- Python 3.8 ou superior
- Git (opcional para clonar o repositório)
- Clone o repositório
git clone <url-do-seu-repositorio>
cd APP_BARBEARIA_PI
- Crie e ative um ambiente virtual
Windows
python -m venv venv
.\venv\Scripts\activate
macOS/Linux
python3 -m venv venv
source venv/bin/activate
- Instale as dependências
Crie um arquivo chamadorequirements.txt(exemplo abaixo) e execute:
pip install -r requirements.txt
Exemplo requirements.txt:
flask>=2.0
flask_sqlalchemy>=2.5
flask_wtf>=1.0
flask_login>=0.6
flask_bcrypt>=1.0
pywhatkit>=5.4
flask_mail>=0.9
wtforms>=3.0
pillow>=10.0
email_validator>=2.0
- Configure variáveis de ambiente
Crie o arquivo.envna raiz e preencha:
SECRET_KEY='sua-chave-secreta-aqui'
MAIL_USERNAME='seu-email-do-gmail@gmail.com'
MAIL_PASSWORD='sua-senha-de-app-do-gmail'
Nota: Para o MAIL_PASSWORD, gere uma senha de app na conta Google para o envio via SMTP.
- Configure o banco de dados
Com o ambiente virtual ativo, rode as migrações para criar as tabelas:
flask db upgrade
- Crie um usuário administrador
Primeiro, faça o registro de um novo usuário via interface web.
Depois rode o script CLI:
python set_admin.py
Informe o e-mail do usuário para promover para administrador.
- Inicie a aplicação
flask run --debug
A aplicação estará disponível em: http://127.0.0.1:5000/
-
set_admin.py
Transforma um usuário existente em administrador pelo e-mail. -
ler_db.py
Script para conexão SQLite e listagem do conteúdo para debug. -
instance/reset_banco.py
Interface simples para resetar tabelas, remover registros ou atualizar campos específicos no banco. -
instance/reset_usuario.py
Script para resetar a tabelausuarioe inserir usuários padrão com senha definida. -
instance/verificar_senha.py
Verifica se uma senha em texto plano confere com o hash bcrypt armazenado no banco para um usuário específico.
-
Previsão de Próxima Visita:
Modelo baseado emRandomForestRegressorque usa dados históricos de agendamento para sugerir a próxima data para um cliente, considerando a média de dias entre visitas e o dia da semana. -
Segmentação de Clientes (K-means):
Análise dos clientes usando as métricas RFM para agrupá-los em três segmentos: "Alto Valor", "Intermediário" e "Novo Cliente".
Os modelos são treinados a partir dos dados da base e integrados à aplicação para fornecer sugestões no fluxo de agendamento e análise administrativa.
- Framework e extensões Flask: flask.palletsprojects.com
- SQLAlchemy ORM: docs.sqlalchemy.org
- Flask-Migrate & Alembic: flask-migrate.readthedocs.io
- Uso do Flask-Login: flask-login.readthedocs.io
- Flask-Mail para envio de e-mails: flask-mail.readthedocs.io
- Machine Learning com scikit-learn: scikit-learn.org
- Pandas para manipulação de dados: pandas.pydata.org
- Chart.js para gráficos: chartjs.org
- Bootstrap 5 para UI responsiva: getbootstrap.com
Para dúvidas, sugestões ou contribuições, entre em contato com o desenvolvedor responsável pelo projeto.
APP_BARBEARIA - Gerencie sua barbearia com estilo e inteligência!