Frontend — Chronicle¶
Visao Geral¶
SPA construida com Next.js 16 + React 18 + TypeScript + Tailwind CSS.
Stack: React Query (server state), Zustand (client state), @dnd-kit (drag & drop), WebSocket (tempo real).
Paginas¶
Auth¶
| Rota | Descricao |
|---|---|
/login |
Login (email/senha + OTP + OAuth2) |
/signup |
Cadastro |
/auth/callback |
Callback OAuth2 (Google, GitHub) |
Organizations¶
| Rota | Descricao |
|---|---|
/orgs |
Lista de organizacoes |
/orgs/new |
Criar organizacao |
/orgs/{orgId}/pipes |
Pipes da organizacao |
/orgs/{orgId}/members |
Membros |
/orgs/{orgId}/reports |
Relatorios da org |
/orgs/{orgId}/databases |
Databases compartilhados |
Pipes¶
| Rota | Descricao |
|---|---|
/orgs/{orgId}/pipes/new |
Criar pipe |
/orgs/{orgId}/pipes/{pipeId}/board |
Quadro Kanban |
/orgs/{orgId}/pipes/{pipeId}/editor |
Configurar pipe |
/orgs/{orgId}/pipes/{pipeId}/automations |
Automacoes |
/orgs/{orgId}/pipes/{pipeId}/forms |
Formularios publicos |
/orgs/{orgId}/pipes/{pipeId}/reports |
Relatorios do pipe |
Publico¶
| Rota | Descricao |
|---|---|
/forms/{slug} |
Formulario publico (sem auth) |
/invite/{token} |
Aceitar convite |
Board (Kanban)¶
Interface principal do Chronicle. Funcionalidades:
- Drag & drop de cards entre estagios (@dnd-kit)
- Busca e filtros por titulo, labels, status, atrasados
- Quick add — Criacao inline de cards
- Card drawer — Detalhe com campos, comentarios, arquivos, historico
- WIP limit — Indicador visual quando estagio atinge o limite
- WebSocket — Atualizacoes em tempo real
Interacao¶
1. Drag card → closestCorners collision
2. Drop → API cardsApi.move(cardId, stageId)
3. boardStore atualiza localmente (otimista)
4. WebSocket confirma para outros usuarios
State Management¶
Zustand Stores¶
authStore (persistido em localStorage):
boardStore (sessao):
orgStore (persistido em localStorage):
API Client (lib/api.ts)¶
Base URL: NEXT_PUBLIC_API_URL (default: http://localhost:5040)
Interceptors:
- Request:
Authorization: Bearer {token}+X-Organization-Id: {orgId} - Response: 401 → limpa token + redireciona para
/login
Modulos¶
| Modulo | Endpoints |
|---|---|
authApi |
login, signup, OTP, OAuth2, me |
organizationsApi |
CRUD orgs + membros |
pipesApi |
CRUD pipes + archive/restore |
stagesApi |
CRUD stages + reorder |
cardsApi |
CRUD cards + move + search + dependencies |
commentsApi |
CRUD comentarios |
filesApi |
Upload/delete arquivos |
fieldsApi |
CRUD campos + reorder |
automationsApi |
CRUD automacoes + toggle |
formsApi |
CRUD formularios |
publicFormsApi |
Schema + submit (sem auth) |
labelsApi |
CRUD labels + add/remove de cards |
reportsApi |
Stats org + pipe + timeline |
databasesApi |
CRUD databases + fields + records |
invitesApi |
Convites + aceitar |
Componentes Chave¶
Board¶
| Componente | Funcao |
|---|---|
BoardSearchBar |
Busca de cards |
BoardFilters |
Filtros por estagio, labels, atrasados |
StageHeader |
Info do estagio + WIP limit |
QuickAddCard |
Criacao inline |
PipeSettingsDrawer |
Config do pipe |
Cards¶
| Componente | Funcao |
|---|---|
CardDrawer |
Detalhe do card com edicao |
CardFiles |
Gestao de arquivos |
CardComments |
Comentarios com threading |
CardHistory |
Timeline de mudancas |
Editor¶
| Componente | Funcao |
|---|---|
StageEditor |
Criar/editar estagios |
FieldEditor |
Configurar campos customizados |
FieldConditionBuilder |
Condicoes de visibilidade |
PipeSettings |
Metadata do pipe |
Automations¶
| Componente | Funcao |
|---|---|
AutomationBuilder |
Designer de automacoes |
TriggerSelector |
Selecao de trigger |
ActionConfigurator |
Config de acao |
WebSocket¶
Hook: useBoardWebSocket(pipeId)
// Configuracao
URL: ws(s)://host/ws/board/{pipeId}
Reconnect: backoff [1s, 2s, 5s, 10s, 30s]
Ping: 30s interval, 10s timeout
Eventos atualizam automaticamente o boardStore.
Testes¶
| Tipo | Ferramenta | Localizacao |
|---|---|---|
| E2E | Playwright | tests/ |
| Lint | ESLint | eslint.config.mjs |
| Commit | CommitLint + Husky | .husky/ |