Backend
Litestar, SQLAlchemy, Dishka, and PostgreSQL form an API-first backend with explicit boundaries between domain logic, HTTP, infrastructure, and storage. Articles, the competency matrix, team administration, and operational tools keep their own contracts, while shared mechanisms stay below the transport boundary.
LitestarSQLAlchemyPostgreSQLDishkaTaskIQ
Frontend
Angular hybrid SSR/CSR and backend-driven i18n provide SEO for public pages, while read-only matrix and article surfaces stay separate from protected workspaces: owner, admins, and moderators manage content, while owner and admins govern the team.
AngularSSRTypeScriptBootstrap
Infrastructure
nginx, Docker, MinIO with S3-compatible media storage, Valkey, and TaskIQ separate edge routing, files, cache, background jobs, and frontend/backend container runtimes, while public traffic switches between blue/green slots only after health checks pass. For public media, PostgreSQL tracks the reference lifecycle, while a background TaskIQ job safely removes unused objects after a configurable retention period and retries failed operations. The edge nginx self-recovers after a sustained local liveness failure and uses a restart policy for Docker daemon or VPS restarts.
nginxDockerMinIOValkeyGitHub Actions
Safe AI access
A bounded Agent REST surface is mounted in the main Litestar application without a separate process or Unix socket. A dedicated WireGuard-bound nginx mTLS listener preserves the private boundary with an exact allowlist; the public listener returns 404 for the internal path and strips forged certificate headers. A local stdio MCP bridge exposes an allowlisted Draft-only authoring surface with no publish, generic CRUD, SQL, shell, or URL fetch. The simplification intentionally shares the backend process, DB role, secrets, and availability: private application-network isolation and trust in nginx remain part of the boundary.
Litestar RESTlocal stdio MCPWireGuardmTLSDraft-only