Private by default
PostgreSQL Row-Level Security. FORCE ROW LEVEL SECURITY. SET LOCAL app.tenant_id per transaction.
Build your own chatbots backed by your knowledge base. Per-tenant isolation through PostgreSQL Row-Level Security. LLM provider is swappable — from OpenAI to a local model. MVP runs on GPT-5.4 mini.
Security and cost controls aren't a later optimisation — they are core to the MVP.
PostgreSQL Row-Level Security. FORCE ROW LEVEL SECURITY. SET LOCAL app.tenant_id per transaction.
Spring Boot · PostgreSQL · Keycloak · Nginx. Containers on Linux. No SaaS lock-in.
LLM access only through a port. OpenAI today. Anthropic, Azure, Ollama, KIPITZ tomorrow — same code.
Markdown · TXT · PDF. Embeddings in pgvector. Retrieval is always filtered by tenant_id and bot_id.
Daily and monthly limits per tenant. Token and message tracking. Overflow is cleanly blocked.
Spring Boot Actuator, usage events, structured logs without secrets. Prometheus/Grafana ready.
Define deterministic per-bot Q&A overrides – e.g. "ask for CV → link to /cv.pdf" – that always take precedence over the knowledge base.
Community is free for testing. Pro is a single licence. Enterprise is for regulated environments.
Demo / test purpose. 1 tenant, 1 bot, very low limits.
1 tenant, 1 bot, higher limits, domain allowlist.
Multiple bots, own provider, local LLMs, KIPITZ adapter on the roadmap.
No tenant ID in the browser. No provider secret in the browser. Tenant resolution exclusively from the JWT claim tenant_id. Cross-tenant tests are mandatory. The application connects to PostgreSQL with a NoBypassRLS role.
TrustChat is built for organisations that demand control over their data and infrastructure.
Vanilla-JS widget with a public bot id. Domain allowlist enforced server-side. Rate limit per visitor. The browser never sees internal IDs or secrets.
<script src="https://<host>/widget.js"
data-bot-id="public_..."></script>