Platform Backend
Platform Deployment
Both services run on Kubernetes and are deployed by the GitLab pipeline (.gitlab-ci.yml) with the
Helm charts in deploy/ (Helm Charts). There is one cluster per
production region — EU and US — and a development cluster for the issue and develop environments. What
a running deployment reports about itself is described in Observability.
Container Images
| Image | How it is built |
|---|---|
|
|
|
|
Images are pushed to the project’s GitLab registry as $CI_REGISTRY_IMAGE/{name}. Merge-request
builds are tagged with the short commit SHA; release builds with the Git tag and latest.
Pipeline
Pipelines run only for Git tags and for merge requests whose source branch is release/* or
PRP-*. A push to main or to any other branch starts no pipeline.
| Trigger | What runs |
|---|---|
Merge request from |
KtLint on the changed Kotlin files ( |
Merge request from |
The same checks and builds, then deployments to the develop environment and to the preview environments of both regions. Each region’s frontend is built after its backend is deployed. |
Tag |
Release images, the Helm charts packaged with the tag as their version and published to the shared Helm repository, the production deployments, the GitLab release with notes generated from the changelog API, and the trigger of the public documentation site (Documentation Sites). |
The stages are validate, build backend, deploy backend, build frontend, deploy frontend,
release and document. The pipeline does not run the backend test suite and does not lint or
type-check the Studio beyond what next build does; run those checks locally
(Tests, Code Conventions).
Environments
| Environment | Trigger | Host | Notes |
|---|---|---|---|
Issue |
MR from |
|
Namespace |
Develop |
MR from |
|
Shared development environment in the |
Preview |
MR from |
|
The release candidate, in the |
Production |
Tag |
|
The |
Configuration and Secrets
| Where | What |
|---|---|
Backend ConfigMap → |
|
Azure Key Vault → |
Everything secret or environment-specific beyond that: database and Elasticsearch connections,
provider keys, Stripe, Mailgun, storage. The Key Vault object |
|
The bridge token and the engine test identity, from the |
Frontend |
Written by the |
The precedence of these sources is described in Configuration.
Release Flow
-
Work is done on
PRP-{id}-…branches. Their merge requests get an issue environment and are merged into the current release branch. -
The release branch
release/{n}has a merge request towardsmain. Every push to it redeploys develop and both preview environments, which is where a release is tested. -
A release is squash-merged into
mainas a single commit namedRelease/{n}. Pushingmainstarts no pipeline. -
A Git tag on that commit —
{year}.{week}.{patch}, for example2026.39.0— starts the production pipeline. Hotfixes are merged intomaindirectly and released with a new patch tag. -
After the release the release branch is recreated from
mainfor the next round of work.
A tag pipeline can end as failed only because its last job — the trigger of the public documentation
site — failed. Check the deployment jobs, not the pipeline status, to see what reached production. The
/api/version endpoint of a host reports the engine’s version, not the platform’s.