# App template (`apps//`) Cursor copies this folder when creating a non-trivial app (npm, Docker, database). ## Layout ``` apps// ├── Dockerfile ├── package.json # optional — Node apps ├── package-lock.json └── src/ # or project-specific layout ``` ## `compose.yml` — add a profile Append a service (replace ``): ```yaml : profiles: [""] build: ./apps/ restart: unless-stopped labels: - "traefik.enable=true" - "traefik.http.routers..rule=Host(`playground.schwenk.online`) && PathPrefix(`/`)" - "traefik.http.routers..entrypoints=websecure" - "traefik.http.routers..tls.certresolver=myresolver" - "traefik.http.services..loadbalancer.server.port=3000" networks: - traefik ``` Adjust port and PathPrefix to match the app. For Postgres/SQLite, add volumes and env in the same profile block. ## Deploy workflow **Default:** use the shared manual workflow `.gitea/workflows/deploy-app.yml` (`workflow_dispatch`, input `app=`). **Optional (stricter):** copy `workflow-deploy.yml.template` to `.gitea/workflows/deploy-.yml` — triggers **only** manually for that app. ## After implementation 1. Push to `main` (static webhook updates repo files only — does **not** build the app). 2. Gitea → Actions → **Deploy App (manual)** → Run workflow → `app` = ``. Comment in the issue: *„App unter apps// — bitte Workflow Deploy App manuell starten.“*