Skip to content

Components

The React application provides workspace navigation, document management, research conversations, source previews, working documents, profiles, and administration surfaces. At runtime it needs the public backend base URL.

The ASP.NET Core application owns authentication, authorization, workspace and organization rules, document and indexing orchestration, research conversations, citations, exports, provider selection, and the public API.

It is the security boundary between users and tenant-owned database or object-storage data.

PostgreSQL stores application records and vector embeddings. The service is private and should not be exposed publicly. The regular backend process refuses to start with pending Entity Framework migrations; migrations must be applied deliberately before serving traffic.

Agree database backup schedules and retention during installation. Include object storage and protected application keys in the recovery plan, keep an independent backup copy, and test restoration.

Garage provides local S3-compatible storage. It can be replaced with AWS S3 or another compatible service by changing the S3 settings and credentials. Uploaded sources and extraction artifacts live here, so retention and recovery policies must cover this store as well as PostgreSQL.

Caddy provides reverse proxying and automatic TLS for a single-host deployment. It can be replaced by an existing proxy or ingress. The replacement must route both frontend and backend addresses and preserve trusted forwarded-header behavior.

Ollama can provide local chat, embedding, and reranking models when configured. In a split installation, it runs on the inference device and is reachable from the application server over the agreed private network. Model selection and endpoint compatibility are release-specific.

The standalone Python service uses Docling to convert supported files into structured chunks. It can run standard or vision pipelines, OCR scanned content, detect tables, and optionally enrich formulas, code, and pictures.

Each job runs in a disposable subprocess and temporary scratch directory. The production posture uses a read-only root filesystem, dropped Linux capabilities, no-new-privileges, and tmpfs mounts.

Browser
→ Reverse proxy
→ Frontend
→ Backend
├─ PostgreSQL + pgvector
├─ S3-compatible object storage
├─ Extractor
├─ Chat provider
├─ Embedding provider
├─ Reranking provider
└─ SMTP server

Optional components are connected by configured URLs. The backend does not depend on a specific local Compose service name when an external implementation is supplied.