Postgres 16 + pgvector
Semantic search over knowledge runs on an HNSW vector index, inside the same database as everything else.
TTSAI ships as one monorepo that builds into five runtime services, and the exact same images bring the whole product up on a managed cloud or on any Docker host. This page is for the person who has to say yes to running it.
postgresapiworkermcpweb Only web is public. Everything else is reachable solely over the private network.
nginx serves the app and proxies the API, the WebSocket bridge and the MCP surface on the same origin. Auth cookies stay first-party, and the authenticated app needs no cross-origin grants - the only CORS the API serves is a deliberate, non-credentialed wildcard on the cookie-free public surfaces (widget, forms, portal, public API). TLS terminates at the platform edge, and the site sends HSTS and strict security headers. The embeddable chat widget is the one framing exception, served with a framing-permissive policy so it can live in an iframe on your site.
One database carries the records, the vectors, the events and the job queue. Fewer moving parts, one thing to back up.
Semantic search over knowledge runs on an HNSW vector index, inside the same database as everything else.
The app runs as a restricted, non-owner database role, and refuses to boot under any role that could bypass RLS. The database itself is the isolation boundary.
Isolation in depthWrites notify a channel and the API bridges events to WebSockets. The green connection dot in the product header is this bridge.
Inside the same Postgres: scheduled reports, notification digests, nightly pg_dump backups.
Migrations run once as the owner role, then the runtime connects restricted. Schema power and runtime power never share a connection.
Five services from one repo, private networking, only web exposed, health-checked restarts.
One compose file brings up the identical images with single-origin parity. Optional profiles add MinIO for attachment storage and Ollama for a fully local LLM. Point the AI at local Ollama and no byte of a customer conversation leaves your infrastructure.
No AI key? AI features switch off cleanly and the product says so. No email provider? Outbound mail queues. No object storage? Uploads are disabled with a clear state. No monitoring DSN? A no-op. The core never takes a dependency hostage.
Scoped Bearer tokens: Read, Write, MCP, Webhook. Secret shown once, individually revocable, last-used tracking.
Per brand, with test-fire and a delivery log: status, response code, retries.
Notifications via incoming webhooks. No code.
Mint a token with the MCP scope and an AI agent can search, create and update work items, governed by the same permissions as any client.
Bring existing data in: upload, map columns, run with per-row results.