Documento de Arquitectura · C4 + Despliegue

Everythink Studio
Arquitectura Global del Sistema

Un sistema operativo de IA sin código que convierte una organización — empresa, gobierno o comunidad — en una red geoespacial viva: comunidades y salas en el mapa, asistentes de IA que responden, venden y conectan personas, bajo tu propia marca, en web, iOS y Android. En producción desde 2016.

Rust 2026 · workspace de 17 crates Postgres + Timescale + pgvector Dragonfly (Redis) Next.js 16 · monorepo pnpm Motor HAI · 13 tipos de pregunta
Versión inicial · descarga progresiva Este documento es la versión inicial de la arquitectura y no contiene la arquitectura completa. La incompletitud es esperada y deliberada: la arquitectura se descargará progresivamente desde la plantilla aap-human-agent — el paquete de patrones de interacción humano-agente (escalación, delegación, agentes proxy, límites de autoridad). Los agentes ejecutan la descarga; la autoridad permanece en el humano.

CONFIDENCIAL — Carlos Matias Baglieri 2026 · en producción desde 2016

Agenda

Seis secciones, un sistema

De la visión de producto a la implementación real: backend en Rust, frontend en Next.js, despliegue y hoja de ruta.

1 · Producto y visión

Topología · motor HAI · gobernanza

El espacio es el router; 13 tipos de pregunta; aislamiento, federación, agéntico, proactivo.

2 · Backend

Rust 2026 · 17 crates · hexagonal

dominio ZERO-I/O, puertos & adaptadores, 3 regímenes de autenticación, un solo Postgres, tiempo real.

3 · Frontend

Next.js 16 · FSD + MVVM

4 apps, 13 paquetes, facades de SDK, RBAC can(), inicio de sesión único, sistema de diseño.

4 · Despliegue / CI

docker-compose · CI de 2 niveles

7 servicios, TLS en el ALB, deploys directos a preprod, puerta de integridad en main.

5 · Hoja de ruta

BYOK · anclaje · self-hosted · DAO

Dirección de v2, explícitamente no implementada.

6 · Cierre

Contabilidad honesta

Qué es producción, qué es diseño, qué es proyectado.

Visión · Topología

El espacio es el router

Cada persona tiene su propia organización personal y se suscribe a n organizaciones. Cada organización — empresa · gobierno · sindicato · comunidad — contiene n redes; cada red contiene n comunidades; cada comunidad contiene n salas. Cada nodo tiene su propio multipolígono: la contención corre hacia adentro (comunidades fragmentadas dentro del polígono de la red) o hacia afuera (comunidades fuera del polígono). La topología es fractal en el sentido matemático: cada nivel es una copia autosimilar del anterior — S = ⋃ fᵢ(S), el atractor del operador de Hutchinson (teorema del punto fijo de Banach). Las redes interoperan entre sí (federación): una red se conecta a otra compartiendo solo lo público. Cuando una persona se une a una organización, gana acceso a sus n comunidades y n salas. El trabajo que realiza en la organización se registra en la org y se refleja en su organización personal: genera reputación por persona, se destila en problemas resueltos, y estos se copian a su red personal, que les hace seguimiento. A partir de las respuestas acumuladas, HAI construye una capa de contexto por usuario.

Zoom: 100%
Topología: red → comunidad → sala → persona
organización personal / organizaciónredcomunidadsala
Visión · Ontología

Las cuatro capas de la plataforma

Cada capa superior compone las garantías de las capas inferiores sobre interfaces tipadas. Productos (módulos v1): HAI, Matchmaking, Chat, Calendario, Mercado, Social. Sobre las 4 capas, 10 instanciaciones sectoriales.

Zoom: 100%
Ontología: 4 capas + 10 instanciaciones sectoriales
Visión · Principios

Tres principios que gobiernan la arquitectura

Cada principio es una garantía verificable, no una declaración de intenciones. Juntos establecen la regla de composición (extremo a extremo), la regla de multiplicación sectorial (herencia sin modificación) y la regla de honestidad (implementado y medido = garantía).

Principio 1 · Composición de capasRegla de composición extremo a extremo. Si cada capa L₁…L₄ establece su garantía y toda interfaz entre capas pasa solo valores tipados y validados (Zod en el borde, mapeador DTO → dominio), entonces la propiedad extremo a extremo se cumple: elicitar de forma sólida (capa 3, P-A3) → ejecutar en un sobre acotado y terminal (capa 3, P-A4) → enrutar al destino correcto (capa 1, topología) → entregar exactamente una vez (capa 2, P-A7) → dentro de una autoridad acotada, auditable y aislada por tenant (capa 4, P-A6/P-A8).
Principio 2 · Instanciación sectorialRegla de multiplicación sin tensión. Cualquier despliegue sectorial (P-C1…P-C10) que instancie las capas 1–4 sin modificarlas hereda sus garantías y añade solo propiedades específicas del sector. La plataforma es un producto; los sectores son vistas sobre el mismo núcleo. No hay fork por sector — hay composición tipada sobre interfaces estables.
Principio 3 · Contabilidad honestaRegla de honestidad. Las garantías declaradas corresponden exactamente a las propiedades implicadas por los mecanismos implementados y medidos. Las capacidades de diseño o proyectadas no cuentan como garantía hasta que su mecanismo está implementado. Invariante: sin métrica, no hay garantía. Si hay garantía, hay un dashboard.
Capa 1 · Topología & Motor

Motor HAI — 13 tipos de pregunta

En producción desde 2016. Una premisa deliberadamente estrecha y componible: una interacción es un flujo de preguntas tipadas, y la plataforma es una topología geolocalizada para que cada respuesta caiga en un contexto bien definido. En v2 el motor corre sobre dos capas de inferencia: la red aprendida (determinista, sin LLM) y la inferencia A2A, que rellena los nodos que no existen y colapsa la red.

Zoom: 100%
Motor HAI: preguntas tipadas → enrutamiento → contexto
Producto · módulos v1 → v2

Calendario — vender servicios y gestionar la agenda

Un vendedor ofrece servicios (type_event) con precio, categoría y disponibilidad; los clientes reservan (event) con asistente, fecha y ubicación. En modo marca blanca, cualquier vendedor de la misma red es visible y ordenable — "otros venden en mi red". El pago crea un merchant en la red y busca productos por product_key.

Zoom: 100%
Calendario: vender servicios en la red
vendedor · organización personalred = frontera de visibilidadpagos · merchant en la red
Producto · módulos v1 → v2

Market — vender productos y dejar que otros vendan en mi red

El vendedor publica productos (market_product) con merchant, proveedor y precio, y les adjunta ofertas/cupones. El cliente arma el carrito (market_item) y paga (merchant_tx) con la clave de red estampada en json_data. Disputas y calificaciones en ambos lados. Los merchants quedan ligados a la red por merchant.network — "otros venden en mi red".

Zoom: 100%
Market: vender productos en la red
vendedor · merchantclave de red en la txdisputas + calificaciones
Producto · módulos v1 → v2

HAI + matchmaking + chat — la red personal de cada usuario

HAI llena la red personal de cada usuario entendiendo lo que busca: las redes se pueblan automáticamente desde el sitio web o documento de la empresa/gobierno/comunidad/sindicato, se generan los flujos de pregunta y también los enlaces cruzados entre matchings de distintas salas (de la misma o de distinta comunidad). El matchmaking automatiza procesos: una intención del usuario → una orden de compra en el canal de despacho de la comunidad, geolocalizada en la sala destino. Chat en tiempo real sobre socket + FCM. Los flujos son transversales (cruzan salas) y corren sobre las dos capas de inferencia: la red aprendida + A2A, que rellena y colapsa.

Zoom: 100%
HAI + matchmaking + chat: la red personal
HAI · 13 tipos de preguntasalas · cocina · despachochat en tiempo realentre comunidades
Producto · módulos v1 → v2

Social — promociones de la red e interacción de usuarios

La red corre promociones en su espacio y los usuarios interactúan en un módulo social: noticias/stories con likes y comentarios, categorías definidas por el admin. El feed social vive en la topología — la red publica, la comunidad fragmenta, la sala recibe.

Zoom: 100%
Social: promociones e interacción
red · publica y promocionanoticias/stories · like · comentario
Producto · módulos v1 → v2

Dos capas de inferencia — la red neuronal que colapsa

Todos los módulos viven en salas de una red y son transversales: un dataflow (HAI) desde una sala de pre-venta se conecta con el de un cliente con soporte técnico. A diferencia de v1 (grafos estáticos), aquí hay redes neuronales: si el nodo siguiente no existe, A2A determina los pasos siguientes, los guarda, y la red colapsa. El alcance es finito — lo que un usuario pregunta en una red se guarda para todos — y el consumo de LLM vía A2A disminuye con el tiempo, nunca crece.

Zoom: 100%
Dos capas de inferencia: red aprendida + A2A, colapso finito
salas · dataflows transversalescapa 1 · red aprendida · sin LLMcapa 2 · A2A · solo los huecosalcance finito · el consumo disminuye
Capa 2 · Plataforma

Aislamiento multi-tenant verificable

Empresas, gobiernos, ONG y comunidades comparten un único sustrato de IA desde 2016, manteniendo lo privado demostrablemente privado. Mediación total por el Reference Monitor; el único canal permitido = los ámbitos públicos.

Zoom: 100%
Aislamiento multi-tenant
privado, nunca cruzapúblico, el único canal
Capa 2 · Plataforma

Redes federadas y matchmaking estable

Las redes federan sobre sus proyecciones públicas. El matchmaking opera solo en ámbitos públicos dentro de un radio de proximidad; aceptación diferida → matching estable.

Zoom: 100%
Federación: proyecciones públicas entre redes
Capa 3 · Interacción

Elicitación tipada — aprender en pocas preguntas

El sistema pregunta, el usuario responde, y la respuesta se vuelve contexto. La elicitación es tipada (el motor computa sin sorpresas), fiel y eficiente. Corre sobre la capa 1 (red aprendida, determinista); cuando un nodo no existe, la capa 2 (A2A) determina los pasos, los persiste y la red colapsa — aprender en pocas preguntas, y cada pregunta nueva queda guardada para todos.

Zoom: 100%
Elicitación tipada
Capa 3 · Interacción

Flujos agénticos — el sobre

Algunos nodos exigen trabajo abierto: un agente LLM que intercala razonamiento con llamadas a herramientas (estilo ReAct) hasta obtener una respuesta del tipo correcto. Esto es la capa de inferencia 2 (A2A): cuando el nodo siguiente no existe en la red aprendida, el agente determina los pasos, los persiste y la red colapsa — el consumo de LLM disminuye con el tiempo, nunca crece. El sobre acota los tres modos de falla.

Zoom: 100%
Nodo agéntico: razonamiento + herramientas acotadas

No garantizado: la corrección semántica del valor. Un agente puede terminar, mantenerse en alcance y emitir una respuesta bien tipada pero incorrecta — esto se ataca con evaluación y una puerta humana, no con el sobre.

Capa 3 · Interacción

Asistencia proactiva — el valor de la información

Lo inverso a un chatbot reactivo: inicia en lugar de esperar. Lo difícil es la contención — hablar solo cuando el valor neto esperado de actuar supera el valor de guardar silencio.

Zoom: 100%
Bucle proactivo: observar → evaluar → actuar
Capa 4 · Gobernanza

Autoridad acotada y procedencia

Un agente que puede actuar — gastar dinero, contactar terceros, mover datos — debe estar acotado por lo que el usuario consintió, usar la información solo para el fin dado, y dejar un rastro que permita explicar y deshacer.

Zoom: 100%
Pila de gobernanza: consentimiento → capacidad → registro
Capa 4 · Gobernanza

Redes autónomas al servicio de las redes humanas

Delegación acotada, asignación contract-net (announce → bid → award), y el límite honesto de la coordinación: liveness solo con sincronía parcial.

Zoom: 100%
Red autónoma al servicio de la red humana
Transversal

Seguridad y el protocolo de evidencia

Seguridad

Principios de Saltzer–Schroeder

Mediación completa, economía de mecanismo, valores por defecto a prueba de fallas. La deuda de seguridad condiciona varias de las garantías de la plataforma.

Evidencia

Afirmación respaldada por el despliegue

Una afirmación C está respaldada en despliegue si y solo si (i) está bien tipada, (ii) cada premisa tiene evidencia validada del pipeline de producción, (iii) las premisas satisfacen la conclusión. Sin eso, C es una afirmación de diseño.

Zoom: 100%
Ontología de seguridad
Ontología de seguridad: perímetros, confianza, amenazas.
Zoom: 100%
Pipeline de evidencia
Pipeline: instrumentar → almacenar → validar → auditar.
Sectores

Diez instanciaciones sectoriales

Cada despliegue sectorial instancia las capas 1–4 sin modificarlas y hereda sus garantías.

Sector 1

Empresa multisede

Entrega exactamente una vez, ley de Little, no interferencia entre sedes.

Sector 2

Gobierno

Trato igual, auditabilidad, imposibilidad de equidad.

Sector 3

Humanitario

Triage leximin, transporte óptimo, privacidad para los vulnerables.

Sector 4

Comunidades

Cooperación sostenida, reputación, principios de Ostrom.

Sector 5

Salud

Topología de cuidados con privacidad clínica.

Sector 6

Educación

Rutas de aprendizaje sobre la topología.

Sector 7

Finanzas

Pipeline de screening y la curva de potencia.

Sector 8

Logística

Movimiento de bienes, equidad de precios.

Sector 9

Defensivo

Alcance civil-defensivo explícito.

Sector 10

Crédito comunitario

Reputación y gobernanza sobre los bienes comunes.

Contabilidad honesta

Producción / diseño / proyectado

Estado proyectado
Mapa de estado proyectado — autoevaluación, no una auditoría externa.
Producción desde 2016

Topología · motor · plataforma · elicitación · gobernanza

Los mecanismos núcleo están desplegados desde 2016.

Diseño 2026

Agéntico · proactivo · federación · autónomo

Capacidades en gran medida en diseño 2026; autónomo es diseño en todo su alcance.

Proyectado

Toda la evaluación cuantitativa

Toda cifra cuantitativa está proyectada, pendiente de medición en la plataforma viva.

Backend · Rust 2026

17 crates, hexagonal, un solo Postgres

Raíz de composición (api) → casos de uso ×10 → adaptadores (ledger, a2a, courier) → dominio (core, ZERO I/O). Un único Postgres (Timescale pg17 + pgvector) para todo: ledger, eventos, embeddings, geo-cache de jobs/whisper. SQL verificado en tiempo de compilación (caché offline .sqlx/, 107 consultas).

Zoom: 100%
Backend: api → casos de uso → adaptadores → core → Postgres
api · raíz de composicióncasos de uso ×10adaptadorescore · ZERO I/OPostgres · Timescale pg17 + pgvector.sqlx/ · 107 consultas offline
Backend · Hexagonal

Puertos & adaptadores — el dominio al centro

El dominio (everythink-core) no conoce I/O. Los adaptadores implementan los puertos para DB, email, A2A. Los casos de uso orquestan. La raíz de composición (everythink-api) conecta todo.

Zoom: 100%
Hexagonal: el dominio al centro
dominio (ZERO I/O)adaptadores (sqlx, Brevo, A2A)casos de uso
Backend · 17 crates

Por qué tantos crates — un rol explícito por crate

Cada crate tiene un rol: raíz de composición (api), clientes (sdk, cli), caso de uso ×10, adaptador de infra (a2a, courier), puertos + persistencia (ledger), dominio (core).

Zoom: 100%
Taxonomía de roles de crates
Backend · Workspace

17 crates confluyen en core

everythink-api es el hub; todo depende de core (ZERO I/O). El SDK vive dentro del workspace (backend/crates/everythink-sdk) porque está acoplado a core.

Zoom: 100%
Grafo de dependencias: 17 crates → core

Nota: libs/ contiene los SDK en otros lenguajes (referencias vendored, código externo).

Backend · Flujo de petición

De la autenticación a la persistencia — una petición completa

Cliente → api (auth + rate-limit + validate) → loom (ejecutar) → ledger (resolver perfil vía el trait de repositorio) → sisters (fan out) → oracle (merge → Ensemble normalizado) → ledger (persistir) → 200 OK.

Zoom: 100%
Ciclo de vida de la petición
Backend · Casos de uso

Seis casos de uso: orquestación, autenticación y datos

loom — orquestación: persiste vía el puerto LoomStore / adaptador LoomPersistence. ingest — pipeline de señales: procesa las señales entrantes. scry — sentimiento: el puerto de referencia SentimentReader / PgSentimentReader. eval — arnés de regresión: evaluación continua. warden — auth: JWT access/refresh, Google OAuth, IP-binding. whisper — webhooks firmados con HMAC y entrega exactamente una vez.

Zoom: 100%
Casos de uso: loom · ingest · scry · eval · warden · whisper
Backend · Seguridad

Cadena de middleware — trace → timeout → CORS → routing

Petición entrante → Trace + request_id → Timeout 60s → 408 → CORS + compresión → subárbol de rutas con 5 ramas.

Zoom: 100%
Cadena de middleware
Backend · Seguridad

Tres regímenes de autenticación coexisten en un router

Público (probes/register/login/refresh) · Eye-Key (HMAC, rate limit deslizante de 60s) · JWT de usuario (warden, Consola) · Atlas WS (autenticación propia, topes por usuario).

Zoom: 100%
Tres regímenes de autenticación
Backend · Seguridad

RBAC sin herencia — una función, una matriz explícita

can(role, action) como const fn: Owner → true; Profile Read/Write Self → true; match explícito en (role, action); el resto → solo Owner. AUTHORIZE en el handler → 403 ante una denegación.

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

Un almacén de datos para todo

timescale/timescaledb-ha:pg17 + pgvector (vector(1024) + HNSW). Un solo pool. Seis dominios de datos: Ledger, Simulaciones, Usuarios, Embeddings, geo_signals, Jobs. Health check: pg_isready en docker-compose (service_healthy).

Zoom: 100%
Un único Postgres
Backend · Datos

Persistencia vía un puerto, nunca vía un concreto

TRAIT de repositorio · Pg*Repository (todo el SQL vive aquí) · MockRepository (tests sin DB) · AppState: Arc<dyn Repository> · los casos de uso llaman al TRAIT.

Zoom: 100%
Contrato trait ↔ adaptador
Backend · Datos

SQL verificado en tiempo de compilación, migraciones reversibles

Editar .up.sql + .down.sql (en pares) → just sqlx-prepare → hacer commit de .sqlx/*.json (107 consultas) → build/CI con SQLX_OFFLINE=true y sin DB viva.

Zoom: 100%
caché offline de sqlx
Backend · Específicos 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 deshabilitado (distroless/static). CI: SQLX_OFFLINE=true con la caché .sqlx/ versionada en el repo.

Zoom: 100%
Deploy de backend: cadena de health checks + flujo SQLX
postgres · pg_isready · intervalo 10s / timeout 5s / reintentos 10dragonfly · redis-cli ping · intervalo 10s / timeout 3s / reintentos 10api · depends_on service_healthySQLX_OFFLINE=true · .sqlx/ 107 consultas offline
Backend · Tiempo real

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

TideBroker: SSE con tópicos compuestos, broadcast 256, keep-alive 15s, reconexión con Last-Event-ID. GeoHub: WS con DashMap[Tile → broadcast 64], guiado por viewport, gzip opt-in.

Zoom: 100%
Tiempo real: SSE + WS por tile
Backend · Casos de uso

Seis casos de uso de orquestación y datos

loom

Orquestación

Persiste vía el puerto LoomStore / adaptador LoomPersistence.

ingest

Pipeline de señales

Procesa las señales entrantes hacia el sistema.

scry

Sentimiento

El puerto de referencia SentimentReader / PgSentimentReader.

eval

Arnés de regresión

Evaluación continua de calidad.

warden

Autenticación de usuarios

JWT access/refresh, Google OAuth, IP-binding.

whisper

Webhooks HMAC

Entrega durable, exactamente una vez.

Backend · Casos de uso

everythink-warden — autenticación de usuarios

warden

JWT access/refresh

Hash de contraseñas (bcrypt), JWT access/refresh rotativos, Google OAuth, sesiones con IP-binding para detección de anomalías.

/api/v1/auth/*

register · login · refresh · me · google · sessions

El borde del JWT de usuario para la Consola + Atlas WS. El token se escribe en localStorage('everythink:auth') tras un único inicio de sesión en /auth.

Zoom: 100%
Warden: flujo de autenticación
Backend · Casos de uso

everythink-whisper — webhooks firmados y entrega durable

whisper

Webhooks firmados con HMAC

Worker de entrega con el puerto WhisperStore / adaptador PgWhisperStore. Firma HMAC para verificación del payload en el receptor.

jobs

Cola durable en Postgres

Reintentos exponenciales, semántica exactamente una vez, cola de letras muertas para fallos persistentes.

Zoom: 100%
Whisper: flujo de entrega de webhooks
Backend · Adaptadores

A2A (protocolo) y Courier (email)

everythink-a2a

Protocolo Google A2A

JSON-RPC sobre HTTP con un sobre de tarea de agente, sondeo de estado y recuperación del resultado. Permite que una Sister se mude fuera de proceso sin cambiar a los llamadores.

everythink-courier

Email transaccional

Adaptador Brevo o un no-op que solo registra. Render de plantillas + tracking de entrega para notificaciones del sistema.

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

everythink-cli y everythink-sdk

everythink-cli

Herramienta de operaciones

new-key acuña Eye Keys (bootstrap-mint): genera un par Ed25519 local, fingerprint → Postgres, texto plano mostrado una única vez en memoria, HMAC para autenticación.

everythink-sdk

SDK Rust dentro del workspace

backend/crates/everythink-sdk: acoplado a everythink-core, depende solo de core (ZERO I/O), para consumidores del dominio.

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

Seis invariantes que jamás se violan

1

Probabilidades normalizadas

En exactamente un lugar: everythink-oracle::ensemble. sum(prob) ≈ 1.0, escenarios ordenados descendente, entropía en nats.

2

El texto plano del Eye-Key jamás toca disco

Solo el HMAC + fingerprint van a Postgres. El texto plano se muestra una vez, en memoria.

3

Las Sisters jamás escriben en Postgres

Devuelven SisterOutput; el Loom persiste. Una separación clara entre generación y almacenamiento.

4

Migraciones reversibles

Cada .up.sql tiene su .down.sql. just migrate-add NAME crea ambos.

5

Repositorios de AppState Arc<dyn Trait>

Los tests usan mocks. Depende del trait, nunca del adaptador concreto.

6

Persistencia vía un puerto

Nunca un Pg* concreto fuera de su adaptador. Puertos slice-owned para tablas privadas.

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

4 apps, 13 paquetes, una identidad

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

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

Cuatro superficies, un backend, tres actores

Actores: usuario final (invitado → autenticado) · developer (Eye-Key) · admin/operador (staff). Superficies: web/app/admin/mobile. API del backend (REST + SSE bajo /api/v1).

Zoom: 100%
Contexto C4
Frontend · C4 nivel 2

Contenedores — el monorepo completo

4 apps + capa SDK (6 facades) + servicios (4) + sistema de diseño + tooling + types (hoja). Usa el zoom para explorar.

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

web, app, admin, mobile — una por audiencia

Zoom: 100%
Las 4 apps
Frontend · SDK

Seis facades, un core, cero endpoints en el core

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

Zoom: 100%
Capa SDK: facades con alcance de confianza
Frontend · Paquetes

Servicios de aplicación, UI y build

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

Zoom: 100%
Servicios + diseño + tooling
Frontend · SDK

sdk-core sabe CÓMO, nunca QUÉ

Los endpoints viven SOLO en las facades; sdk-core valida cada respuesta con Zod contra @everythink/types; un árbol SdkError con ContractViolation ante drift.

Zoom: 100%
Facades del SDK: endpoints solo en las facades
Frontend · FSD + MVVM

Feature-Sliced Design + MVVM — los imports fluyen hacia abajo

Screen (View) → hook view-model → feature.repository.ts (LA única puerta al SDK). Borde ESLint no-restricted-imports (INV-1). Capas FSD: shared → entities → features → widgets → app.

Zoom: 100%
Borde de repositorio FSD + MVVM
Frontend · Identidad

Un login, un origen, cuatro superficies

apps/web /auth (un origen) → cookie httpOnly 'everythink_at' → token en memoria + semilla en localStorage → EverythinkAuthGuard + resolveMe (GET /api/v1/auth/me) → puerta según rol.

Zoom: 100%
Inicio de sesión compartido
Frontend · Identidad

can(role, action) — matriz explícita, sin herencia

3 capas: (1) allowedRoles en el auth.ts de cada app → (2) middleware → (3) can() en la UI + server actions. Refleja everythink_core::rbac del backend.

Zoom: 100%
RBAC del frontend
Frontend · UI

Una hoja de estilos, tokens semánticos, Tailwind v4

Una única fuente de verdad del diseño: tokens CSS en :root, mapeo semántico vía @theme (Tailwind v4) y NativeWind para mobile con tokens espejados. Las apps consumen componentes semánticos (bg-accent, text-foreground, font-display/mono), jamás hexes crudos. Paleta cosmic-purple: --gold: #d9ab5c, --violet: #9d7df5, --emerald: #10B981.

Zoom: 100%
Arquitectura de UI/tema: tokens → Tailwind → componentes
:root · propiedades CSS personalizadas@theme · Tailwind v4 semántico@everythink/ui · kit de componentesMobile · NativeWind espejado
Frontend · Tipos

Zod en el borde de la red — un único contrato

Los tipos del wire se definen una única vez en @everythink/types con Zod. El SDK valida cada respuesta del backend (z.parse(response)); un payload inválido lanza ApiError, jamás un crash. Los componentes jamás ven JSON crudo: *.repository.ts parsea, @everythink/domain mapea DTO → modelo, y el view-model expone estado tipado a la View.

Zoom: 100%
Borde de validación Zod: API → SDK → repository → domain → view-model
API del backend · JSONsdk-core · valida con Zod*.repository.ts · el único bordeApiError · tipado, jamás un crash
Frontend · Mobile

apps/mobile — Expo, expo-router, NativeWind

React Native con expo-router (enrutamiento basado en archivos) y NativeWind (Tailwind para RN). El sistema de temas espeja los tokens del sistema de diseño web (tailwind.config.js + src/theme/index.ts). Consume sdk-guest, sdk-auth, sdk-atlas, domain y telemetry. Excluida del CI web: --filter=!@everythink/mobile.

Zoom: 100%
Estructura de la app mobile: Expo + NativeWind + theme
expo-router · enrutamiento por archivosNativeWind · Tailwind RNsrc/theme · tokens espejadosCI · excluida del turbo web
Frontend · Reglas

Cuatro reglas aplicadas mecánicamente

Reglas verificables por ESLint + TypeScript, no convenciones: (1) INV-1: solo *.repository.ts importa un SDK (no-restricted-imports); (2) capas FSD: los imports fluyen hacia ABAJO (shared → entities → features → widgets → app), entre features solo vía el barrel público; (3) Inicio de sesión compartido: web + app comparten localStorage('everythink:auth') + resolveMe(); (4) RBAC de 3 capas: allowedRoles en auth.ts → middleware → can(role, action) en la UI + server actions.

Zoom: 100%
Capas FSD + INV-1 + sign-in + RBAC
INV-1 · solo repository.ts importa un SDKFSD · imports hacia abajoSign-in · localStorage + resolveMeRBAC · 3 capas, sin herencia
Deploy · docker-compose.prod.yml

7 servicios, TLS en el ALB, secretos en .env

ALB → nginx :80 → api/web/app/admin + postgres + dragonfly. Un único Postgres para todo (TimescaleDB pg17 + pgvector). Dragonfly para caché, jobs y fan-out de SSE.

TLS en el ALB de AWS deploy directo a preprod CI/CD de 2 niveles
api · migraciones al arrancarweb · Next.js standalonepostgres · pg17 + pgvectorapp/admin · estáticos distroless
Deploy · Stack

docker-compose.prod.yml — el stack completo

ALB (TLS) → nginx :80 → api (:18081, migraciones al arrancar) · web (Next standalone) · app/admin (estáticos distroless) · postgres (timescale/timescaledb-ha:pg17 + pgvector) · dragonfly (compatible con Redis). 7 servicios: postgres · dragonfly · api · web · app · admin · nginx.

Zoom: 100%
Stack de producción · 7 servicios
postgres · timescaledb-ha:pg17 + pgvectordragonfly · compatible con Redisapi · migraciones al arrancarweb · Next.js standaloneapp/admin · estáticos distroless
Deploy · Red

nginx como único punto de entrada

nginx :80 es el único punto de entrada interno. Enruta /api/v1/* → api:18081, / → web:3000, /app/* → estáticos, /admin/* → estáticos. web habla con api vía EVERYTHINK_API_INTERNAL_URL (http://api:18081). api depende de postgres y dragonfly con condition: service_healthy.

Zoom: 100%
diagrama de enrutamiento nginx
nginx · punto de entrada únicoweb → api · INTERNAL_URLhealth checks · service_healthy
Deploy · Secretos

backend/.env — el único lugar para secretos

docker-compose.prod.yml monta backend/.env vía env_file en los servicios api y web. api contiene todos los secretos (JWT_SECRET, EYE_KEY_HMAC_SECRET, GOOGLE_CLIENT_ID, BREVO_API_KEY). web solo recibe variables NEXT_PUBLIC_* — jamás contiene BREVO_API_KEY. app/admin son estáticos distroless sin secretos en el build.

Zoom: 100%
diagrama del borde de secretos
api · todos los secretosweb · solo NEXT_PUBLIC_*regla · web NO contiene Brevo
Deploy · Flujo

Preprod directo vs la puerta CI/CD

Dos caminos de deploy: preprod despliega directo desde el árbol de trabajo (sin pasar por main); prod exige merge a main y la puerta de integridad. La regla es crítica: NO uses el workflow deploy para preprod, porque trae el :latest de main y sobrescribe el deploy directo.

Zoom: 100%
Flujo de deploy Preprod vs Prod
preprod · árbol de trabajo → scriptprod · main → :latest → workflowregla · SIN workflow deploy para preprod
CI/CD · GitHub Actions

affected en los PR, integridad en main

Un pipeline de 2 niveles: el nivel de PR corre solo lo afectado (backend: ci-affected-crates.sh; frontend: turbo --affected), el nivel de main corre la integridad completa (backend + frontend/mobile completos + E2E + seguridad). main se mantiene verde y desplegable.

Zoom: 100%
Pipeline CI/CD de 2 niveles
just ci · fmt · lint · check · testpnpm ci · turbo lint · typecheck · buildintegridad de main · completo + E2E + seguridad
Hoja de ruta · 🔵 No implementado

Nodos self-hosted federados · BYOK · DAO por red

Dirección de hoja de ruta para v2. Nada de lo siguiente es una capacidad existente. Flujo: el operador genera un par Ed25519 local → solo el fingerprint va al controlador (BYOK) → nodo self-hosted → anclaje del ledger → federación solo sobre proyecciones públicas → DAO de la red.

Zoom: 100%
Hoja de ruta v2: self-hosted · BYOK · DAO
Hoja de ruta · Fases

Cinco fases hacia v2

FaseÍtemDepende deEntregable
1BYOKcrate everythink-byok · tabla node_keys · identidad Ed25519 + webhooks · el controlador guarda solo fingerprints
2Anclaje del ledgerFase 1crate everythink-anchor · tabla anchor_commitments · job de notarización · chain = decisión del operador
3Nodos self-hosted federadosFases 1–2imagen Docker del nodo (postgres, dragonfly, api, web, app, admin, nginx) · protocolo de federación
4DAO por redFase 2crate everythink-dao · network_proposals/network_votes/provenance_log append-only
5Wallet + gobernanzacrate everythink-wallet · wallets/network_memberships · personas empleado/emprendedor/autónomo

Cada fase: una migración .up.sql + .down.sql, un refresh de la caché offline .sqlx, TDD (80%+), just ci en verde. La estructura de tipos de organización está implementada (OrgKind de 5 valores, CHECK en DB, onboarding de 7 estructuras legales).

Hoja de ruta · Anclaje

Arquitectura de referencia de la chain candidata

Arquitectura de referencia para notarizar compromisos de hash del ledger de Postgres: Solana v0.8.13 (Yakovenko) — PoH como reloj criptográfico, consenso PoS con bonds/slashing, PoRep para almacenamiento. La elección de chain es una decisión explícita del operador; esto es una referencia, no una implementación.

Zoom: 100%
Motores de la chain candidata
PoH · paso de tiempo verificablePoS · bonds · slashing · supermayoría de ⅔PoRep · streaming · almacenamientoLeader → Verifiers · confirmaciones = votos~710k TPS · finalidad sub-segundoCAP: consistencia sobre disponibilidad
Cierre

Everythink Studio — arquitectura completa

De la visión a la implementación: topología y motor HAI (producción desde 2016), backend en Rust con 17 crates hexagonales, frontend Next.js 16 con FSD/MVVM, Postgres + pgvector, CI/CD de 2 niveles, despliegue. Nota de límite: el motor de forecasting (sisters/oracle/loom) es otro producto del mismo autor, dentro del workspace.

Rust 2026 · 17 crates Postgres + pgvector · sqlx Next.js 16 · pnpm · FSD 3 regímenes de auth · RBAC can() World Monitor · señales geo CI/CD 2 niveles · preprod directo
Versión inicial · descarga progresiva Este documento es la versión inicial de la arquitectura y no contiene la arquitectura completa. La incompletitud es esperada y deliberada: la arquitectura se descargará progresivamente desde la plantilla aap-human-agent — el paquete de patrones de interacción humano-agente (escalación, delegación, agentes proxy, límites de autoridad). Los agentes ejecutan la descarga; la autoridad permanece en el humano.

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

Everythink Studio · Arquitectura
1 / 64 ← →