# Architecture baseline

- `portal`: front door oficial, autenticação, catálogo, cobrança, contexto do cliente, launch policy e navegação principal.
- `platform`: runtime interno do produto NVR, publicado pelo portal em `/nvr`.
- `gateway`: execution plane local para captura, gravação, retenção, bridge remoto iniciado pelo gateway e web local.
- `MariaDB/MySQL`: datastore central autoritativo compartilhado entre portal e NVR.
- `redis`: cache, fila, coordenação de processos e heartbeat operacional.
- `ffmpeg`/`ffprobe`: pipeline de mídia no gateway.

## Topologia operacional consolidada

### Desenvolvimento reproduzindo o ambiente real

- `shared-web` serve o **portal real** empacotado no bundle e expõe o bridge público `/nvr`.
- `php` executa o portal e o runtime HTTP do NVR dentro do mesmo front door, sem placeholder HTML.
- `platform-queue` e `platform-scheduler` executam os processos persistentes do runtime do `platform`.
- `gateway-daemon` mantém o ciclo operacional do appliance.
- `gateway-web` mantém a interface local do gateway separada do daemon.
- `mailpit` cobre SMTP local para fluxos de autenticação e verificação.

### Produção compartilhada com o portal

- `__PORTAL_PUBLIC_ROOT__` permanece como raiz pública do portal principal.
- o pacote do NVR fica concentrado em `__INSTALL_ROOT__`, normalmente `/var/www/portal-principal/public/nvr`.
- Nginx/Apache mantem o portal como entrada canonica e encaminham somente `/nvr/index.php` e `/nvr/launch.php` para o bridge publico do portal; assets do NVR usam aliases explicitos.
- o bundle também carrega o código do portal real para desenvolvimento, homologação e empacotamento final sem placeholder.
- Nginx + PHP-FPM cobrem HTTP no appliance; `platform-queue.service` e `platform-scheduler.timer` cobrem fila e agenda.
- `gateway-bootstrap.service`, `gateway-daemon.service` e `gateway-local-web.service` cobrem o appliance local.
- `nvr-platform.target`, `nvr-gateway.target` e `nvr-stack.target` agrupam a topologia para operação repetível.

## Contrato operacional do runtime

- a família oficial do banco central continua sendo **MariaDB/MySQL**;
- o `gateway` preserva **SQLite local** apenas para metadados operacionais;
- a imagem PHP compartilhada do bundle instala `pdo_mysql`, `pdo_sqlite`, `sqlite3`, `redis`, `mbstring`, `pcntl`, `opcache` e `composer`;
- filas, scheduler, cache Redis e bootstrap de produção do `platform` partem desse baseline único.
