# Relatório Técnico - MyCondominium ## 1. Visão Geral do Projeto O **MyCondominium** é uma aplicação web moderna dedicada à gestão de condomínios. Permite uma interação contínua entre administradores e moradores, fornecendo ferramentas para gestão de quotas, ocorrências de manutenção, reservas de espaços comuns, faturação e comunicação em tempo real (chat privado, global e em grupo). --- ## 2. Arquitetura de Código e Tecnologias A aplicação foi desenvolvida focada na simplicidade de implementação e execução, dispensando a necessidade de servidores complexos (arquitetura Serverless) e processos de *build* pesados. ### Tecnologias Utilizadas: * **HTML5 & CSS3:** Estrutura base e definições globais. * **JavaScript (React standalone):** O coração da aplicação (localizado no ficheiro `index.html`). O uso de React importado diretamente pelo browser (`esm.sh/react`) juntamente com o compilador Babel (`@babel/standalone`) permite criar componentes interativos, gerir estados (`useState`, `useEffect`) de forma reativa sem necessitar de instalar Node.js ou usar ferramentas como Vite/Webpack no ambiente de produção final. * **Tailwind CSS (via CDN):** Utilizado para o design visual, garantindo uma interface bonita, responsiva (adaptada a telemóveis) e com suporte automático para Dark Mode (Modo Escuro). * **Lucide-React:** Biblioteca de ícones moderna utilizada ao longo de toda a interface. * **PWA (Progressive Web App):** A aplicação contém um ficheiro `manifest.json` e configurações de `theme-color`, permitindo que os utilizadores a "instalem" nos seus telemóveis como se fosse uma aplicação nativa. --- ## 3. Base de Dados (Backend) O projeto não tem um servidor backend tradicional; em vez disso, utiliza a infraestrutura segura e em tempo real da **Google (Firebase)**. ### 3.1. Autenticação (Firebase Auth) Gere os logins e registos. Garante que apenas utilizadores validados acedem à plataforma. ### 3.2. Firebase Realtime Database É uma base de dados NoSQL (baseada em documentos JSON) que envia atualizações para todos os utilizadores no exato momento em que algo muda, sem precisarem de fazer refresh à página. **Estrutura da Base de Dados (Nós Principais):** 1. **`condominos/`**: Guarda a lista de moradores, informações de contacto (NIF, Telemóvel), número da fração e o estatuto de aprovação (pendente vs aprovado). 2. **`financas/`**: Registo contabilístico do condomínio (despesas como "Limpeza" e receitas como "Quotas"). 3. **`manutencao/`**: Pedidos de reparação reportados pelos moradores, com prioridade, localização e estado ("Resolvido", "Em Progresso"). 4. **`reservas/`**: Calendário de ocupação dos espaços comuns (Salão de Festas, Ginásio, etc.). 5. **`faturacao/` e `faturas/`**: Registo e emissão de recibos e avisos de cobrança gerados pelo sistema. 6. **`notificacoes/`**: Sistema de alertas (dividido entre pastas `admin` e `ID_do_morador`) para avisar o utilizador de ações pendentes ou sucessos. 7. **`mural_mensagens/`**: Histórico do chat "Fórum Geral" onde todos os moradores interagem. 8. **`mensagens_privadas/`**: Canais de comunicação 1-para-1. O ID do caminho é gerado combinando os IDs dos dois utilizadores. 9. **`grupos_chat/`**: Contém as definições dos grupos criados (Nome do grupo, lista de IDs de membros autorizados e quem o criou). 10. **`mensagens_grupo/`**: Mensagens restritas aos grupos de chat criados. --- ## 4. Publicação e Alojamento (Hosting) A aplicação está hospedada no **Firebase Hosting**, uma rede de distribuição global (CDN) ultrarrápida. * **URL Oficial Atual:** [https://mycondominium-web.web.app](https://mycondominium-web.web.app) * **Configuração de Segurança e Performance (`firebase.json`):** * **Cache-Control:** Os recursos estáticos têm instruções para ficar na cache dos browsers durante 1 ano, permitindo que a app carregue quase instantaneamente após a primeira visita. * **Rewrites (SPA):** Qualquer URL acedido é reencaminhado para o `index.html`. Isto previne que ocorra um Erro 404 se um utilizador fizer "Refresh" no browser. --- ## 5. Como Fazer Atualizações (Guia Passo-a-Passo) Se quiser editar o código e publicar uma nova versão, o processo é o seguinte: 1. **Editar Localmente:** Abra os seus ficheiros (`index.html`, `style.css`, etc.) no seu editor de código (como o VS Code) e faça as modificações desejadas. Pode testar abrindo o `index.html` no seu browser localmente. 2. **Abrir o Terminal:** No seu Mac, abra o terminal e navegue para a pasta do projeto (`cd /Users/230414/GestorCondominio`). 3. **Fazer o Deploy:** Execute o comando que envia os ficheiros novos para o servidor: ```bash ./firebase deploy --only hosting ``` 4. **Verificar:** Aguarde que o terminal diga `Deploy complete!`. A partir desse segundo, a alteração está disponível mundialmente no link do projeto. --- ## 6. Conclusão A plataforma está otimizada para ser expansível, rápida e orientada ao "Real-time". A eliminação da barreira de reloads de página cria a sensação de uma aplicação fluida. Toda a lógica condicional está bem contida dentro da função componente `App()` em React, com validações sólidas como as de NIF e Cartão de Cidadão isoladas em funções utilitárias.