deac59d55a
Add workflow_dispatch-only deploy-app action, deploy-app.sh script, apps/_template for Cursor, and SOUL/README split between static webhook deploy and app compose profiles. Co-authored-by: Cursor <cursoragent@cursor.com>
72 lines
3.1 KiB
Markdown
72 lines
3.1 KiB
Markdown
# SOUL.md — playground
|
|
|
|
## Agent Quick Start
|
|
|
|
- **What:** Statische Experimentier-Site — `@cursor` in Gitea-Issues erzeugt HTML unter `public/<slug>/`, Auto-Deploy per Push-Webhook auf boka.
|
|
- **Domain:** https://playground.schwenk.online
|
|
- **Gitea:** `ssh://git@gitea.schwenk.online:2222/froxxxy/playground.git`
|
|
- **Server:** boka → `/home/frank/playground.schwenk.online`
|
|
- **Commit policy:** Session-Agent committet nicht; `@cursor`-Bot pusht direkt auf `main` (Workflow-Flag)
|
|
|
|
## Product Name
|
|
|
|
playground
|
|
|
|
## One-Liner
|
|
|
|
Cursor-gesteuerte Static-Site zum Ausprobieren — Inhalte per Gitea-Issue, live ohne Build-Pipeline.
|
|
|
|
## Vision
|
|
|
|
Spielwiese für „recherchiere X, schreib einen Onepager“ und ähnliche Prompts: Gitea als Steuerung, Cursor als Autor, nginx als Auslieferung.
|
|
|
|
## Audience
|
|
|
|
Fränky — und ggf. Gäste mit Link zu einem konkreten Pfad (`/thema-xy/`).
|
|
|
|
## Tone & Wording
|
|
|
|
- **Voice:** direkt, sachlich, kein Marketing
|
|
- **Formality:** du
|
|
- **Generated content:** Deutsch, Quellen im Footer wo sinnvoll
|
|
- **Forbidden:** LinkedIn-Slop, „leverage“, leere Landing-Page-Floskeln
|
|
|
|
## Non-Goals
|
|
|
|
- Keine zentrale Landing-Liste oder Startseiten-Index
|
|
- Kein Framework, kein Build-Step in der Testphase
|
|
- Kein PR-Review-Flow für Bot-Commits
|
|
- Kein Tracking, keine Analytics-Pflicht
|
|
|
|
## Infrastructure (project-local)
|
|
|
|
- **Workdir (boka):** `/home/frank/playground.schwenk.online` — Git-Clone dieses Repos
|
|
- **Webroot:** `public/` → nginx
|
|
- **Deploy static:** Push-Webhook → `hooks/deploy` → `git pull` only
|
|
- **Deploy apps:** `.gitea/workflows/deploy-app.yml` → manual `workflow_dispatch`
|
|
- **Cursor workflow:** `.gitea/workflows/cursor.yml` mit `push_to_default_branch: "true"`
|
|
|
|
## Project-Specific Rules
|
|
|
|
### Static content (`public/`)
|
|
|
|
- Content lebt **verzeichnisbasiert** unter `public/<kebab-slug>/` — typisch `index.html`, keine feste Dateiliste.
|
|
- Cursor entscheidet selbst: neues Verzeichnis vs. `index2.html` / Assets im bestehenden Ordner.
|
|
- Plain HTML/CSS only — kein npm, kein Bundler.
|
|
- **Kein** `public/index.html` und keine Pflege einer Übersichtsseite, außer Fränky fordert es explizit.
|
|
- Push auf `main` → Webhook deployt **nur** `git pull` (kein Build).
|
|
|
|
### Apps (`apps/<slug>/`)
|
|
|
|
- Für Web-Apps, npm, Docker, Datenbank: Code unter `apps/<kebab-slug>/`.
|
|
- `compose.yml` um Service mit `profiles: ["<slug>"]` ergänzen (Vorlage: `apps/_template/README.md`).
|
|
- **Deploy:** `.gitea/workflows/deploy-app.yml` — **nur** `workflow_dispatch` (manuell in Gitea). Optional eigene `.gitea/workflows/deploy-<slug>.yml` aus `apps/_template/workflow-deploy.yml.template`.
|
|
- Push-Webhook und `deploy-app` nicht vermischen: Webhook = statisch; App-Workflow = Build + `docker compose --profile <slug> up -d --build`.
|
|
- Nach Implementierung im Issue kommentieren: Workflow manuell starten.
|
|
|
|
### Allgemein
|
|
|
|
- `@cursor` in Issue-Kommentaren: Aufgabe erledigen, kurz kommentieren, auf `main` pushen.
|
|
- Neue Workflows nur unter `.gitea/workflows/`; App-Deploy-Workflows **nur** mit `workflow_dispatch` (kein `push`-Trigger), außer Fränky sagt es explizit.
|
|
- Keine Drive-by-Änderungen an Infra ohne Bezug zum Issue.
|