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. Shared Swagger at /api/docs and OpenAPI at /api/openapi.json combine the external APIs of all services, including authenticated Personal Workspace operations.
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
Personal API access
Named personal tokens let scripts and AI agents use the regular APIs on a user's behalf. Each token is bounded by selected operations, expiration and the account's current role, and can be revoked independently. Creating, showing and copying a token requires a password. API documentation describes the available operations.
Litestar RESTBearerPATGranular permissions