# jonatassvs/automatic-digital-marketing-saas-pi-2 architecture

> Architecture diagram of the GitHub repository jonatassvs/automatic-digital-marketing-saas-pi-2, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-14). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/jonatassvs/automatic-digital-marketing-saas-pi-2
- Repository: https://github.com/jonatassvs/automatic-digital-marketing-saas-pi-2

## Overview

O produto é um construtor de landing pages: usuários criam páginas no dashboard, editam uma árvore de componentes e podem visualizá-la; o README ressalta que a edição atual é apenas em memória e não persiste pela API. O backend oferece autenticação, persistência, publicação em JSON, SEO, analytics e configuração de GTM. As setas abaixo seguem chamadas mostradas nos trechos, referências do índice de fontes e capacidades documentadas; partes não amostradas não permitem detalhar todo o roteamento.

Main entry points: [`server/application.ts`](https://github.com/jonatassvs/automatic-digital-marketing-saas-pi-2/blob/main/server/application.ts) (Composição da aplicação), [`components/editor/PageEditor/usePageEditorState.ts`](https://github.com/jonatassvs/automatic-digital-marketing-saas-pi-2/blob/main/components/editor/PageEditor/usePageEditorState.ts) (Estado e árvore), [`renderer/ComponentRenderer.tsx`](https://github.com/jonatassvs/automatic-digital-marketing-saas-pi-2/blob/main/renderer/ComponentRenderer.tsx) (Renderizador de componentes), [`server/services/page.service.ts`](https://github.com/jonatassvs/automatic-digital-marketing-saas-pi-2/blob/main/server/services/page.service.ts) (Páginas e publicação)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["Interface e edição"]
  node_dashboard["Dashboard<br/>[page.tsx]"]
  node_editor_page["Tela do editor<br/>[page.tsx]"]
  node_editor_state["Estado e árvore"]
  node_auth_ui["Contexto de autenticação<br/>[AuthContext.tsx]"]
  node_api_client["Cliente API<br/>[api.ts]"]
  node_public_page["Página publicada<br/>[page.tsx]"]
  node_preview_page["Pré-visualização<br/>[page.tsx]"]
end

subgraph group_render["Modelo e renderização"]
  node_page_model["Documento de página<br/>[page.ts]"]
  node_renderer["Renderizador de componentes"]
  node_schemas["Schemas de componentes"]
  node_validation["Validação de página<br/>[validation.ts]"]
end

subgraph group_api["API e aplicação"]
  node_routes["Route handlers<br/>[route.ts]"]
  node_route_middleware["Middleware de rotas<br/>[route.ts]"]
  node_application["Composição da aplicação<br/>[application.ts]"]
  node_page_controller["Controlador de páginas<br/>[page.controller.ts]"]
end

subgraph group_domain["Serviços de domínio"]
  node_auth_service["Autenticação<br/>[auth.service.ts]"]
  node_page_service["Páginas e publicação<br/>[page.service.ts]"]
  node_seo_service["SEO<br/>[seo.service.ts]"]
  node_analytics["Analytics"]
  node_integrations["Integrações GTM"]
end

subgraph group_storage["Persistência"]
  node_database[("MongoDB<br/>[database.ts]")]
  node_page_repo["Repositório de páginas<br/>[page.repository.ts]"]
  node_user_repo["Repositório de usuários<br/>[user.repository.ts]"]
  node_event_repo["Repositório de eventos"]
end

node_visitor(("Visitante"))
node_editor_user(("Usuário editor"))

node_editor_user -->|"gerencia páginas"| node_dashboard
node_dashboard -->|"consulta sessão"| node_auth_ui
node_dashboard -->|"usa cliente"| node_api_client
node_editor_user -->|"edita página"| node_editor_page
node_editor_page -->|"monta editor"| node_editor_state
node_editor_state -->|"atualiza estado"| node_page_model
node_editor_state -->|"consulta schemas"| node_schemas
node_editor_state -->|"valida árvore"| node_validation
node_auth_ui -->|"chama autenticação"| node_api_client
node_visitor -->|"abre slug"| node_public_page
node_public_page -->|"busca página"| node_application
node_public_page -->|"renderiza página"| node_renderer
node_preview_page -->|"renderiza prévia"| node_renderer
node_renderer -->|"consome modelo"| node_page_model
node_renderer -->|"consulta schemas"| node_schemas
node_api_client -.->|"envia requisições"| node_routes
node_routes -->|"envolve handler"| node_route_middleware
node_route_middleware -->|"obtém aplicação"| node_application
node_application -->|"compõe controlador"| node_page_controller
node_application -->|"compõe serviço"| node_auth_service
node_application -->|"compõe serviço"| node_page_service
node_application -->|"compõe serviço"| node_analytics
node_application -->|"compõe serviço"| node_integrations
node_page_controller -->|"encaminha operações"| node_page_service
node_page_controller -->|"analisa SEO"| node_seo_service
node_page_service -->|"persiste páginas"| node_page_repo
node_auth_service -->|"persiste usuários"| node_user_repo
node_application -->|"obtém conexão"| node_database
node_page_repo -->|"usa MongoDB"| node_database
node_user_repo -->|"usa MongoDB"| node_database
node_event_repo -->|"usa MongoDB"| node_database
node_visitor -.->|"gera eventos"| node_analytics
node_page_service -.->|"publica JSON"| node_page_model
node_integrations -.->|"configura GTM"| node_page_model

click node_dashboard "https://github.com/jonatassvs/automatic-digital-marketing-saas-pi-2/blob/main/app/dashboard/page.tsx"
click node_editor_page "https://github.com/jonatassvs/automatic-digital-marketing-saas-pi-2/blob/main/app/editor/%5BpageId%5D/page.tsx"
click node_editor_state "https://github.com/jonatassvs/automatic-digital-marketing-saas-pi-2/blob/main/components/editor/PageEditor/usePageEditorState.ts"
click node_auth_ui "https://github.com/jonatassvs/automatic-digital-marketing-saas-pi-2/blob/main/components/auth/AuthContext.tsx"
click node_api_client "https://github.com/jonatassvs/automatic-digital-marketing-saas-pi-2/blob/main/services/api.ts"
click node_public_page "https://github.com/jonatassvs/automatic-digital-marketing-saas-pi-2/blob/main/app/p/%5Bslug%5D/page.tsx"
click node_preview_page "https://github.com/jonatassvs/automatic-digital-marketing-saas-pi-2/blob/main/app/preview/%5BpageId%5D/page.tsx"
click node_page_model "https://github.com/jonatassvs/automatic-digital-marketing-saas-pi-2/blob/main/types/page.ts"
click node_renderer "https://github.com/jonatassvs/automatic-digital-marketing-saas-pi-2/blob/main/renderer/ComponentRenderer.tsx"
click node_schemas "https://github.com/jonatassvs/automatic-digital-marketing-saas-pi-2/blob/main/renderer/schemas/componentSchemas.ts"
click node_validation "https://github.com/jonatassvs/automatic-digital-marketing-saas-pi-2/blob/main/renderer/validation.ts"
click node_routes "https://github.com/jonatassvs/automatic-digital-marketing-saas-pi-2/blob/main/app/api/pages/route.ts"
click node_route_middleware "https://github.com/jonatassvs/automatic-digital-marketing-saas-pi-2/blob/main/server/middleware/route.ts"
click node_application "https://github.com/jonatassvs/automatic-digital-marketing-saas-pi-2/blob/main/server/application.ts"
click node_page_controller "https://github.com/jonatassvs/automatic-digital-marketing-saas-pi-2/blob/main/server/controllers/page.controller.ts"
click node_auth_service "https://github.com/jonatassvs/automatic-digital-marketing-saas-pi-2/blob/main/server/services/auth.service.ts"
click node_page_service "https://github.com/jonatassvs/automatic-digital-marketing-saas-pi-2/blob/main/server/services/page.service.ts"
click node_seo_service "https://github.com/jonatassvs/automatic-digital-marketing-saas-pi-2/blob/main/server/services/seo.service.ts"
click node_analytics "https://github.com/jonatassvs/automatic-digital-marketing-saas-pi-2/blob/main/server/services/analytics.service.ts"
click node_integrations "https://github.com/jonatassvs/automatic-digital-marketing-saas-pi-2/blob/main/server/services/integration.service.ts"
click node_database "https://github.com/jonatassvs/automatic-digital-marketing-saas-pi-2/blob/main/server/repositories/database.ts"
click node_page_repo "https://github.com/jonatassvs/automatic-digital-marketing-saas-pi-2/blob/main/server/repositories/page.repository.ts"
click node_user_repo "https://github.com/jonatassvs/automatic-digital-marketing-saas-pi-2/blob/main/server/repositories/user.repository.ts"
click node_event_repo "https://github.com/jonatassvs/automatic-digital-marketing-saas-pi-2/blob/main/server/repositories/event.repository.ts"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_dashboard,node_editor_page,node_editor_state,node_auth_ui,node_api_client,node_public_page,node_preview_page toneBlue
class node_page_model,node_renderer,node_schemas,node_validation toneAmber
class node_routes,node_route_middleware,node_application,node_page_controller toneMint
class node_auth_service,node_page_service,node_seo_service,node_analytics,node_integrations toneRose
class node_database,node_page_repo,node_user_repo,node_event_repo,node_visitor,node_editor_user toneIndigo
```

## Components

### Interface e edição

- [Dashboard](https://github.com/jonatassvs/automatic-digital-marketing-saas-pi-2/blob/main/app/dashboard/page.tsx): `app/dashboard/page.tsx`
- [Tela do editor](https://github.com/jonatassvs/automatic-digital-marketing-saas-pi-2/blob/main/app/editor/%5BpageId%5D/page.tsx): `app/editor/[pageId]/page.tsx`
- [Estado e árvore](https://github.com/jonatassvs/automatic-digital-marketing-saas-pi-2/blob/main/components/editor/PageEditor/usePageEditorState.ts): `components/editor/PageEditor/usePageEditorState.ts`
- [Contexto de autenticação](https://github.com/jonatassvs/automatic-digital-marketing-saas-pi-2/blob/main/components/auth/AuthContext.tsx): `components/auth/AuthContext.tsx`
- [Cliente API](https://github.com/jonatassvs/automatic-digital-marketing-saas-pi-2/blob/main/services/api.ts): `services/api.ts`
- [Página publicada](https://github.com/jonatassvs/automatic-digital-marketing-saas-pi-2/blob/main/app/p/%5Bslug%5D/page.tsx): `app/p/[slug]/page.tsx`
- [Pré-visualização](https://github.com/jonatassvs/automatic-digital-marketing-saas-pi-2/blob/main/app/preview/%5BpageId%5D/page.tsx): `app/preview/[pageId]/page.tsx`

### Modelo e renderização

- [Documento de página](https://github.com/jonatassvs/automatic-digital-marketing-saas-pi-2/blob/main/types/page.ts): `types/page.ts`
- [Renderizador de componentes](https://github.com/jonatassvs/automatic-digital-marketing-saas-pi-2/blob/main/renderer/ComponentRenderer.tsx): `renderer/ComponentRenderer.tsx`
- [Schemas de componentes](https://github.com/jonatassvs/automatic-digital-marketing-saas-pi-2/blob/main/renderer/schemas/componentSchemas.ts): `renderer/schemas/componentSchemas.ts`
- [Validação de página](https://github.com/jonatassvs/automatic-digital-marketing-saas-pi-2/blob/main/renderer/validation.ts): `renderer/validation.ts`

### API e aplicação

- [Route handlers](https://github.com/jonatassvs/automatic-digital-marketing-saas-pi-2/blob/main/app/api/pages/route.ts): `app/api/pages/route.ts`
- [Middleware de rotas](https://github.com/jonatassvs/automatic-digital-marketing-saas-pi-2/blob/main/server/middleware/route.ts): `server/middleware/route.ts`
- [Composição da aplicação](https://github.com/jonatassvs/automatic-digital-marketing-saas-pi-2/blob/main/server/application.ts): `server/application.ts`
- [Controlador de páginas](https://github.com/jonatassvs/automatic-digital-marketing-saas-pi-2/blob/main/server/controllers/page.controller.ts): `server/controllers/page.controller.ts`

### Serviços de domínio

- [Autenticação](https://github.com/jonatassvs/automatic-digital-marketing-saas-pi-2/blob/main/server/services/auth.service.ts): `server/services/auth.service.ts`
- [Páginas e publicação](https://github.com/jonatassvs/automatic-digital-marketing-saas-pi-2/blob/main/server/services/page.service.ts): `server/services/page.service.ts`
- [SEO](https://github.com/jonatassvs/automatic-digital-marketing-saas-pi-2/blob/main/server/services/seo.service.ts): `server/services/seo.service.ts`
- [Analytics](https://github.com/jonatassvs/automatic-digital-marketing-saas-pi-2/blob/main/server/services/analytics.service.ts): `server/services/analytics.service.ts`
- [Integrações GTM](https://github.com/jonatassvs/automatic-digital-marketing-saas-pi-2/blob/main/server/services/integration.service.ts): `server/services/integration.service.ts`

### Persistência

- [MongoDB](https://github.com/jonatassvs/automatic-digital-marketing-saas-pi-2/blob/main/server/repositories/database.ts): `server/repositories/database.ts`
- [Repositório de páginas](https://github.com/jonatassvs/automatic-digital-marketing-saas-pi-2/blob/main/server/repositories/page.repository.ts): `server/repositories/page.repository.ts`
- [Repositório de usuários](https://github.com/jonatassvs/automatic-digital-marketing-saas-pi-2/blob/main/server/repositories/user.repository.ts): `server/repositories/user.repository.ts`
- [Repositório de eventos](https://github.com/jonatassvs/automatic-digital-marketing-saas-pi-2/blob/main/server/repositories/event.repository.ts): `server/repositories/event.repository.ts`

### Other components

- **Visitante**
- **Usuário editor**

## Connections

- Usuário editor → Dashboard: gerencia páginas (evidence: `app/dashboard/page.tsx`)
- Dashboard → Contexto de autenticação: consulta sessão (evidence: `app/dashboard/page.tsx`)
- Dashboard → Cliente API: usa cliente (evidence: `app/dashboard/page.tsx`)
- Usuário editor → Tela do editor: edita página (evidence: `app/editor/[pageId]/page.tsx`)
- Tela do editor → Estado e árvore: monta editor (evidence: `app/editor/[pageId]/page.tsx`)
- Estado e árvore → Documento de página: atualiza estado (evidence: `components/editor/PageEditor/usePageEditorState.ts`)
- Estado e árvore → Schemas de componentes: consulta schemas (evidence: `components/editor/PageEditor/usePageEditorState.ts`)
- Estado e árvore → Validação de página: valida árvore (evidence: `components/editor/PageEditor/usePageEditorState.ts`)
- Contexto de autenticação → Cliente API: chama autenticação (evidence: `components/auth/AuthContext.tsx`)
- Visitante → Página publicada: abre slug (evidence: `app/p/[slug]/page.tsx`)
- Página publicada → Composição da aplicação: busca página (evidence: `app/p/[slug]/page.tsx`)
- Página publicada → Renderizador de componentes: renderiza página (evidence: `app/p/[slug]/page.tsx`)
- Pré-visualização → Renderizador de componentes: renderiza prévia (evidence: `app/preview/[pageId]/page.tsx`)
- Renderizador de componentes → Documento de página: consome modelo (evidence: `renderer/ComponentRenderer.tsx`)
- Renderizador de componentes → Schemas de componentes: consulta schemas (evidence: `renderer/ComponentRenderer.tsx`)
- Cliente API → Route handlers: envia requisições
- Route handlers → Middleware de rotas: envolve handler (evidence: `app/api/pages/route.ts`)
- Middleware de rotas → Composição da aplicação: obtém aplicação (evidence: `server/middleware/route.ts`)
- Composição da aplicação → Controlador de páginas: compõe controlador (evidence: `server/application.ts`)
- Composição da aplicação → Autenticação: compõe serviço (evidence: `server/application.ts`)
- Composição da aplicação → Páginas e publicação: compõe serviço (evidence: `server/application.ts`)
- Composição da aplicação → Analytics: compõe serviço (evidence: `server/application.ts`)
- Composição da aplicação → Integrações GTM: compõe serviço (evidence: `server/application.ts`)
- Controlador de páginas → Páginas e publicação: encaminha operações (evidence: `server/controllers/page.controller.ts`)
- Controlador de páginas → SEO: analisa SEO (evidence: `server/controllers/page.controller.ts`)
- Páginas e publicação → Repositório de páginas: persiste páginas (evidence: `server/services/page.service.ts`)
- Autenticação → Repositório de usuários: persiste usuários (evidence: `server/services/auth.service.ts`)
- Composição da aplicação → MongoDB: obtém conexão (evidence: `server/application.ts`)
- Repositório de páginas → MongoDB: usa MongoDB (evidence: `server/repositories/database.ts`)
- Repositório de usuários → MongoDB: usa MongoDB (evidence: `server/repositories/database.ts`)
- Repositório de eventos → MongoDB: usa MongoDB (evidence: `server/application.ts`)
- Visitante → Analytics: gera eventos (evidence: `README.md`)
- Páginas e publicação → Documento de página: publica JSON (evidence: `README.md`)
- Integrações GTM → Documento de página: configura GTM (evidence: `README.md`)
