# playground Experimentier-Site auf [playground.schwenk.online](https://playground.schwenk.online): statisches HTML, Inhalte per `@cursor` in Gitea-Issues, Auto-Deploy per Push-Webhook. ## Wie es funktioniert 1. Issue in Gitea öffnen, z. B. *„Onepager: Thema XY“* 2. Kommentar: `@cursor recherchiere zu Thema XY und generiere einen Onepager als plain HTML` 3. Gitea Action ([cursor-gitea-agent](https://gitea.schwenk.online/froxxxy/cursor-gitea-agent)) committet nach `public//` auf `main` 4. Push-Webhook triggert `git pull` im Container-Stack → nginx liefert die Seite aus Content-Konventionen: siehe [SOUL.md](SOUL.md). ## Repo-Layout ``` public/ # Webroot nginx/ # nginx-Konfiguration hooks/ # Webhook-Skripte + hooks.json.template deploy-hook/ # Dockerfile für Webhook-Container (git pull) compose.yml # nginx + deploy-hook auf Traefik-Netz ``` Auf boka ist `/home/frank/playground.schwenk.online` ein **Git-Clone** dieses Repos. ## Gitea (einmalig) 1. **`cursor`-Bot** als Collaborator zum Repo hinzufügen 2. **Repo-Secrets** (Namen ohne `GITEA_`-Prefix): - `CURSOR_API_KEY` — Cursor API key - `CURSOR_BOT_TOKEN` — Gitea API token des `cursor`-Users 3. **Push-Webhook** (Repo → Einstellungen → Webhooks): - URL: `https://playground.schwenk.online/hooks/deploy` - Content type: `application/json` - Event: **Push** - Secret: gleicher Wert wie `WEBHOOK_SECRET` in `.env` auf boka ## boka Bootstrap (einmalig) **Automatisch** (von Arch-Dev-Rechner): ```bash ./scripts/bootstrap-boka.sh ``` Erzeugt `.env` mit zufälligem `WEBHOOK_SECRET` (Wert in der Ausgabe — für Gitea-Webhook eintragen). **Manuell:** ssh frank-schwenk.de # App-Verzeichnis (Compose + Config) git clone ssh://git@gitea.schwenk.online:2222/froxxxy/playground.git \ /home/frank/playground.schwenk.online cd /home/frank/playground.schwenk.online cp .env.example .env # WEBHOOK_SECRET, DEPLOY_GIT_TOKEN, HOST_UID/HOST_GID eintragen docker compose up -d --build ``` (Manueller Pfad endet oben bei `docker compose up -d --build`.) **Deploy-Token:** In Gitea einen read-only Token anlegen (oder dedizierten Deploy-User), nur für `git pull` im Container. DNS: `playground.schwenk.online` → boka (A-Record). ## Lokaler Smoke-Test (optional) Ohne Traefik — nur prüfen ob nginx die leere `public/` ausliefert: ```bash docker run --rm -p 8080:80 \ -v "$(pwd)/public:/usr/share/nginx/html:ro" \ -v "$(pwd)/nginx/default.conf:/etc/nginx/conf.d/default.conf:ro" \ -v "$(pwd)/nginx/security-headers.conf:/etc/nginx/conf.d/security-headers.conf:ro" \ nginx # curl -s -o /dev/null -w "%{http_code}" http://localhost:8080/ → 404 (kein index.html, erwartet) ``` ## Manuelles Deploy (Fallback) ```bash ssh frank-schwenk.de cd /home/frank/playground.schwenk.online git pull docker compose up -d ``` ## Beispiel-URL nach erstem Onepager `https://playground.schwenk.online/thema-xy/` — wenn Cursor `public/thema-xy/index.html` angelegt hat.