deploying-to-turboopslisted
Install: claude install-skill lenneTech/claude-code
# Deploying an lt Fullstack Project to TurboOps
This skill is the **single source of truth** for taking a lenne.tech fullstack
monorepo (`projects/api` + `projects/app`, created by `lt fullstack init`) from
local development to a live deployment on **TurboOps** (`turbo-ops.de`) through
GitLab CI/CD.
The CI/CD path itself is turnkey — the starters ship a working `.gitlab-ci.yml`,
`docker-compose.yml`, and build-drift wiring. The **one** thing that reliably
breaks a fullstack rollout is whether `turbo deploy` actually **uploads the
`docker-compose.yml`**. If it doesn't, TurboOps has no service list for the
stage, falls back to a synthesised single-service deploy with a wrong image
reference, and the rollout comes up red (`only app rolled out` / `not found in
registry`). The fix is one flag on the CI deploy command — no web UI required.
Read the [Root Cause + Fix](#root-cause--fix-uploading-the-compose-is-what-makes-a-stage-multi-service)
section before you touch a stage — it is the reason this skill exists.
> Use placeholders throughout: `<slug>` = TurboOps project slug (matches the
> repo's `package.json` name / `lt dev` slug), `<stack>` = the deployed swarm
> stack name (`<slug>-<stageSlug>`, e.g. `<slug>-production`), `<db>` = the
> Mongo database name.
## When to Use This Skill
| Situation | Use this skill? |
|-----------|-----------------|
| First-time go-live of an lt fullstack project on TurboOps | **Yes** |
| Adding a `dev` or `production` stage to an existing Turb