SupportAI is a multi-tenant SaaS customer support platform for SMBs. This repository contains a working MVP foundation with production-oriented boundaries.
apps/web— Angular + TypeScript + Tailwind admin console.apps/widget— embeddable web chat widget build target.backend/src/SupportAI.Api— C# (.NET 8) API service.backend/tests/SupportAI.Api.Tests— critical backend tests.infra— Docker and deployment infrastructure.scripts— local bootstrap and seed helpers.
- web: Angular admin dashboard (signup/login, org/doc/conversation views).
- api: .NET API handling auth, tenancy, documents, chat, billing enforcement, audit logs.
- postgres: system of record for tenants, users, docs, conversations, billing, audit logs.
- redis: cache/session/rate-limiting and async work coordination.
- qdrant: vector store for chunk embeddings.
- minio: S3-compatible object storage for raw files and derived artifacts.
- ollama: local LLM serving for generation + embeddings (provider abstraction allows vLLM later).
- Tenant =
Organization. - Every domain row references
OrganizationIdfor tenant isolation. - App-layer access always resolves user memberships then filters by organization.
- Audit records capture actor, action, and scoped entity ids.
Auth: email/password signup + login with JWT.Tenancy: organization creation + membership linking.KnowledgeBase: upload/URL ingest, chunking, embeddings, vector indexing.Chat: RAG pipeline with retrieval from Qdrant and response from Ollama.Billing: Stripe-backed plan state with Starter/Growth/Business enforcement.Escalations: email handoff when bot confidence threshold/rules trigger.Analytics: basic doc and conversation counters for admin dashboard.
- Admin uploads file/URL.
- API stores source in MinIO and metadata in Postgres.
- Worker extracts text, chunks content, asks embedding provider.
- Vectors upserted into Qdrant with
organizationIdpayload filter. - Chat query embeds question, retrieves tenant-scoped chunks, composes prompt, queries Ollama.
- Conversation messages + retrieval metadata persisted and audited.
ILLMProviderfor generation.IEmbeddingProviderfor embeddings.IVectorIndexfor vector operations.IObjectStoragefor S3-compatible storage.
Initial implementation targets Ollama + Qdrant + MinIO with interfaces ready for vLLM/S3 variants.
- Docker + Docker Compose
- .NET 8 SDK
- Node 20+
docker compose up --buildcd backend/src/SupportAI.Api
dotnet ef database update
cd ../../..
./scripts/seed-demo.shImplemented now:
- Monorepo scaffold
- Docker Compose stack
- Initial Postgres schema + migration
- Auth + organization models and endpoints
Next increments:
- Knowledge ingestion + chunking + embeddings
- Chat/RAG endpoints + widget integration
- Stripe subscription sync + enforcement middleware