SoluteLabs / Solution Architecture

One assistant over everything bot.auto knows.

A single-tenant conversational AI platform over Confluence and Slack, extensible to the rest of your stack, with every answer cited, current, and complete.

DocumentBA-ARCH-001
Date2026-07-27
Prepared bySoluteLabs
Prepared forbot.auto
DeploymentSingle tenant, client VPC
ClassificationConfidential
Section 01 / The engagement

A platform that treats trust as the feature.

Your team asked for three things most AI assistants cannot prove: all the information, the context behind it, and its freshness. This document presents the architecture that delivers each one as an engineered, verifiable property, not a promise.

The platform gives every employee one conversational surface over the organization's knowledge. Answers assemble strictly from retrieved company content with per-claim citations; when confidence is low the system says "I don't know" and shows what it searched. Conversations are shared threads, corrections become team knowledge, and everything runs inside your own cloud account.

Six principles govern every decision in the sections that follow:

Single tenant, client-ownedEvery component, including embeddings and, where required, model inference, runs inside your VPC. Updates ship as versioned releases. There is no shared control plane.
Modular monolith firstOne deployable core with strict module boundaries. Only workloads with genuinely different scaling profiles, such as the sync workers, deploy separately.
Plan, then executeThe LLM writes an explicit plan; deterministic code executes it. The model orchestrates retrieval and computation but never fabricates data. Plans are stored and user-visible.
Permissions in the data layerSource permissions sync with content and apply as a hard filter inside the retrieval query. Content a user cannot see never reaches model context.
Freshness is a data attributeEvery item carries its source-modified and last-synced timestamps; citations surface both; sync lag is measured per connector and displayed, never hidden.
Untrusted content stays dataRetrieved documents are delimited as data, never interpreted as instructions. Nothing inside synced content can trigger tool or plan execution.
Section 02 / System context

Everything runs inside your cloud.

Employees and administrators reach the platform through the web application, authenticated against your identity provider. The platform syncs from your source systems, calls a model endpoint you choose, and streams its audit log to your SIEM.

Figure 1 / System context

Employees
web / desktop chat
Admins & auditors
console, audit views
Client IdP
OIDC / SAML, groups
HTTPS + SSO
Client VPC
bot.auto platform
conversation · retrieval · agent runtime · sync pipeline · admin
OAuth sync + events  |  inference  |  audit export
Confluence Cloud
pages, spaces, permissions
Slack
Socket Mode events
LLM endpoint
Claude via Bedrock / Vertex / API + ZDR
Client SIEM
audit stream
Section 03 / Component architecture

One core application, two planes.

The core application serves conversations and answers; the sync plane keeps the index complete and fresh. PostgreSQL with pgvector is the single system of record for documents, vectors, keyword search, permissions, threads, and audit.

Figure 2 / Components, client VPC

Next.js web app
chat · shared threads · citations with freshness · admin console
SSE / WebSocket streaming
Client VPC · Kubernetes
Core application · modular monolith
API / BFF gateway
OIDC authn · sessions · rate limits · streaming
Conversation
threads, sharing, wiki pinning
Agent orchestrator
classify, plan, execute, cite
Retrieval
hybrid keyword + vector, permission filter
Semantic catalog
entities, glossary, wiki, skills
Admin & audit
coverage, RBAC, logs
LLM gateway
provider config · per-workload keys and budgets · retries · tracing
Sync plane · independent workers
Confluence connector
backfill + webhooks + delta polling
Slack connector
Socket Mode WebSocket, real time
queue · retries · dead-letter
Normalizer + ACL mapper
canonical model, tombstones
Distiller
thread to structured artifact
Chunker + embedder
chunks, vectors, upserts
Data layer · managed services
PostgreSQL + pgvector
docs · vectors · keyword index · permissions · threads · audit
Object store
raw payloads, replay
Queue
SQS / Redis Streams
Secrets manager
OAuth tokens, KMS
ComponentResponsibilityTechnology
Web appChat, thread sharing, citations with freshness badges, admin consoleNext.js + TypeScript
API / BFFOIDC authentication, sessions, rate limiting, streamingNestJS or Go, single gateway
Agent orchestratorQuestion classification, plan generation, deterministic execution, citation assembly, "I don't know" gatingCore module; plans stored for reproducibility
RetrievalHybrid search with a mandatory permission filter; fusion and reranking per Section 05Core module over Postgres
Semantic catalogEntity and alias graph, glossary, team wiki, skills; auto-bootstrapped from source metadataCore module, Postgres tables
LLM gatewaySingle chokepoint for model and embedding calls; provider swap by configuration; virtual keys and budgets per workload; retries, fallbacks, spend trackingSelf-hosted gateway proxy, cluster-internal admin
ConnectorsOAuth, backfill, incremental sync, rate-limit backoff, deletion tombstonesOne worker per source, shared framework
DistillerLLM structuring of threads at sync time (Section 04)Worker, isolated model budget
PostgreSQL + pgvectorSystem of record: documents, chunks, vectors, keyword index, permissions, threads, catalog, auditRDS / Cloud SQL, Multi-AZ
Object storeRaw payloads for replay and re-indexing, attachmentsS3 / GCS, versioned, encrypted
Section 04 / Data access & freshness

Data access that proves its coverage.

Each source gets one adapter with two faces sharing auth and client code: a sync face feeding the index continuously, and a runtime face of live tools the assistant calls for point lookups and freshness verification.

This hybrid is deliberate: querying vendor search APIs at question time cannot prove coverage or measure freshness, and an index alone can lag reality. The index provides recall across millions of items; the live tools confirm currency before an answer ships. All transport is HTTPS with cursor pagination, exponential backoff, idempotent upserts, and tombstones for deletions.

Figure 3 / Adapter anatomy, one per source

Source system
vendor REST APIs, OAuth 2.0 · tokens scoped and rotated
Adapter
Sync face · feeds the index
Backfill crawler
full corpus into item ledger
Change listener
WebSocket / webhook / push
Delta poller
watermark reconciliation
Permission syncer
access rules with every item
Runtime face · live tools
Fetch item / thread
live read, freshness verification
Source search
vendor-native point lookups
Access check
render-time re-check, caller's token

Slack sync runs on Socket Mode: the connector holds an outbound persistent WebSocket, so events arrive in real time with no public inbound endpoint and no polling against rate limits. Events are acknowledged instantly, deduplicated, and the whole thread is re-fetched and stored as one unit so conversations are never internally stale.

SourceChange detectionReconciliationFreshness target
SlackSocket Mode: outbound WebSocket push (messages, edits, deletes, membership)Cursor sweep per channel watermark< 1 min
ConfluenceWebhooks (page created / updated / removed)Delta polling on last-modified< 15 min
Permissions, all sourcesSynced with content eventsPeriodic full reconcile< 15 min

Ingestion enrichment. Raw conversational text is a poor embedding target, so ingestion is two-tier: raw text becomes keyword-searchable the moment it lands, while the semantic layer builds asynchronously. A distillation pass structures each thread into a normalized artifact (searchable question, summary, resolution, systems touched); a bursting pass additionally embeds high-signal message runs so answers buried in tangents stay findable.

Section 05 / Retrieval & answering

Retrieval where no single scorer is trusted alone.

Four signals each cover the others' blind spots, their rankings fuse by consensus, and a reranker restores surrounding context before a word is generated.

SignalCatchesFails at
Full-textExact tokens: pasted error strings, flag names, hostnamesParaphrase
Vector similarityParaphrase: question and answer that share no vocabularyExact identifiers; short filler ranks too high
Term rarityRare-token substance over conversational filler 
Age decayNewer answer wins ties; stale advice loses 

Each signal ranks the permission-filtered candidate set independently; the lists fuse by reciprocal rank fusion so cross-signal consensus beats any single strong vote. A compact reranker scores the fused top set against the actual question, and winners are re-expanded with neighboring context so chunking never severs preconditions from answers. Embedding remains a per-corpus dial: where evaluations show vectors add no recall for a source, that source stops being embedded.

Plan, then execute (Phase 2). For analytical, multi-step questions the orchestrator separates planning from execution: the LLM writes an inspectable step-by-step plan, the platform executes it deterministically with scoped credentials, and results return as artifacts with citations. The plan itself is shown to the user and stored with the answer. Until Phase 2, such questions are declined gracefully rather than answered badly.

Section 06 / The three guarantees

Three guarantees, engineered rather than promised.

Each requirement you named maps to load-bearing machinery you can verify in operation, on a dashboard, not in a slide.

All the informationBackfill enumerates the full corpus per source into an item-level ledger. The coverage dashboard reconciles ledger against source counts; skipped items queue with reasons, never silently dropped. Raw payloads in object storage make re-indexing independent of source APIs.
Context of the informationThe canonical model preserves author, container, timestamps, URL, and permissions. Every claim maps to structured citations; the semantic catalog resolves project names and aliases across sources. Each answer stores its prompt, retrieved passages, model version, and plan: fully reproducible.
Freshness of the contextPush-based sync with per-connector targets; every citation shows source-modified and last-synced times; newer answers outrank stale ones; conflicting sources are flagged in the answer; deletions and permission changes propagate inside the same bounded window.
Section 07 / Security

Security your reviewers can walk through.

Six layers, each with named controls; the system is designed to pass a security review, not to survive one.

LayerControls
IdentityOIDC to your IdP; IdP-group to role mapping (Member / Admin / Auditor); SCIM optional; workload identity between services, no static keys
AuthorizationNormalized permission table per document; retrieval joins the caller's resolved principals; render-time re-check with the caller's own token
Data protectionTLS 1.2+ everywhere; KMS-encrypted storage; secrets in your secrets manager; source credentials never enter model context
Model boundaryAll model traffic egresses through one gateway: provider allow-list, zero-data-retention configuration, per-workload keys and budgets; fully in-VPC inference available via Bedrock or Vertex private endpoints; network policy denies model egress to every other component
Prompt injectionRetrieved content delimited as untrusted data; instructions inside documents can never trigger tools or plans; plan execution reaches only approved APIs with per-run scoped credentials
AuditAppend-only audit tables streamed to your SIEM; auditor role read-only; per-answer reproducibility record; gateway logs request metadata only
Section 08 / Decisions & trade-offs

Seven decisions, trade-offs on the table.

Every major choice is recorded with its rationale and the cost we accept, so your team can challenge any of them before a line of code is written.

#DecisionRationaleTrade-off accepted
01Modular monolith core plus separate sync workersSmall team, unclear final boundaries; single-tenant scale needs no service sprawlLater extraction cost; strict module boundaries keep it cheap
02PostgreSQL + pgvector as the only databaseOne system of record; ~10M documents fits comfortably; fewest moving parts in a client-operated deployment; validated by production systems running this pattern at comparable scaleA dedicated search engine slots in behind the retrieval interface if the corpus grows ~10x
03Ingest-and-index for v1; live query-at-source deferredCollaboration-tool search APIs are too weak and rate-limited for grounded answersBounded, displayed sync lag; live SQL arrives in Phase 3 for warehouse-class connectors
04Grounded, cited answers in v1; planning agent in Phase 2Citation-grounded retrieval covers the dominant lookup use case and ships months earlierv1 declines heavy analytical questions gracefully
05Self-hosted model gateway, provider-agnosticBedrock, Vertex, or direct API with zero data retention becomes a configuration entry; keys, budgets, retries, and spend tracking arrive built inProvider-specific features need deliberate passthrough; one more component to operate
06Kubernetes + Helm + Terraform as the delivery unitPortable, auditable way to ship versioned updates into your cloudRequires platform maturity; a managed-ops engagement is offered
07Hybrid access per source classCoverage and freshness guarantees force an index for conversational sources; native query engines beat any index for structured data; live tools give the freshness escape hatchWe own permission-sync correctness for indexed sources, mitigated by regression tests and render-time re-checks
Section 09 / Delivery & next steps

A phased path to production.

A discovery sprint settles the open questions, foundation follows, a working assistant over Confluence and Slack ships next, intelligence layers on top, and expansion runs on your timetable.

PhaseDurationDelivers
0 · Discovery & foundation4-6 wkDiscovery sprint settles cloud and region, inference posture (in-VPC vs zero-data-retention agreement), scale inputs, operations model, and retention requirements; then infrastructure as code, Kubernetes, SSO, skeleton app, model gateway, audit logging
1 · MVP10-12 wkConfluence and Slack connectors with backfill and real-time sync, distillation pipeline, permission-aware hybrid retrieval, cited and freshness-badged chat, shared threads, project scoping, admin console with coverage and freshness dashboards
2 · Intelligence8-10 wkPlan-then-execute runtime, semantic catalog editing, skills, wiki pinning, expert lookup, report artifacts
3 · Expansionon your callJira, Drive, Salesforce, warehouse connectors with live SQL; scheduled automations; platform API