🛠️ Infrastructure

Setup & infrastructure overview

Your Office AI is self-hostable. This section is the operator's checklist of every external service you wire up to run the platform — what each one is for, whether it is required, and where its configuration lives. Work through it in bring-up order and each dependency is satisfied before the next one needs it.

ℹ️
Where configuration lives

Almost all server secrets live in the tenant server's config files plus a gitignored command_center_tenant_server/config/passwords.yaml. The Auth server has its own command_center_server/config/passwords.yaml for the auth database and email. Non-secret host/port settings live in the matching config/development.yaml / staging.yaml / production.yaml. Never commit passwords.yaml.

Bring-up order

Each service depends on the ones before it. Stand them up left to right: datastores first, then real-time and AI, then the optional integration and email layers.

🗄️DatabasesAuth + tenant Postgres
RedisPub/sub + scaling
📦Object storageMinIO / Supabase
📡LiveKitVideo + voice transport
🧠LLM + embeddingsProviders + pgvector
🔌IntegrationsNango + email
Stand up datastores first, then real-time and AI, then integrations and email.

The service checklist

Every external service an operator touches, with the page that documents it in detail. Required services are needed for the core product to run; per-feature services unlock a specific capability; optional ones are recommended but not load-bearing.

ServiceWhat it's forNeedConfigured in
PostgreSQL (Supabase or managed)Two databases — one for the Auth server, one per-tenant for the Tenant server.Requiredconfig + passwords.yaml
RedisPub/sub for real-time streams; mandatory once you run more than one tenant-server replica.Requiredconfig + passwords.yaml
Object storage (Supabase Storage / MinIO)File uploads, knowledge documents, avatars. S3-compatible — MinIO for self-hosted, Supabase Storage for managed.RequiredFlutter app + storage bucket policies
LiveKitReal-time video, audio, screen share, and the voice-assistant transport.RequiredTenant server passwords.yaml or admin UI
LLM + embedding provider keysSix LLM providers plus an embedding model for Knowledge (pgvector) semantic search.RequiredTenant server passwords.yaml
Voice providers (Deepgram / Google Cloud)STT + TTS for the unified voice bridge. Provider-agnostic — you choose which to configure.Per featureOrg Settings → Voice & AI + agent env
OAuth / integrations (Nango)OAuth connection broker for the integration catalog (Google, Slack, Microsoft, …).Per featureNango instance + tenant server passwords.yaml
Transactional email (Resend)Sends sign-up verification, password reset, and organisation invitation emails.RequiredAuth server passwords.yaml
Observability (OpenTelemetry + ClickHouse)Logs, traces, and metrics from the app and both servers, queryable for debugging.Optionalconfig/development.yaml → otel + Docker
Multi-instance scalingRun multiple tenant-server replicas behind a load balancer with shared Redis.OptionalLoad balancer + Redis + env

Detail guides

How the pieces fit

Your Office AI runs a dual-server backend: an Auth server for identity and organisations, and a Tenant server per organisation for chat, knowledge, integrations, and LiveKit tokens. Each connects to its own Postgres database. AI agents and workflows execute on a Python LangGraph engine behind a Dart AI server, and AI answers are grounded in your Knowledge through pgvector semantic search.

ComponentTalks to
Auth serverAuth Postgres, Resend (email)
Tenant serverTenant Postgres, Redis, LiveKit, LLM/embedding providers, Nango, object storage, OTel collector
LangGraph AI engineTenant server (callbacks), LLM providers
Voice bridge workerLiveKit, tenant server, STT/TTS providers
💡
Start lean, add as you go

Only PostgreSQL, Redis, object storage, LiveKit, an LLM provider, an embedding model, and email are needed to run the product. Voice providers, integrations via Nango, and the observability stack are added when you turn those features on.

Configured once, governed forever

Once an admin configures a provider, its spend is governed centrally: every numeric cap in Your Office AI has a hard positive minimum, and a value of 0 disables the feature rather than removing the limit. There is no such thing as an unlimited budget.

6
LLM providers, one organisation
4
sharing levels × view / edit
0 unlimited budgets
0 means disabled, never unlimited

ℹ️
Next

Head to Core services & environment to set up the databases, Redis, object storage, and provider keys that everything else depends on.