Architecture
Verbatim Enterprise is a plugin that extends the open-source Verbatim Studio backend. It adds team features, authentication, cloud storage, and LLM integration via the plugin system.
System Overview
┌─────────┐ ┌──────────────────────┐ ┌────────────┐
│ nginx │────▶│ backend │────▶│ PostgreSQL │
│ :80 │ │ :8000 │ │ :5432 │
└─────────┘ │ │ └────────────┘
│ │ ┌────────────────┐ │
│ │ │ Core (OSS) │ │
│ │ │ • Transcribe │ │
│ │ │ • OCR/Search │ │
│ │ │ • Projects │ │
│ │ └────────────────┘ │
│ │ ┌────────────────┐ │
│ │ │ Enterprise │ │ ┌─────────────┐
│ │ │ • Auth/Teams │──┼────▶│ S3 / Azure │
│ │ │ • API Keys │ │ │ (optional) │
│ │ │ • Webhooks │ │ └─────────────┘
│ │ │ • Audit │ │
│ │ │ • LLM │ │ ┌─────────────┐
│ │ │ │──┼────▶│ OpenAI / │
│ │ └────────────────┘ │ │ Anthropic │
│ └──────────────────────┘ └─────────────┘
│
└── Proxies all traffic to backendDocker Services
| Service | Image | Port | Purpose |
|---|---|---|---|
| backend | ghcr.io/jongodb/verbatim-enterprise | 8000 | FastAPI + enterprise plugin + frontend SPA |
| postgres | postgres:16-alpine | 5432 | Database (internal only) |
| nginx | nginx:1.27-alpine | 80 | Reverse proxy, SSL termination |
Plugin System
The enterprise features are loaded via Python's entry point mechanism. The pyproject.toml declares:
[project.entry-points."verbatim.plugins"]
enterprise = "verbatim_enterprise.plugin:EnterprisePlugin"On startup, the backend:
- load_plugins() — Discovers the enterprise plugin via entry point, calls
register()which adds adapters, routes, middleware, and models - run_startup_hooks() — Enterprise hook initializes PostgreSQL engine, replacing the default SQLite engine
- init_db() — Creates all tables (core + enterprise) in PostgreSQL
- apply_to_app() — Mounts enterprise routers and middleware onto the FastAPI application
Middleware Stack
Requests pass through middleware in this order:
- LicenseMiddleware — Validates the license JWT. Rejects all requests if the license is missing or expired (with a 14-day grace period for read-only access).
- JWTAuthMiddleware — Validates user authentication. Extracts the user from the JWT token and attaches it to the request state.
- AuditLogMiddleware — Logs all mutating requests (POST, PUT, DELETE) to the audit log table.
Persistent Volumes
postgres-data— PostgreSQL data directory. Survives container restarts and image updates.app-data— Application uploads, recordings, and media files. Survives container restarts.