Documento de Arquitetura · C4 + Implantação

Everythink Studio
Arquitetura Global do Sistema

Um sistema operacional de IA sem código (no-code) que transforma uma organização — empresa, governo ou comunidade — em uma rede geoespacial viva: comunidades e salas no mapa, assistentes de IA que respondem, vendem e conectam pessoas, sob a sua própria marca, na web, no iOS e no Android. Em produção desde 2016.

Rust 2026 · workspace de 17 crates Postgres + Timescale + pgvector Dragonfly (Redis) Next.js 16 · pnpm monorepo Motor HAI · 13 tipos de pergunta
Versão inicial · download progressivo Este documento é a versão inicial da arquitetura e não contém a arquitetura completa. A incompletude é esperada e intencional: a arquitetura será progressivamente baixada do template aap-human-agent — o pacote de padrões de interação humano-agente (escalonamento, delegação, agentes proxy, fronteiras de autoridade). Os agentes executam o download; a autoridade permanece com o humano.

CONFIDENCIAL — Carlos Matias Baglieri 2026 · em produção desde 2016

Agenda

Seis seções, um sistema

Da visão de produto à implementação real: backend em Rust, frontend em Next.js, implantação e roadmap.

1 · Produto e visão

Topologia · motor HAI · governança

O espaço é o roteador; 13 tipos de pergunta; isolamento, federação, agêntico, proativo.

2 · Backend

Rust 2026 · 17 crates · hexagonal

Domínio ZERO-I/O, ports & adapters, 3 regimes de autenticação, um Postgres, tempo real.

3 · Frontend

Next.js 16 · FSD + MVVM

4 apps, 13 pacotes, fachadas SDK, RBAC can(), login único, design system.

4 · Deploy / CI

docker-compose · CI de 2 níveis

7 serviços, TLS no ALB, deploys diretos de preprod, gate de integridade no main.

5 · Roadmap

BYOK · ancoragem · self-hosted · DAO

Direção da v2, explicitamente não implementada.

6 · Encerramento

Prestação de contas honesta

O que é produção, o que é desenho, o que é projeção.

Visão · Topologia

O espaço é o roteador

Cada pessoa tem a sua própria organização pessoal e assina n organizações. Cada organização — empresa · governo · sindicato · comunidade — contém n redes; cada rede contém n comunidades; cada comunidade contém n salas. Cada nó tem o seu próprio multipolígono: a contenção corre para dentro (comunidades fragmentadas dentro do polígono da rede) ou para fora (comunidades fora do polígono). A topologia é fractal no sentido matemático: cada nível é uma cópia autossimilar do anterior — S = ⋃ fᵢ(S), o atrator do operador de Hutchinson (teorema do ponto fixo de Banach). As redes interoperam entre si (federação): uma rede conecta-se a outra compartilhando apenas o que é público. Quando uma pessoa entra em uma organização, ela ganha acesso às suas n comunidades e n salas. O trabalho que ela realiza na organização é rastreado na org e espelhado para a sua org pessoal: gera reputação por pessoa, é destilado em problemas resolvidos, e estes são copiados para a sua rede pessoal, que os rastreia. A partir das respostas acumuladas, o HAI constrói uma camada de contexto por usuário.

Zoom: 100%
Topologia: rede → comunidade → sala → persona
org pessoal / organizaçãoredecomunidadesala
Visão · Ontologia

As quatro camadas da plataforma

Cada camada superior compõe as garantias das camadas inferiores sobre interfaces tipadas. Produtos (módulos da v1): HAI, Matchmaking, Chat, Calendar, Market, Social. Sobre as 4 camadas, 10 instanciações setoriais.

Zoom: 100%
Ontologia: 4 camadas + 10 instanciações setoriais
Visão · Princípios

Três princípios que governam a arquitetura

Cada princípio é uma garantia verificável, não uma declaração de intenção. Juntos, estabelecem a regra de composição (ponta a ponta), a regra de multiplicação setorial (herança sem modificação) e a regra de honestidade (implementado e medido = garantia).

Princípio 1 · Composição de camadasRegra de composição ponta a ponta. Se cada camada L₁…L₄ estabelece a sua garantia e toda interface entre camadas passa apenas valores tipados e validados (Zod na fronteira, mapper DTO → domínio), então a propriedade ponta a ponta vale: elicitar de forma sólida (camada 3, P-A3) → executar em um envelope limitado e terminal (camada 3, P-A4) → rotear para o destino correto (camada 1, topologia) → entregar exatamente uma vez (camada 2, P-A7) → dentro de uma autoridade limitada, auditável e isolada por tenant (camada 4, P-A6/P-A8).
Princípio 2 · Instanciação setorialRegra de multiplicação sem tensão. Qualquer implantação setorial (P-C1…P-C10) que instancie as camadas 1–4 sem modificá-las herda as suas garantias e adiciona apenas propriedades específicas do setor. A plataforma é um produto; os setores são visões sobre o mesmo núcleo. Não existe fork por setor — existe composição tipada sobre interfaces estáveis.
Princípio 3 · Prestação de contas honestaRegra de honestidade. As garantias declaradas correspondem exatamente às propriedades implicadas pelos mecanismos implementados e medidos. Capacidades de projeto/projeção não contam como garantia até que o seu mecanismo esteja implementado. Invariante: sem métrica, sem garantia. Se existe uma garantia, existe um dashboard.
Camada 1 · Topologia & Motor

Motor HAI — 13 tipos de pergunta

Em produção desde 2016. Uma premissa deliberadamente estreita e combinável: uma interação é um fluxo de trabalho de perguntas tipadas, e a plataforma é uma topologia geolocalizada para que toda resposta caia em um contexto bem definido. Na v2, o motor roda em duas camadas de inferência: a rede aprendida (determinística, sem LLM) e a inferência A2A, que preenche os nós que não existem e colapsa a rede.

Zoom: 100%
Motor HAI: perguntas tipadas → roteamento → contexto
Produto · módulos v1 → v2

Calendar — vender serviços e gerenciar o calendário

Um vendedor oferece serviços (type_event) com preço, categoria e disponibilidade; clientes reservam (event) com participante, data e local. No modo white-label, qualquer vendedor da mesma rede fica visível e pode receber pedidos — "outros vendem na minha rede". O pagamento cria um merchant na rede e busca produtos por product_key.

Zoom: 100%
Calendar: venda de serviços na rede
vendedor · org pessoalrede = fronteira de visibilidadepagamentos · merchant na rede
Produto · módulos v1 → v2

Market — vender produtos e deixar que outros vendam na minha rede

O vendedor lista produtos (market_product) com merchant, provider e preço, e anexa a eles ofertas/cupons. O cliente monta o carrinho (market_item) e conclui a compra (merchant_tx) com a chave da rede carimbada em json_data. Disputas e avaliações em ambos os lados. Merchants ficam vinculados à rede por merchant.network — "outros vendem na minha rede".

Zoom: 100%
Market: venda de produtos na rede
vendedor · merchantchave da rede na txdisputas + avaliações
Produto · módulos v1 → v2

HAI + matchmaking + chat — a rede pessoal de cada usuário

O HAI popula a rede pessoal de cada usuário ao entender o que ele procura: as redes são povoadas automaticamente a partir do site ou documento da empresa/governo/comunidade/sindicato, fluxos de perguntas são gerados, e também os elos cruzados entre matchings de salas diferentes (da mesma comunidade ou não). O matchmaking automatiza processos: uma intenção do usuário → um pedido de compra no canal de despacho da comunidade, geolocalizado na sala-alvo. Chat em tempo real sobre socket + FCM. Os fluxos são transversais (atravessam salas) e rodam nas duas camadas de inferência: a rede aprendida + A2A, que preenche e colapsa.

Zoom: 100%
HAI + matchmaking + chat: a rede pessoal
HAI · 13 tipos de perguntasalas · cozinha · despachochat em tempo realentre comunidades
Produto · módulos v1 → v2

Social — promoções da rede e interação entre usuários

A rede executa promoções no seu espaço e os usuários interagem em um módulo social: notícias/stories com curtidas e comentários, categorias definidas pelo admin. O feed social vive na topologia — a rede publica, a comunidade fragmenta, a sala recebe.

Zoom: 100%
Social: promoções e interação
rede · publica e promovenotícias/stories · curtir · comentar
Produto · módulos v1 → v2

Duas camadas de inferência — a rede neural que colapsa

Todos os módulos vivem em salas de uma rede e são transversais: um fluxo de dados (HAI) de uma sala de visitantes com pré-vendas conecta-se a um fluxo de um cliente com suporte técnico. Diferente da v1 (grafos estáticos), aqui existem redes neurais: se o nó seguinte não existe, a A2A determina os próximos passos, salva-os e a rede colapsa. O escopo é finito — o que um usuário pergunta em uma rede é salvo para todos — e o consumo de LLM via A2A diminui com o tempo, nunca cresce.

Zoom: 100%
Duas camadas de inferência: rede aprendida + A2A, colapso finito
salas · fluxos de dados transversaiscamada 1 · rede aprendida · sem LLMcamada 2 · A2A · apenas as lacunasescopo finito · consumo decrescente
Camada 2 · Plataforma

Isolamento multi-tenant verificável

Empresas, governos, ONGs e comunidades compartilham um único substrato de IA desde 2016, mantendo o que é privado provadamente privado. Mediação completa pelo Reference Monitor; o único canal permitido = escopos públicos.

Zoom: 100%
Isolamento multi-tenant
privado, nunca atravessapúblico, o único canal
Camada 2 · Plataforma

Redes federadas e matchmaking estável

As redes federam-se sobre as suas projeções públicas. O matchmaking opera apenas em escopos públicos dentro de um raio de proximidade; aceitação diferida → matching estável.

Zoom: 100%
Federação: projeções públicas entre redes
Camada 3 · Interação

Elicitação tipada — aprendizado em poucas perguntas

O sistema pergunta, o usuário responde, e a resposta vira contexto. A elicitação é tipada (o motor computa sem surpresas), fiel e eficiente. Ela roda na camada 1 (rede aprendida, determinística); quando um nó não existe, a camada 2 (A2A) determina os passos, persiste-os e a rede colapsa — aprendizado em poucas perguntas, e cada nova pergunta é salva para todos.

Zoom: 100%
Elicitação tipada
Camada 3 · Interação

Fluxos de trabalho agênticos — o envelope

Alguns nós exigem trabalho aberto: um agente de LLM que intercala raciocínio com chamadas de ferramentas (estilo ReAct) até obter uma resposta do tipo correto. Esta é a camada de inferência 2 (A2A): quando o nó seguinte não existe na rede aprendida, o agente determina os próximos passos, persiste-os e a rede colapsa — o consumo de LLM diminui com o tempo, nunca cresce. O envelope limita os três modos de falha.

Zoom: 100%
Nó agêntico: raciocínio + ferramentas limitadas

Não garantido: a corretude semântica do valor. Um agente pode terminar, permanecer no escopo e emitir uma resposta bem tipada, porém errada — isso é tratado com avaliação e um gate humano, não com o envelope.

Camada 3 · Interação

Assistência proativa — o valor da informação

O inverso de um chatbot reativo: ele inicia em vez de esperar. A parte difícil é a contenção — falar apenas quando o valor líquido esperado de agir excede o valor de permanecer em silêncio.

Zoom: 100%
Ciclo proativo: observar → avaliar → agir
Camada 4 · Governança

Autoridade limitada e procedência

Um agente que pode agir — gastar dinheiro, contatar terceiros, mover dados — deve estar limitado ao que o usuário consentiu, usar a informação apenas para a finalidade dada e deixar um rastro que permita explicar e desfazer.

Zoom: 100%
Pilha de governança: consentimento → capability → log
Camada 4 · Governança

Redes autônomas a serviço de redes humanas

Delegação limitada, alocação contract-net (anunciar → licitar → adjudicar) e o limite honesto da coordenação: vivacidade apenas com sincronia parcial.

Zoom: 100%
Rede autônoma a serviço da rede humana
Transversal

Segurança e o protocolo de evidência

Segurança

Princípios de Saltzer–Schroeder

Mediação completa, economia de mecanismo, padrões fail-safe. A dívida de segurança condiciona várias das garantias da plataforma.

Evidência

Afirmação suportada pela implantação

Uma afirmação C é suportada na implantação se, e somente se, (i) bem tipada, (ii) toda premissa tem evidência validada do pipeline de produção, (iii) as premissas satisfazem a conclusão. Sem isso, C é uma afirmação de projeto.

Zoom: 100%
Ontologia de segurança
Ontologia de segurança: perímetros, confiança, ameaças.
Zoom: 100%
Pipeline de evidência
Pipeline: instrumentar → armazenar → validar → auditar.
Setores

Dez instanciações setoriais

Cada implantação setorial instancia as camadas 1–4 sem modificá-las e herda as suas garantias.

Setor 1

Empresa multilocal

Entrega exatamente única, lei de Little, não-interferência entre locais.

Setor 2

Governo

Tratamento igual, auditabilidade, impossibilidade de justiça.

Setor 3

Humanitário

Triagem leximin, transporte ótimo, privacidade para os vulneráveis.

Setor 4

Comunidades

Cooperação sustentada, reputação, princípios de Ostrom.

Setor 5

Saúde

Topologia de cuidado com privacidade clínica.

Setor 6

Educação

Trilhas de aprendizado sobre a topologia.

Setor 7

Finanças

Pipeline de triagem e a curva de potência.

Setor 8

Logística

Movimento de bens, equidade de preços.

Setor 9

Defensivo

Escopo civil-defensivo explícito.

Setor 10

Crédito comunitário

Reputação e governança sobre os bens comuns.

Prestação de contas honesta

Produção / projeto / projeção

Estado projetado
Mapa do estado projetado — autoavaliação, não uma auditoria externa.
Em produção desde 2016

Topologia · motor · plataforma · elicitação · governança

Os mecanismos centrais estão implantados desde 2016.

Projeto 2026

Agêntico · proativo · federação · autônomo

Capacidades majoritariamente em projeto em 2026; autônomo é projeto em todo o seu escopo.

Projetado

Toda avaliação quantitativa

Todo número quantitativo é projeção, pendente de medição na plataforma viva.

Backend · Rust 2026

17 crates, hexagonal, um Postgres

Raiz de composição (api) → use-cases ×10 → adapters (ledger, a2a, courier) → domínio (core, ZERO I/O). Um único Postgres (Timescale pg17 + pgvector) para tudo: ledger, eventos, embeddings, geo-cache de jobs/whisper. SQL verificado em tempo de compilação (cache offline .sqlx/, 107 consultas).

Zoom: 100%
Backend: api → use-cases → adapters → core → Postgres
api · raiz de composiçãouse-cases ×10adaptadorescore · ZERO I/OPostgres · Timescale pg17 + pgvector.sqlx/ · 107 consultas offline
Backend · Hexagonal

Ports & adapters — domínio no centro

O domínio (everythink-core) não conhece E/S. Os adapters implementam ports para DB, e-mail, A2A. Os use-cases orquestram. A raiz de composição (everythink-api) conecta tudo.

Zoom: 100%
Hexagonal: domínio no centro
domínio (ZERO I/O)adapters (sqlx, Brevo, A2A)use-cases
Backend · 17 crates

Por que tantos crates — um papel explícito por crate

Cada crate tem um papel: raiz de composição (api), cliente (sdk, cli), use-case ×10, adapter de infraestrutura (a2a, courier), ports + persistência (ledger), domínio (core).

Zoom: 100%
Taxonomia de papéis dos crates
Backend · Workspace

17 crates fluem para o core

everythink-api é o hub; tudo depende do core (ZERO I/O). O SDK vive dentro do workspace (backend/crates/everythink-sdk) porque é acoplado ao core.

Zoom: 100%
Grafo de dependências: 17 crates → core

Nota: libs/ abriga SDKs em outras linguagens (refs vendorizadas, código externo).

Backend · Fluxo de requisição

Da autenticação à persistência — uma requisição completa

Cliente → api (auth + rate-limit + validação) → loom (execução) → ledger (resolve o perfil via o trait de repositório) → sisters (fan-out) → oracle (merge → Ensemble normalizado) → ledger (persiste) → 200 OK.

Zoom: 100%
Ciclo de vida da requisição
Backend · Use-cases

Seis use-cases: orquestração, autenticação e dados

loom — orquestração: persiste via o port LoomStore / adapter LoomPersistence. ingest — pipeline de sinais: processa os sinais que chegam. scry — sentimento: o port de referência SentimentReader / PgSentimentReader. eval — harness de regressão: avaliação contínua. warden — autenticação: JWT access/refresh, Google OAuth, vínculo de IP. whisper — webhooks assinados com HMAC com entrega exatamente única.

Zoom: 100%
Use-cases: loom · ingest · scry · eval · warden · whisper
Backend · Segurança

Cadeia de middleware — trace → timeout → CORS → roteamento

Requisição que chega → Trace + request_id → Timeout 60s → 408 → CORS + compressão → subárvore de rotas com 5 ramos.

Zoom: 100%
Cadeia de middleware
Backend · Segurança

Três regimes de autenticação coexistem em um único router

Público (probes/register/login/refresh) · Eye-Key (HMAC, rate limit deslizante de 60s) · user-JWT (warden, Console) · Atlas WS (auto-autenticado, limites por usuário).

Zoom: 100%
Três regimes de autenticação
Backend · Segurança

RBAC sem herança — uma função, uma matriz explícita

can(role, action) como const fn: Owner → true; Profile Read/Write Self → true; correspondência explícita em (role, action); o resto → somente Owner. AUTHORIZE no handler → 403 em caso de negação.

Zoom: 100%
RBAC can(role, action)
Backend · Dados

Um datastore para tudo

timescale/timescaledb-ha:pg17 + pgvector (vector(1024) + HNSW). Um pool. Seis domínios de dados: Ledger, Simulations, Users, Embeddings, geo_signals, Jobs. Health check: pg_isready no docker-compose (service_healthy).

Zoom: 100%
Um único Postgres
Backend · Dados

Persistência via um port, nunca via um concreto

Repository TRAIT · Pg*Repository (todo o SQL vive aqui) · MockRepository (testes sem DB) · AppState: Arc<dyn Repository> · os use-cases chamam o TRAIT.

Zoom: 100%
Contrato trait ↔ adapter
Backend · Dados

SQL verificado em tempo de compilação, migrações reversíveis

Edite .up.sql + .down.sql (emparelhados) → just sqlx-prepare → faça commit de .sqlx/*.json (107 consultas) → build/CI com SQLX_OFFLINE=true e sem DB ativo.

Zoom: 100%
Cache offline do sqlx
Backend · Especificidades de deploy

Health checks + SQLX offline — deploys precisos

docker-compose: postgres (pg_isready, 10s/5s/10) → dragonfly (redis-cli ping, 10s/3s/10) → api (service_healthy). app/admin: health check desativado (distroless/static). CI: SQLX_OFFLINE=true com o cache .sqlx/ commitado.

Zoom: 100%
Deploy do backend: cadeia de health checks + fluxo SQLX
postgres · pg_isready · intervalo 10s / timeout 5s / 10 tentativasdragonfly · redis-cli ping · intervalo 10s / timeout 3s / 10 tentativasapi · depends_on service_healthySQLX_OFFLINE=true · .sqlx/ 107 consultas
Backend · Tempo real

SSE (Tide) + WebSocket (GeoHub) — fan-out por tile

TideBroker: SSE com tópicos compostos, broadcast 256, keep-alive 15s, reconexão por Last-Event-ID. GeoHub: WS com DashMap[Tile → broadcast 64], direção de viewport, gzip opcional.

Zoom: 100%
Tempo real: SSE + WS por tile
Backend · Use-cases

Seis use-cases de orquestração e dados

loom

Orquestração

Persiste via o port LoomStore / adapter LoomPersistence.

ingest

Pipeline de sinais

Processa os sinais que chegam para dentro do sistema.

scry

Sentimento

O port de referência SentimentReader / PgSentimentReader.

eval

Harness de regressão

Avaliação contínua de qualidade.

warden

Autenticação de usuários

JWT access/refresh, Google OAuth, vínculo de IP.

whisper

Webhooks HMAC

Entrega durável, exatamente única.

Backend · Use-cases

everythink-warden — autenticação de usuários

warden

JWT access/refresh

Hash de senhas (bcrypt), JWT access/refresh rotativos, Google OAuth, sessões com vínculo de IP para detecção de anomalias.

/api/v1/auth/*

register · login · refresh · me · google · sessions

A fronteira de user-JWT para Console + Atlas WS. O token é escrito em localStorage('everythink:auth') após um único login em /auth.

Zoom: 100%
Warden: fluxo de autenticação
Backend · Use-cases

everythink-whisper — webhooks assinados e entrega durável

whisper

Webhooks assinados com HMAC

Worker de entrega com o port WhisperStore / adapter PgWhisperStore. Assinatura HMAC para verificação do payload no recebedor.

jobs

Fila durável no Postgres

Retries exponenciais, semântica exatamente única, dead-letter queue para falhas persistentes.

Zoom: 100%
Whisper: fluxo de entrega de webhooks
Backend · Adapters

A2A (protocolo) e Courier (e-mail)

everythink-a2a

Protocolo Google A2A

JSON-RPC sobre HTTP com um envelope de tarefa de agente, polling de status e recuperação de resultado. Permite que uma Sister saia do processo sem mudar os chamadores.

everythink-courier

E-mail transacional

Adapter Brevo ou um no-op de logging. Renderização de templates + rastreio de entrega para notificações do sistema.

Zoom: 100%
Adapters: A2A + Courier
Backend · Clientes

everythink-cli e everythink-sdk

everythink-cli

Ferramenta de operações

new-key faz o bootstrap-mint de Eye Keys: gera um par Ed25519 local, fingerprint → Postgres, o texto puro é exibido uma única vez em memória, HMAC para autenticação.

everythink-sdk

SDK Rust dentro do workspace

backend/crates/everythink-sdk: acoplado a everythink-core, depende apenas do core (ZERO I/O), para consumidores do domínio.

Zoom: 100%
Clientes: CLI + SDK
Backend · Invariantes

Seis invariantes que nunca são violados

1

Probabilidades normalizadas

Em exatamente um lugar: everythink-oracle::ensemble. sum(prob) ≈ 1.0, cenários ordenados de forma decrescente, entropia em nats.

2

O texto puro do Eye-Key nunca toca o disco

Somente o HMAC + fingerprint vão para o Postgres. O texto puro é exibido uma vez, em memória.

3

As Sisters nunca escrevem no Postgres

Elas retornam SisterOutput; o Loom persiste. Uma separação clara entre geração e armazenamento.

4

Migrações reversíveis

Todo .up.sql tem o seu .down.sql. just migrate-add NAME cria ambos.

5

Repositórios do AppState Arc<dyn Trait>

Os testes usam mocks. Dependa do trait, nunca do adapter concreto.

6

Persistência via um port

Nunca um Pg* concreto fora do seu adapter. Ports pertencentes à slice para tabelas privadas.

Zoom: 100%
Seis invariantes
Frontend · Next.js 16

4 apps, 13 pacotes, uma identidade

web (:3000) · app (:3001) · admin (:3002) · mobile (Expo). Pacotes: types, sdk-core + facades, domain, ui, auth, api-client, telemetry, config.

Zoom: 100%
Frontend: 4 apps + 13 pacotes
apps · Next.js 16 + Expotypes · domain · configsdk-core + facadesui · auth · api-client · telemetry
Frontend · C4 nível 1

Quatro superfícies, um backend, três atores

Atores: usuário final (guest → autenticado) · desenvolvedor (Eye-Key) · admin/operador (staff). Superfícies: web/app/admin/mobile. API do backend (REST + SSE sob /api/v1).

Zoom: 100%
Contexto C4
Frontend · C4 nível 2

Containers — o monorepo completo

4 apps + camada SDK (6 facades) + serviços (4) + design system + tooling + types (folha). Use o zoom para explorar.

Zoom: 100%
Containers C4: monorepo completo
Frontend · Apps

web, app, admin, mobile — um por público

Zoom: 100%
Os 4 apps
Frontend · SDK

Seis facades, um core, zero endpoints no core

sdk-core (HttpClient, consumeSSE, TokenProvider) · sdk-guest · sdk-auth · sdk-atlas · sdk-eye · sdk-admin.

Zoom: 100%
Camada SDK: facades com escopo de confiança
Frontend · Pacotes

Serviços de aplicação, UI e tempo de build

domain (mappers) · telemetry (outbox) · api-client (legado) · auth (NextAuth v5 + RBAC) · ui (kit + tokens) · config (presets de eslint) · types (Zod, folha).

Zoom: 100%
Serviços + design + tooling
Frontend · SDK

sdk-core sabe o COMO, nunca o QUÊ

Os endpoints vivem SOMENTE nas facades; o sdk-core valida toda resposta com Zod contra @everythink/types; uma árvore de SdkError com ContractViolation em caso de drift.

Zoom: 100%
Facades do SDK: endpoints apenas nas facades
Frontend · FSD + MVVM

Feature-Sliced Design + MVVM — os imports fluem para baixo

Screen (View) → hook de view-model → feature.repository.ts (A única porta para o SDK). Regra de fronteira ESLint no-restricted-imports (INV-1). Camadas FSD: shared → entities → features → widgets → app.

Zoom: 100%
Fronteira de repositório FSD + MVVM
Frontend · Identidade

Um login, uma origem, quatro superfícies

apps/web /auth (uma origem) → cookie httpOnly 'everythink_at' → token em memória + semente no localStorage → EverythinkAuthGuard + resolveMe (GET /api/v1/auth/me) → gate por papel (role).

Zoom: 100%
Login compartilhado
Frontend · Identidade

can(role, action) — matriz explícita, sem herança

3 camadas: (1) auth.ts allowedRoles por app → (2) middleware → (3) can() na UI + server actions. Espelha everythink_core::rbac do backend.

Zoom: 100%
RBAC do frontend
Frontend · UI

Uma folha de estilos, tokens semânticos, Tailwind v4

Uma única fonte da verdade para o design: tokens CSS em :root, mapeamento semântico via @theme (Tailwind v4) e NativeWind para o mobile com tokens espelhados. Os apps consomem componentes semânticos (bg-accent, text-foreground, font-display/mono), nunca hexes brutos. Paleta cosmic-purple: --gold: #d9ab5c, --violet: #9d7df5, --emerald: #10B981.

Zoom: 100%
Arquitetura de UI/tema: tokens → Tailwind → componentes
:root · propriedades CSS customizadas@theme · Tailwind v4 semântico@everythink/ui · kit de componentesMobile · NativeWind espelhado
Frontend · Tipos

Zod na fronteira de rede — um único contrato

Os tipos de rede são definidos uma única vez em @everythink/types com Zod. O SDK valida toda resposta do backend (z.parse(response)); um payload inválido lança ApiError, nunca um crash. Os componentes nunca veem JSON bruto: *.repository.ts faz o parse, @everythink/domain mapeia DTO → model, e o view-model expõe estado tipado para a View.

Zoom: 100%
Fronteira de validação Zod: API → SDK → repository → domain → view-model
Backend API · JSONsdk-core · valida com Zod*.repository.ts · a única fronteiraApiError · tipado, nunca um crash
Frontend · Mobile

apps/mobile — Expo, expo-router, NativeWind

React Native com expo-router (roteamento baseado em arquivos) e NativeWind (Tailwind para RN). O sistema de tema espelha os tokens do design system web (tailwind.config.js + src/theme/index.ts). Ele consome sdk-guest, sdk-auth, sdk-atlas, domain e telemetry. Excluído do CI web: --filter=!@everythink/mobile.

Zoom: 100%
Estrutura do app mobile: Expo + NativeWind + tema
expo-router · roteamento baseado em arquivosNativeWind · Tailwind RNsrc/theme · tokens espelhadosCI · excluído do turbo web
Frontend · Regras

Quatro regras aplicadas mecanicamente

Regras verificáveis por ESLint + TypeScript, não convenções: (1) INV-1: somente *.repository.ts importa um SDK (no-restricted-imports); (2) Camadas FSD: os imports fluem PARA BAIXO (shared → entities → features → widgets → app), consumo entre features somente via o barrel público; (3) Login compartilhado: web + app compartilham localStorage('everythink:auth') + resolveMe(); (4) RBAC de 3 camadas: auth.ts allowedRoles → middleware → can(role, action) na UI + server actions.

Zoom: 100%
Camadas FSD + INV-1 + login + RBAC
INV-1 · somente repository.ts importa um SDKFSD · imports PARA BAIXOLogin · localStorage + resolveMeRBAC · 3 camadas, sem herança
Deploy · docker-compose.prod.yml

7 serviços, TLS no ALB, segredos no .env

ALB → nginx :80 → api/web/app/admin + postgres + dragonfly. Um único Postgres para tudo (TimescaleDB pg17 + pgvector). Dragonfly para cache, jobs e fan-out de SSE.

TLS no ALB da AWS deploy direto de preprod CI/CD de 2 níveis
api · migrações na inicializaçãoweb · Next.js standalonepostgres · pg17 + pgvectorapp/admin · estático distroless
Deploy · Stack

docker-compose.prod.yml — a stack completa

ALB (TLS) → nginx :80 → api (:18081, migrações na inicialização) · web (Next standalone) · app/admin (estático distroless) · postgres (timescale/timescaledb-ha:pg17 + pgvector) · dragonfly (compatível com Redis). 7 serviços: postgres · dragonfly · api · web · app · admin · nginx.

Zoom: 100%
Stack de produção · 7 serviços
postgres · timescaledb-ha:pg17 + pgvectordragonfly · compatível com Redisapi · migrações na inicializaçãoweb · Next.js standaloneapp/admin · estático distroless
Deploy · Rede

nginx como ponto de entrada único

nginx :80 é o único ponto de entrada interno. Ele roteia /api/v1/* → api:18081, / → web:3000, /app/* → estático, /admin/* → estático. O web fala com o api via EVERYTHINK_API_INTERNAL_URL (http://api:18081). O api depende do postgres e do dragonfly com condition: service_healthy.

Zoom: 100%
Diagrama de roteamento do nginx
nginx · ponto de entrada únicoweb → api · INTERNAL_URLhealth checks · service_healthy
Deploy · Segredos

backend/.env — o único lugar para segredos

O docker-compose.prod.yml monta backend/.env via env_file nos serviços api e web. O api detém todos os segredos (JWT_SECRET, EYE_KEY_HMAC_SECRET, GOOGLE_CLIENT_ID, BREVO_API_KEY). O web recebe apenas variáveis NEXT_PUBLIC_* — ele nunca detém a BREVO_API_KEY. app/admin são estáticos distroless, sem segredos no build.

Zoom: 100%
Diagrama da fronteira de segredos
api · todos os segredosweb · apenas NEXT_PUBLIC_*regra · o web NÃO detém a Brevo
Deploy · Fluxo

Preprod direto vs o gate de CI/CD

Dois caminhos de deploy: o preprod faz deploy diretamente da árvore de trabalho (sem passar pelo main); o prod exige um merge no main e o gate de integridade. A regra é crítica: NÃO use o workflow de deploy para o preprod, porque ele puxa a :latest do main e sobrescreve o deploy direto.

Zoom: 100%
Fluxo de deploy preprod vs prod
preprod · árvore de trabalho → scriptprod · main → :latest → workflowregra · NENHUM workflow de deploy para o preprod
CI/CD · GitHub Actions

affected nos PRs, integridade no main

Um pipeline de 2 níveis: o nível de PR roda apenas o que é afetado (backend: ci-affected-crates.sh; frontend: turbo --affected), o nível de main roda a integridade completa (backend completo + frontend/mobile + E2E + segurança). O main permanece verde e implantável.

Zoom: 100%
Pipeline de CI/CD de 2 níveis
just ci · fmt · lint · check · testpnpm ci · turbo lint · typecheck · buildintegridade do main · completo + E2E + segurança
Roadmap · 🔵 Não implementado

Nós self-hosted federados · BYOK · DAO por rede

Direção do roadmap para a v2. Nada do que segue é uma capacidade existente. Fluxo: o operador gera um par Ed25519 local → somente o fingerprint vai para o controller (BYOK) → nó self-hosted → ancoragem do ledger → federação apenas sobre projeções públicas → DAO da rede.

Zoom: 100%
Roadmap v2: self-hosted · BYOK · DAO
Roadmap · Fases

Cinco fases rumo à v2

FaseItemDepende deEntregável
1BYOKcrate everythink-byok · tabela node_keys · identidade Ed25519 + webhooks · o controller detém apenas fingerprints
2Ancoragem do ledgerFase 1crate everythink-anchor · tabela anchor_commitments · job de notarização · chain = decisão do operador
3Nós self-hosted federadosFases 1–2imagem Docker do nó (postgres, dragonfly, api, web, app, admin, nginx) · protocolo de federação
4DAO por redeFase 2crate everythink-dao · network_proposals/network_votes/provenance_log append-only
5Wallet + governançacrate everythink-wallet · wallets/network_memberships · personas de empregado/empreendedor/autônomo

Cada fase: uma migração .up.sql + .down.sql, um refresh do cache .sqlx offline, TDD (80%+), just ci verde. A estrutura por tipo de organização está implementada (OrgKind de 5 valores, CHECK no DB, onboarding de 7 estruturas legais).

Roadmap · Ancoragem

Arquitetura de referência da chain candidata

Referência de arquitetura para notarizar compromissos de hash do ledger Postgres: Solana v0.8.13 (Yakovenko) — PoH como um relógio criptográfico, consenso PoS com bonds/slashing, PoRep para armazenamento. A escolha da chain é uma decisão explícita do operador; isto é uma referência, não uma implementação.

Zoom: 100%
Mecanismos da chain candidata
PoH · passo de tempo verificávelPoS · bonds · slashing · supermaioria de ⅔PoRep · streaming · armazenamentoLeader → Verifiers · confirmações = votos~710k TPS · finalização em menos de um segundoCAP: consistência em vez de disponibilidade
Encerramento

Everythink Studio — arquitetura completa

Da visão à implementação: topologia e motor HAI (produção desde 2016), backend Rust com 17 crates hexagonais, frontend Next.js 16 com FSD/MVVM, Postgres + pgvector, CI/CD de 2 níveis, implantação. Nota de fronteira: o motor de previsão (sisters/oracle/loom) é outro produto do mesmo autor, dentro do workspace.

Rust 2026 · 17 crates Postgres + pgvector · sqlx Next.js 16 · pnpm · FSD 3 regimes de autenticação · RBAC can() World Monitor · sinais geo CI/CD de 2 níveis · preprod direto
Versão inicial · download progressivo Este documento é a versão inicial da arquitetura e não contém a arquitetura completa. A incompletude é esperada e intencional: a arquitetura será progressivamente baixada do template aap-human-agent — o pacote de padrões de interação humano-agente (escalonamento, delegação, agentes proxy, fronteiras de autoridade). Os agentes executam o download; a autoridade permanece com o humano.

Everythink Studio · Carlos Matias Baglieri 2026 · docs/architecture.md · backend/README.md · frontend/README.md · COLLABORATION.md · cto.md

Everythink Studio · Arquitetura
1 / 64 ← →