photum/README.md
2025-12-03 14:13:06 -03:00

539 lines
17 KiB
Markdown

# 📸 Photum - Sistema de Gestão de Formaturas
Sistema completo de gestão para eventos fotográficos, especializado em formaturas e eventos acadêmicos. Plataforma moderna e intuitiva para gerenciamento de eventos, fotógrafos, instituições de ensino, clientes e entregas, com foco em excelência e atendimento humanizado.
---
## 🎯 Visão Geral
O **Photum** é uma aplicação web full-stack desenvolvida com React + TypeScript no frontend e preparada para integração com backend, que centraliza todo o fluxo de trabalho de uma empresa de fotografia especializada em formaturas, desde a solicitação inicial do cliente até a entrega final do álbum.
### Principais Funcionalidades
-**Gestão Multi-perfil**: Suporte para 4 tipos de usuários (Superadmin, Empresa, Fotógrafo, Cliente)
-**Gestão de Instituições**: Cadastro completo de universidades e faculdades
-**Controle de Eventos**: CRUD completo de eventos de formatura com status workflow
-**Dashboard Personalizado**: Interface adaptada por perfil de usuário
-**Sistema de Aprovações**: Workflow de aprovação de eventos para clientes
-**Gestão de Equipe**: Atribuição de fotógrafos aos eventos
-**Mapas Interativos**: Integração com Mapbox para visualização de locais
-**Galeria de Inspirações**: Showcase de trabalhos anteriores
-**Integração com IA**: Google GenAI para funcionalidades avançadas
---
## 🚀 Como Executar o Projeto
### Pré-requisitos
- **Node.js** (versão 18 ou superior)
- **npm** ou **yarn**
### Estrutura do Repositório
```
photum/
├── frontend/ # Aplicação React + TypeScript
├── backend/ # Backend (em desenvolvimento)
└── README.md # Este arquivo
```
### Instalação e Execução
#### Frontend
1. **Clone o repositório**:
```bash
git clone https://github.com/rede5/photum.git
cd photum/frontend
```
2. **Instale as dependências**:
```bash
npm install
```
3. **Configure as variáveis de ambiente**:
- Crie um arquivo `.env.local` na pasta `frontend`
- Adicione suas credenciais:
```env
VITE_MAPBOX_TOKEN=seu_token_mapbox_aqui
GEMINI_API_KEY=sua_chave_gemini_aqui
```
4. **Execute o projeto em modo desenvolvimento**:
```bash
npm run dev
```
5. **Acesse no navegador**:
```
http://localhost:3000
```
### Build para Produção
```bash
cd frontend
npm run build
npm run preview
```
---
## 🗺️ Rotas e Navegação
O sistema utiliza um **roteamento customizado baseado em estados** (sem React Router). As rotas disponíveis são:
| Rota | Descrição | Acesso |
| ---------------- | ----------------------------------------------------- | ----------- |
| `/` (`home`) | Landing page institucional com informações da empresa | Público |
| `/login` | Tela de autenticação | Público |
| `/register` | Cadastro de novos usuários e instituições | Público |
| `/dashboard` | Dashboard principal (Lista de eventos) | Autenticado |
| `/events` | Visualização de eventos | Autenticado |
| `/request-event` | Formulário de criação de evento de formatura | Autenticado |
| `/inspiration` | Galeria de inspirações e trabalhos anteriores | Autenticado |
| `/calendar` | Calendário de eventos de formatura | Autenticado |
| `/team` | Gestão de equipe e fotógrafos | Autenticado |
| `/finance` | Módulo financeiro e controle de pagamentos | Autenticado |
| `/settings` | Configurações do sistema e perfil | Autenticado |
| `/privacy` | Política de privacidade | Público |
| `/terms` | Termos de uso | Público |
| `/lgpd` | Informações sobre conformidade LGPD | Público |
### Navegação no Sistema
A navegação acontece através do componente `<Navbar>` que chama a função `onNavigate(pageName)` passando o nome da rota desejada. Rotas protegidas redirecionam automaticamente para `/login` se o usuário não estiver autenticado.
---
## 🔐 Tela de Login e Usuários de Demonstração
### Como Acessar
1. Na página inicial, clique em **"Área do Cliente"**
2. Você será redirecionado para a **tela de login** (`/login`)
### Interface de Login
A tela de login apresenta:
- **Layout dividido**:
- Lado esquerdo com imagem institucional
- Lado direito com formulário de login
- **Campos**:
- E-mail corporativo ou pessoal
- Senha (desabilitada no modo demo)
- **Botão**: "Entrar no Sistema"
### Usuários de Demonstração
Não é necessário senha. Basta clicar em um dos cartões de usuário demo ou digitar o e-mail:
| Perfil | Nome | E-mail | Descrição |
| -------------- | ------------- | -------------------- | ------------------------------ |
| **Superadmin** | Dev Admin | `admin@photum.com` | Acesso total ao sistema |
| **Empresa** | Carlos CEO | `empresa@photum.com` | Dono da empresa de fotografia |
| **Fotógrafo** | Ana Lente | `foto@photum.com` | Profissional fotógrafo |
| **Cliente** | Juliana Noiva | `cliente@photum.com` | Cliente final (dono do evento) |
### Fluxo de Login
```
1. Usuário clica em "Área do Cliente" na Home
2. Sistema redireciona para /login
3. Usuário seleciona um perfil demo OU digita e-mail manualmente
4. Sistema valida o e-mail com mock de usuários
5. Se válido: redireciona para /dashboard
Se inválido: exibe mensagem de erro
```
### Exemplo de Código (Login)
```tsx
// Login simplificado (sem senha)
const handleLogin = async (e: React.FormEvent) => {
e.preventDefault();
const success = await login(email); // Busca no mock de usuários
if (!success) {
setError("Usuário não encontrado");
}
};
```
---
## 👥 Perfis de Usuário e Permissões
### 1. Superadmin (`SUPERADMIN`)
- **Acesso**: Total ao sistema
- **Funcionalidades**:
- Visualiza todos os eventos
- Gerencia todos os usuários
- Acesso a configurações avançadas
### 2. Dono da Empresa (`BUSINESS_OWNER`)
- **Acesso**: Administrativo
- **Funcionalidades**:
- Cria e edita eventos
- Atribui fotógrafos
- Aprova solicitações de clientes
- Gerencia equipe
### 3. Fotógrafo (`PHOTOGRAPHER`)
- **Acesso**: Operacional
- **Funcionalidades**:
- Visualiza eventos atribuídos
- Atualiza status de eventos
- Faz upload de fotos
- Acessa detalhes de contatos
### 4. Cliente (`EVENT_OWNER`)
- **Acesso**: Restrito aos próprios eventos
- **Funcionalidades**:
- Solicita novos eventos
- Acompanha status do seu evento
- Visualiza fotos do evento
- Eventos criados entram em status "Aguardando Aprovação"
---
## 📊 Status de Eventos
Os eventos seguem um workflow com os seguintes status:
| Status | Descrição | Cor |
| ---------------------- | ------------------------------------------- | ------------ |
| `Aguardando Aprovação` | Cliente criou, aguarda aprovação da empresa | Cinza |
| `Em Planejamento` | Aprovado, em fase de planejamento | Azul |
| `Confirmado` | Evento confirmado e agendado | Verde |
| `Em Execução` | Evento acontecendo | Roxo |
| `Entregue` | Fotos entregues ao cliente | Verde escuro |
| `Arquivado` | Evento finalizado e arquivado | Cinza escuro |
---
## 🛠️ Tecnologias Utilizadas
### Core
- **React 19.2.0** - Biblioteca JavaScript para UI
- **TypeScript 5.8.2** - Superset tipado do JavaScript
- **Vite 6.2.0** - Build tool e dev server ultra-rápido
### UI/UX
- **Lucide React 0.554.0** - Ícones modernos e customizáveis
- **TailwindCSS** - Framework CSS utility-first (configurado via classes inline)
### Mapas e Geolocalização
- **Mapbox GL 3.16.0** - Mapas interativos e geolocalização
- **@types/mapbox-gl 3.4.1** - Tipos TypeScript para Mapbox
### Navegação
- **React Router DOM 7.9.6** - Sistema de roteamento e navegação
### IA e APIs
- **@google/genai 1.30.0** - Integração com Google Gemini AI
### Build Tools
- **@vitejs/plugin-react 5.0.0** - Plugin oficial do Vite para React
- **@types/node 22.14.0** - Tipos TypeScript para Node.js
---
## 📁 Estrutura do Projeto
```
photum/
├── frontend/ # Aplicação Frontend
│ ├── components/ # Componentes reutilizáveis
│ │ ├── Button.tsx # Botão customizado
│ │ ├── EventCard.tsx # Card de evento
│ │ ├── EventForm.tsx # Formulário de evento
│ │ ├── Input.tsx # Input customizado
│ │ ├── InstitutionForm.tsx # Formulário de instituições
│ │ ├── MapboxMap.tsx # Componente de mapa interativo
│ │ └── Navbar.tsx # Barra de navegação
│ ├── contexts/ # Context API
│ │ ├── AuthContext.tsx # Autenticação e usuários
│ │ └── DataContext.tsx # Gerenciamento de eventos e instituições
│ ├── pages/ # Páginas principais
│ │ ├── Calendar.tsx # Calendário de eventos
│ │ ├── Dashboard.tsx # Dashboard principal
│ │ ├── Finance.tsx # Gestão financeira
│ │ ├── Home.tsx # Landing page
│ │ ├── Inspiration.tsx # Galeria de inspirações
│ │ ├── LGPD.tsx # Conformidade LGPD
│ │ ├── Login.tsx # Tela de login
│ │ ├── PrivacyPolicy.tsx # Política de privacidade
│ │ ├── Register.tsx # Cadastro de usuários
│ │ ├── Settings.tsx # Configurações
│ │ ├── Team.tsx # Gestão de equipe
│ │ └── TermsOfUse.tsx # Termos de uso
│ ├── services/ # Serviços e APIs
│ │ ├── genaiService.ts # Integração Google GenAI
│ │ ├── mapboxService.ts # Serviços Mapbox
│ │ └── mockGeoService.ts # Mock de geolocalização
│ ├── public/ # Arquivos estáticos
│ ├── App.tsx # Componente raiz + roteamento
│ ├── constants.ts # Constantes globais
│ ├── types.ts # Tipos TypeScript
│ ├── index.tsx # Entry point
│ ├── package.json # Dependências
│ ├── tsconfig.json # Config TypeScript
│ ├── vite.config.ts # Config Vite
│ └── README.md # Documentação do frontend
├── backend/ # Backend (em desenvolvimento)
│ └── .gitkeep
└── README.md # Este arquivo
```
---
## 🎨 Temas e Design System
### Cores da Marca
```css
/* Cores principais */
--brand-purple: #9333ea (roxo vibrante - cor primária)
--brand-black: #000000 (preto puro)
--brand-white: #ffffff (branco puro)
/* Status Colors (definidas em constants.ts) */
Aguardando Aprovação: #6b7280 (gray-500)
Em Planejamento: #3b82f6 (blue-500)
Confirmado: #10b981 (green-500)
Em Execução: #8b5cf6 (purple-500)
Entregue: #059669 (emerald-600)
Arquivado: #4b5563 (gray-600)
```
### Tipografia
- **Títulos e Headings**: System Font Stack
- **Corpo e Parágrafos**: System Font Stack
- **Tamanhos**: Sistema responsivo com classes Tailwind (text-sm, text-base, text-lg, etc.)
### Componentes Visuais
- **Cards**: Sombras suaves, bordas arredondadas
- **Botões**: Variantes primary (roxo), secondary (preto), danger (vermelho)
- **Inputs**: Bordas cinza, foco com anel roxo
- **Navbar**: Gradiente roxo com transparência
---
## 🔄 Workflows do Sistema
### Workflow de Criação de Evento (Cliente)
```
1. Cliente faz login
2. Acessa "Solicitar Evento"
3. Preenche formulário (nome, tipo, data, endereço, contatos)
4. Evento criado com status "Aguardando Aprovação"
5. Empresa visualiza solicitação
6. Empresa aprova → Status muda para "Confirmado"
7. Empresa atribui fotógrafo
8. Fotógrafo acessa evento e realiza trabalho
9. Status atualizado conforme workflow
10. Cliente visualiza fotos e álbum final
```
### Workflow de Gestão (Empresa)
```
1. Empresa cria evento diretamente (status: "Em Planejamento")
2. Adiciona informações detalhadas
3. Atribui fotógrafos à equipe
4. Confirma evento (status: "Confirmado")
5. Acompanha execução
6. Marca como entregue após conclusão
```
---
## 🧪 Dados de Teste (Mock)
O sistema utiliza dados mockados no frontend para demonstração:
### Usuários Mock (AuthContext.tsx)
- 4 usuários pré-cadastrados com diferentes perfis (ver seção de Login)
### Eventos Mock (DataContext.tsx)
- Eventos de exemplo de formaturas e casamentos
- Diferentes status para demonstrar o workflow completo
- Atribuições de fotógrafos e instituições
### Instituições Mock (DataContext.tsx)
- Universidade Federal do Rio Grande do Sul (UFRGS)
- Exemplos de outras instituições de ensino
---
## 🚧 Funcionalidades em Desenvolvimento
### Backend
- API RESTful completa
- Banco de dados relacional
- Autenticação JWT
- Upload e armazenamento de fotos
### Frontend
As seguintes funcionalidades estão parcialmente implementadas:
- **Team** - Gestão completa de equipe e fotógrafos
- **Finance** - Módulo financeiro com relatórios
- **Calendar** - Calendário completo com múltiplas visualizações
- **Settings** - Painel de configurações avançadas
---
## 📝 Scripts Disponíveis
### Frontend
| Comando | Descrição |
| ----------------- | ---------------------------------------------------- |
| `npm run dev` | Inicia servidor de desenvolvimento Vite (porta 3000) |
| `npm run build` | Gera build de produção otimizado |
| `npm run preview` | Preview do build de produção |
### Backend
_Em desenvolvimento_
---
## 🤝 Contribuindo
Este é um projeto em desenvolvimento ativo. Contribuições são bem-vindas!
### Branch Strategy
- **main**: Branch de produção estável
- **dev**: Branch de desenvolvimento ativo (branch padrão para PRs)
### Como Contribuir
1. Fork o projeto
2. Crie uma branch para sua feature (`git checkout -b feature/AmazingFeature`)
3. Commit suas mudanças (`git commit -m 'Add some AmazingFeature'`)
4. Push para a branch (`git push origin feature/AmazingFeature`)
5. Abra um Pull Request para a branch `dev`
---
## 📄 Licença
Projeto privado - Todos os direitos reservados © 2025 Photum Formaturas
---
## 📞 Suporte e Contato
### Repositório e Issues
- **GitHub**: [github.com/rede5/photum](https://github.com/rede5/photum)
- **Issues**: Abra uma issue no GitHub para reportar bugs ou sugerir melhorias
### Contato Comercial
- **Email**: contato@photum.com.br
- **Telefone**: (19) 3405-5024 | (19) 3621-4621
- **Localização**: Americana, SP
### Redes Sociais
- Instagram: @photumformaturas
- Facebook: /photumformaturas
- YouTube: Photum Formaturas
---
## 🎯 Roadmap Futuro
### Curto Prazo (Q1 2025)
- [x] Sistema básico de gestão de eventos
- [x] Autenticação multi-perfil
- [x] Dashboard responsivo
- [x] Integração com Mapbox
- [ ] Sistema completo de upload de fotos
- [ ] Módulo de calendário funcional
### Médio Prazo (Q2-Q3 2025)
- [ ] Backend completo com API REST
- [ ] Banco de dados PostgreSQL
- [ ] Sistema de notificações em tempo real
- [ ] Módulo financeiro completo
- [ ] Gestão de equipe avançada
- [ ] Sistema de relatórios e analytics
### Longo Prazo (Q4 2025 e além)
- [ ] App Mobile (React Native)
- [ ] Integração com APIs de pagamento (Stripe, PagSeguro)
- [ ] Assinatura digital de contratos
- [ ] Exportação de relatórios PDF/Excel
- [ ] Sistema de galeria privada para clientes
- [ ] Integração com CRM
- [ ] Automação de email marketing
- [ ] Sistema de agendamento online
---
## 🏆 Diferenciais do Projeto
-**Interface Moderna**: Design clean e intuitivo com foco em UX
- 🎓 **Especialização**: Focado especificamente em formaturas e eventos acadêmicos
- 🗺️ **Geolocalização**: Mapas interativos para localização de eventos
- 🤖 **IA Integrada**: Google GenAI para funcionalidades inteligentes
- 📱 **Responsivo**: Funciona perfeitamente em dispositivos móveis
- 🔐 **Seguro**: Conformidade com LGPD e boas práticas de segurança
- 🎨 **Customizável**: Sistema de temas e personalização
---
**Desenvolvido com ❤️ para eternizar momentos únicos** ✨📸