# 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.
