O frontend é uma aplicação Next.js 15 com TypeScript, rodando na porta 3002. Utiliza o App Router (não o Pages Router), NextAuth v5 para autenticação, Tailwind CSS v4 para estilização e Axios para comunicação com o backend. Os componentes seguem o padrão de design atômico (Átomos → Moléculas → Organismos).
As rotas estão organizadas em dois grupos principais dentro de src/app/:
Todas as rotas abaixo exigem autenticação. Possuem layout com sidebar e header.
| Rota | Descrição |
|---|---|
/dashboard | Visão geral / painel principal |
/home | Grade de módulos e navegação |
/agentes | Gerenciamento de agentes de IA |
/automacoes | Configuração de rotinas de automação |
/conhecimento/biblioteca | Biblioteca de documentos |
/conhecimento/documentos | Documentos da base de conhecimento |
/conhecimento/prompts | Prompts configurados |
/conhecimento/treinamentos | Treinamentos dos agentes |
/configuracoes/permissoes | Permissões de acesso |
/configuracoes/usuarios | Gerenciamento de usuários |
/financeiro | Módulo financeiro |
/integracoes | Integrações com serviços externos |
/marketing | Módulo de marketing |
/minha-conta | Perfil do usuário |
/projetos | Seleção e gerenciamento de projetos |
Acessíveis sem autenticação. Não possuem layout com sidebar.
| Rota | Descrição |
|---|---|
/login | Tela de login (email/senha e OAuth) |
A autenticação é gerenciada pelo NextAuth v5 com estratégia JWT.
/login, /_next e /api/auth. Redireciona usuários não autenticados para /login.signIn — Valida login social com o backend.jwt — Armazena token e dados do usuário.session — Injeta dados do usuário na sessão.Os serviços ficam em src/services/ e são responsáveis por toda a comunicação com a API.
| Arquivo | Descrição |
|---|---|
base-service/api.ts | Instância Axios com interceptors (injeta token JWT e X-Projeto-Id) |
base-service/api-no-token.ts | Instância Axios pública (sem autenticação) |
auth.service.ts | Login, registro e autenticação social |
projeto.service.ts | CRUD de projetos |
esqueleto.service.ts | Gerenciamento de templates/esqueletos |
X-Projeto-Id com o projeto ativo.O estado global do projeto ativo é gerenciado via React Context (src/contexts/projeto.context.tsx):
ProjetoProvider — Provedor que carrega e mantém o projeto selecionado.localStorage.useProjeto().| Hook | Descrição |
|---|---|
useProjeto() | Acessa e altera o projeto ativo |
useTokenPronto() | Aguarda o token de autenticação estar disponível |
Os componentes seguem o padrão de design atômico dentro de src/components/:
Elementos base: Alert, Avatar, Badge, Botões, Card, Controles, Ícones, Loading, Modal, Skeleton, Text, Toast, Tooltip, Value.
SidebarComponent — Barra de navegação lateral.HeaderComponent — Barra superior de navegação.PageHeaderMolecule — Título e breadcrumbs da página.ChatDrawerComponent — Gaveta de chat/assistência.Crie o arquivo packages/frontend/.env.local:
NEXT_PUBLIC_API_URL=http://localhost:9002
NEXT_PUBLIC_BASE_URL=http://localhost:9002
AUTH_SECRET=chave-secreta-aleatoria
AUTH_GOOGLE_ID=seu-google-client-id
AUTH_GOOGLE_SECRET=seu-google-client-secret
AUTH_FACEBOOK_ID=seu-facebook-app-id
AUTH_FACEBOOK_SECRET=seu-facebook-app-secret
NEXT_PUBLIC_AMBIENTE=DEVELOPMENT
@ayla/shared para tipar dados da API.src/services/.useProjeto() para acessar o projeto ativo.api.ts (com interceptors).React Hook Form + Zod para validação de formulários.