Sistema web de gestão operacional para petshops e clínicas veterinárias, desenvolvido em PHP procedural com MySQL/MariaDB !
A V2 está estável e finalizada e permanece pública no GitHub como referência técnica.
O projeto não possui demonstração online ativa nem previsão de retorno do deploy.
Uma nova versão em Laravel será desenvolvida separadamente, com arquitetura e estrutura modernizadas.
O sistema foi desenvolvido a partir de necessidades observadas em um ambiente real de petshop. A versão pública utiliza dados demonstrativos/fictícios e sanitizados para preservar a privacidade dos dados originais.
O projeto está preparado para:
- apresentação em portfólio;
- publicação no GitHub;
- execução local com XAMPP.
A rotina de petshops e clínicas veterinárias envolve o gerenciamento de clientes, pets, serviços e atendimentos relacionados entre si.
Quando essas informações são controladas de forma fragmentada, surgem problemas como:
- Dificuldade para localizar o histórico de clientes e pets;
- Perda de informações sobre atendimentos;
- Falta de padronização nos status da agenda;
- Baixa visibilidade sobre serviços realizados e faturamento;
- Excesso de etapas durante o atendimento na recepção.
O Pet Shop System V2 centraliza essas operações em um único sistema, com um fluxo direto:
cliente → pet → serviço → atendimento → acompanhamento no dashboard
| Módulo | Funcionalidades |
|---|---|
| Autenticação | Login, logout e identificação dos perfis administrador e recepcionista |
| Clientes | Cadastro, consulta, edição, pesquisa e desativação |
| Pets | Cadastro vinculado ao cliente, edição, filtros e desativação |
| Serviços | Cadastro de preço, duração, categoria, edição, filtros e desativação |
| Atendimentos | Agendamento, edição, exclusão, observações e controle de status |
| Dashboard | Indicadores operacionais, faturamento e gráficos |
| Filtros | Pesquisa por texto, espécie, categoria, data e status |
| Ferramentas de desenvolvimento | Scripts auxiliares para instalação, conexão e testes funcionais |
Os atendimentos podem utilizar os seguintes status:
- Agendado;
- Em Atendimento;
- Concluído;
- Cancelado.
- Backend: PHP procedural
- Acesso ao banco: MySQLi
- Banco de dados: MySQL ou MariaDB
- Frontend: HTML5, CSS3 e JavaScript
- Gráficos: Chart.js
- Ícones: Font Awesome
- Codificação: UTF-8 e
utf8mb4 - Ambiente local recomendado: Windows com XAMPP
- Servidor web: Apache
A V2 inclui medidas de segurança aplicadas ao contexto de uma aplicação PHP procedural:
- armazenamento de senhas com
password_hash(); - validação de senhas com
password_verify(); - consultas preparadas para entradas variáveis;
- escape de saída HTML com
htmlspecialchars(); - tokens CSRF nos formulários;
- comparação segura de tokens com
hash_equals(); - regeneração do identificador da sessão após o login;
- cookies de sessão com
HttpOnlyeSameSite=Lax; - modo estrito de sessão;
- bloqueio de páginas internas para usuários não autenticados;
- mensagens de erro de banco sem exposição direta de credenciais;
- bloqueio de acesso web às pastas
config,scriptsesqlpelo.htaccess; - cabeçalhos HTTP básicos de proteção via Apache, quando o módulo de headers está habilitado.
Em produção, o atributo Secure do cookie de sessão é ativado quando a aplicação é acessada por HTTPS.
As medidas existentes reduzem riscos comuns, como SQL Injection, XSS, CSRF, exposição de arquivos internos e uso inseguro de sessões. Elas não substituem a configuração segura do servidor e da hospedagem.
O desenvolvimento da V2 consolidou práticas importantes para aplicações PHP procedurais:
- organização modular sem substituição da arquitetura existente;
- uso consistente de consultas preparadas;
- proteção de formulários com tokens CSRF;
- gerenciamento mais seguro de sessões;
- escape de dados na saída HTML;
- manutenção de relacionamentos entre clientes, pets e atendimentos;
- uso de desativação lógica para preservar referências históricas;
- padronização de banco e aplicação em UTF-8/
utf8mb4; - separação entre código da aplicação e ferramentas de desenvolvimento;
- criação de testes funcionais para os fluxos críticos;
- sanitização de dados antes da publicação;
- configuração da aplicação para ambientes diferentes por variáveis de ambiente.
A evolução da V1 para a V2 teve como foco estabilidade, segurança, organização e previsibilidade operacional, mantendo a implementação em PHP procedural.
- PHP 7.4 ou superior (recomenda-se uma versão mais recente);
- MySQL 5.7+, MariaDB ou versão compatível;
- Apache;
- extensão MySQLi habilitada;
- XAMPP recomendado para execução local no Windows.
-
Clone o repositório ou copie o projeto para o diretório do Apache:
Copy-Item ".\Petshopsystemv2" "C:\xampp\htdocs\" -Recurse -Force
-
Inicie o Apache e o MySQL pelo XAMPP Control Panel.
-
Crie e configure o banco conforme a seção seguinte.
-
Acesse:
http://localhost/Petshopsystemv2/
O arquivo config/database.php contém os dados reais de conexão com o banco e não deve ser versionado.
O repositório público mantém apenas o modelo seguro:
config/database.example.php
Para configurar o projeto, copie o modelo:
Copy-Item ".\config\database.example.php" ".\config\database.php"Depois preencha config/database.php com os dados reais apenas no ambiente local ou no servidor. Nunca envie credenciais reais para o GitHub.
A aplicação aceita as seguintes variáveis de ambiente:
APP_ENV=production
BASE_URL=https://seu-dominio.example/
DB_HOST=localhost
DB_USER=seu_usuario
DB_PASS=sua_senha
DB_NAME=seu_bancoO arquivo .env.example funciona como referência. A aplicação lê as variáveis disponibilizadas pelo ambiente do servidor PHP; ela não carrega automaticamente um arquivo .env.
Caso a hospedagem não ofereça configuração de variáveis de ambiente, defina os valores diretamente em config/database.php durante a publicação e mantenha esse arquivo fora do Git. O arquivo público para referência é config/database.example.php.
Antes de publicar:
- utilize HTTPS;
- use um usuário de banco dedicado, sem privilégios de administrador;
- configure corretamente a
BASE_URL; - não publique credenciais reais;
- não versione
config/database.php; - altere as senhas dos usuários demonstrativos;
- mantenha
config/,scripts/esql/fora do acesso público; - confirme que as regras do
.htaccesssão respeitadas pelo servidor; - desative a listagem de diretórios;
- mantenha logs, backups, sessões e arquivos temporários fora do repositório.
-
Acesse
http://localhost/phpmyadmin. -
Crie o banco
petshop_system. -
Utilize codificação
utf8mb4. -
Abra a aba Importar.
-
Selecione:
sql/database.sql -
Execute a importação.
No PowerShell:
cmd.exe /c '"C:\xampp\mysql\bin\mysql.exe" -u root -e "CREATE DATABASE IF NOT EXISTS petshop_system CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"'
cmd.exe /c '"C:\xampp\mysql\bin\mysql.exe" -u root petshop_system < "C:\xampp\htdocs\Petshopsystemv2\sql\database.sql"'Caso o usuário MySQL possua senha, adicione -p e informe a senha quando solicitado.
A configuração local padrão utiliza:
Host: localhost
Usuário: root
Senha: vazia
Banco: petshop_system
Esses valores podem ser substituídos pelas variáveis:
DB_HOST;DB_USER;DB_PASS;DB_NAME;BASE_URL;APP_ENV.
O banco público inclui contas fictícias para avaliação local:
| Perfil | Senha | |
|---|---|---|
| Administrador | admin@petshop.com |
admin123 |
| Recepcionista | recepcao@petshop.com |
recepcao123 |
Essas credenciais são exclusivamente demonstrativas. Em um ambiente de produção real, altere ou remova essas contas antes de disponibilizar a aplicação.
Para verificar a conexão e a existência das tabelas obrigatórias:
& php ".\scripts\dev\test_db.php"Caso o PHP não esteja disponível no PATH, utilize:
& "C:\xampp\php\php.exe" ".\scripts\dev\test_db.php"O projeto inclui um script PowerShell que utiliza um banco isolado para validar:
- login como administrador;
- login como recepcionista;
- logout;
- CRUD de clientes;
- CRUD de pets;
- CRUD de serviços;
- CRUD de atendimentos;
- dashboard;
- filtros;
- proteção CSRF;
- bloqueio de páginas privadas;
- atributos do cookie de sessão.
Execute o teste:
powershell -ExecutionPolicy Bypass -File ".\scripts\dev\functional_test.ps1"Por padrão, o teste utiliza o banco:
petshop_system_v2_test
Crie esse banco e importe sql/database.sql antes da execução.
Execute o teste funcional apenas em um banco isolado. O script cria, altera e remove registros durante a validação.
- Entre com um usuário demonstrativo.
- Cadastre um cliente.
- Cadastre um pet vinculado ao cliente.
- Cadastre ou selecione um serviço.
- Crie um atendimento.
- Atualize o status do atendimento.
- Confira os indicadores no dashboard.
- Teste os filtros dos módulos.
- Finalize a sessão.
- Tente acessar uma página interna sem login e confirme o redirecionamento.
Petshopsystemv2/
├── assets/
│ ├── css/
│ │ └── style.css
│ └── js/
│ └── main.js
├── config/
│ ├── config.php
│ ├── database.example.php
│ └── database.php
├── includes/
│ ├── footer.php
│ └── header.php
├── pages/
│ ├── atendimentos.php
│ ├── clientes.php
│ ├── dashboard.php
│ ├── login.php
│ ├── logout.php
│ ├── pets.php
│ └── servicos.php
├── scripts/
│ └── dev/
│ ├── auto_setup.ps1
│ ├── functional_test.ps1
│ ├── reset_passwords.php
│ └── test_db.php
├── sql/
│ └── database.sql
├── .env.example
├── .htaccess
├── index.php
└── README.md
assets/: estilos e scripts da interface;config/: configurações gerais, sessão e conexão com o banco;includes/: componentes compartilhados da interface;pages/: módulos funcionais da aplicação;scripts/dev/: ferramentas auxiliares de desenvolvimento e testes;sql/: estrutura do banco e dados demonstrativos.
Deploy removido pois irei atualizar o projeto para versão V3 e deixar novamente hospedado
Uma nova versão em Laravel será desenvolvida separadamente, com arquitetura e estrutura próprias.
Natan Da Luz
- E-mail: natandaluz01@gmail.com
- LinkedIn: linkedin.com/in/natandaluz
- Portfólio: portfolionatan.vercel.app
Projeto desenvolvido com base em uma operação real de petshop.
Este projeto está sem uma licença definida no momento.