# 📸 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 `` 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** ✨📸