Troca a stack do backend do modulo (Node/Go/Python/Kotlin). O quickstart ja vem com backend Hono/Node por padrao — use essa skill se quiser substituir por outra stack.
Esta skill substitui o conteudo de backend/ por uma stack diferente. Uso: /switch-backend-stack <go|python|kotlin|node>.
Quando usar: voce clonou o quickstart (que vem com backend Hono/Node por padrao) mas prefere escrever o backend em outra linguagem.
Quando NAO usar:
/remove-backend.go, python, kotlin, node).node e backend/package.json ja existe com Hono → pare, ja esta no default.module.json → extraia id e platform.repo (para nomes de imagem e charts).backend/ existe. Se nao, o modulo pode ter sido rodado /remove-backend — pergunte se o usuario quer restaurar.backend/src/routes/mv backend backend.bak.$(date +%Y%m%d-%H%M%S)
Deixa backup local pro dev recuperar se mudar de ideia.
Gere a estrutura minima em backend/ com:
:8080/health na raiz (para o probe do Deployment)/api (porque o nginx do modulo proxya /api/* pro backend sem stripar o prefixo)/api/example mostrando o padrao de proxy para API externaDockerfile multi-stage usando imagens da img.cora.tools/dockerhub/.dockerignoregoEstrutura alvo:
backend/
├── cmd/server/main.go # Gin, porta 8080, rota /health, /api/example
├── internal/
│ ├── config/config.go # env vars
│ └── handler/example.go # proxy para API externa usando net/http
├── go.mod
├── go.sum
├── Dockerfile # multi-stage golang:1.25 → alpine
└── .dockerignore
Framework: Gin (padrao Cora). Roteamento r.Group("/api"), handler faz http.Get na URL externa lida de os.Getenv("EXAMPLE_API_URL").
pythonbackend/
├── src/
│ ├── main.py # FastAPI, uvicorn na 8080
│ ├── config.py
│ └── routes/example.py
├── pyproject.toml # uv ou poetry
├── Dockerfile
└── .dockerignore
Framework: FastAPI + uvicorn. Estrutura assincrona, rota /api/example usa httpx.AsyncClient.
kotlinbackend/
├── src/main/kotlin/
│ ├── Application.kt # Ktor, porta 8080
│ ├── Config.kt
│ └── routes/Example.kt
├── build.gradle.kts
├── gradle.properties
├── Dockerfile # multi-stage gradle:8 → eclipse-temurin:21-jre
└── .dockerignore
Framework: Ktor. embeddedServer(Netty, port = 8080), rota /api/example usa Ktor HttpClient.
nodeRestauracao do default (caso o dev tenha rodado /remove-backend antes):
backend/
├── src/
│ ├── server.ts # Hono, rotas /health + /api
│ ├── config.ts
│ └── routes/example.ts
├── package.json
├── tsconfig.json
├── Dockerfile
└── .dockerignore
Framework: Hono + @hono/node-server. Referencia: veja o que ja existe no platform-module-quickstart upstream.
.woodpecker/build.yaml ou .woodpecker-templates/build.yaml)Os steps build-backend e build-and-publish-backend ja existem no pipeline do quickstart. Ajuste apenas a imagem base do step build-backend conforme a stack:
| Stack | Imagem do build-backend |
|---|---|
| node | img.cora.tools/dockerhub/node:22-alpine |
| go | img.cora.tools/dockerhub/golang:1.25-alpine |
| python | img.cora.tools/dockerhub/python:3.13-alpine |
| kotlin | img.cora.tools/dockerhub/gradle:8-jdk21-alpine |
O comando de build dentro do step muda conforme a stack (go test ./... && go build, uv run pytest, gradle build, etc).
O step build-and-publish-backend NAO muda — continua buildando a partir de backend/Dockerfile.
O Helm chart referencia img.cora.tools/cora/{repo}-backend:{tag} independente da stack. Nada em charts/ precisa mudar.
Rode:
cd backend
<build command da stack> # go build ./..., pytest, gradle build, npm run build
Se falhar, mostre o erro ao usuario. Se passar, faca docker build -t test backend/ para validar a imagem.