Handbook - Architecture

Service Boundaries

Each CloudGrid service owns one security and performance boundary.

On this page

Each CloudGrid service owns one security and performance boundary.

ServiceOwnsMust not do
apps/backend TypeScript BFFPublic GraphQL, GraphQL subscriptions, auth routes, health, static frontend serving, error mapping, bridge request/reply mappingImport SurrealDB clients, consume ingest streams, aggregate telemetry, or derive telemetry view models
apps/frontend React UIRendering GraphQL view models and local presentation stateCall Go services, NATS, OTLP, or SurrealDB
core/otlp-collectorOTLP HTTP/gRPC ingest, ingest auth, normalization, JetStream publishRead or write SurrealDB
core/storage-writeDurable ingest consumption and idempotent telemetry persistenceServe public reads
core/storage-readTrace/log/metric/facet/live query semantics and SurrealDB readsMutate telemetry
core/control-planeCompanies, users, memberships, invitations, invitation email outbox, projects, project status, ingest credentials, dashboards, pins, retention, alerts, AI settingsRead, write, or enrich telemetry
core/ai-eval-runnerOptional AI experiment and scoring orchestrationImport SurrealDB clients or provider credentials

Read Model Boundary

The frontend and BFF are intentionally dumb about telemetry:

diagram
Frontendpresentation only BFFvalidate + map storage-readquery semantics SurrealDBproject data
Mermaid diagram rendered with beautiful-mermaid.

Storage-read owns filters, sorting, cursors, counts, facets, log correlation, metric aggregation, metric grouping, metric descriptor lookup, and trace-detail view-model derivation.

Control-Plane Boundary

Control-plane owns low-volume administrative state:

  • organizations and users;
  • company memberships, organization invitations, and invitation email delivery state;
  • projects and project status;
  • project membership records;
  • ingest credential metadata and secret hashes;
  • dashboards and dashboard pins;
  • retention policy records;
  • alert rules, silences, and in-app alert history;
  • AI-eval project settings.

It must not read or enrich telemetry.

Next Step

Follow the write path in Ingest flow or the read path in Read flow.

Last updated .