Padrões de Diretórios
Este guia define como novos diretórios, páginas e módulos devem ser organizados no frontend da Smart NX (SNX).
O foco é garantir uma arquitetura baseada em domínio, favorecendo isolamento entre áreas (como Dashboard, Chat, Admin ou Público) e padronização no desenvolvimento de novas features.
Este documento não reflete a estrutura atual, mas o padrão de referência para futuras criações.
Ele define como pensamos e construímos novos módulos, garantindo consistência, previsibilidade e escalabilidade.
Princípios Arquiteturais
-
Organização por Domínio (Domain-Driven Frontend)
Cada área funcional da aplicação (Dashboard, Chat, Público, Admin etc.) é tratada como um domínio isolado, com sua própria estrutura interna. -
Isolamento Contextual
Tudo o que pertence a um domínio deve estar contido nele — componentes, contextos, hooks, helpers e types.
Isso evita dependências cruzadas e mantém o código modular. -
Reutilização Consciente
Apenas o que for realmente compartilhável entre domínios deve ser movido para o escopo global (src/components,src/hooks, etc.). -
Simplicidade e Escalabilidade
A estrutura deve permitir a adição de novas features sem quebrar o padrão de organização.
Estrutura de Domínios
O diretório src/pages é o núcleo organizacional do frontend.
Cada subdiretório dentro dele representa um domínio funcional do sistema.
Hierarquia de Páginas
src/pages/
├── Attendance/ # Páginas de atendimento ao cliente
├── Chat/ # Páginas de chat
├── Dashboard/ # Dashboard principal
│ ├── ArtificialIntelligence/
│ ├── Attendance/
│ ├── Billing/
│ ├── Builder/
│ ├── Channels/
│ ├── Config/
│ ├── Home/
│ ├── Monitoring/
│ ├── People/
│ └── Utility/
├── Public/ # Páginas públicas (login, etc.)
└── System/ # Páginas do sistema
O objetivo é que cada domínio represente um contexto funcional completo da aplicação.
Estrutura Interna de um Domínio
Cada domínio (ou subdomínio) segue a mesma estrutura modular:
src/pages/<domain>/
│
├─ components/ → Componentes locais e específicos do domínio
├─ contexts/ → Estados e contextos próprios da área
├─ hooks/ → Hooks customizados usados apenas neste domínio
├─ helpers/ → Funções utilitárias específicas
├─ types/ → Tipos e interfaces locais
├─ services/ → Comunicação com APIs ou lógicas de dados
├─ index.tsx → Ponto de entrada (página principal)
└─ style.ts → Estilização principal do domínio
Tudo que for específico daquele domínio deve estar dentro dele.
Se uma página ou funcionalidade é exclusiva do Dashboard, ela deve estar emsrc/pages/dashboard/...— nunca diretamente emsrc/pages.
Exemplos de Estrutura por Domínio
1. Páginas Públicas
src/pages/public/
│
├─ login/
│ ├─ index.tsx
│ ├─ style.ts
│ └─ components/
│ ├─ LoginForm/
│ │ ├─ index.tsx
│ │ └─ style.ts
│
├─ register/
│ ├─ index.tsx
│ └─ style.ts
└─ forgot-password/
├─ index.tsx
└─ style.ts
- Não possuem dependências de contexto global.
- Acesso livre (sem autenticação).
- Devem ser simples e focadas em fluxo de entrada do usuário.
2. Dashboard (Área Autenticada)
src/pages/dashboard/
│
├─ relationship/
│ ├─ components/
│ │ ├─ Flows/
│ │ └─ Segments/
│ ├─ contexts/
│ │ └─ RelationshipContext.tsx
│ ├─ hooks/
│ │ └─ useFlows.ts
│ ├─ helpers/
│ │ └─ mapRelationshipData.ts
│ ├─ types/
│ │ └─ relationshipTypes.ts
│ ├─ index.tsx
│ └─ style.ts
│
└─ reports/
├─ components/
├─ hooks/
├─ types/
└─ index.tsx
- Cada subpasta dentro de
dashboardé um subdomínio funcional (ex:relationship,reports,settings). - Devem ser organizadas de forma autônoma, com o mínimo de dependências entre si.
- Contextos e hooks globais do dashboard ficam em
src/pages/dashboard/contextsesrc/pages/dashboard/hooks.
3. Chat (Domínio Isolado)
src/pages/chat/
│
├─ components/
│ ├─ ChatWindow/
│ ├─ MessageInput/
│ └─ UserList/
├─ contexts/
│ └─ ChatContext.tsx
├─ hooks/