|
| 1 | +# CLAUDE.md |
| 2 | + |
| 3 | +Diese Datei bietet Claude Code (claude.ai/code) Orientierung bei der Arbeit mit dem Code in diesem Repository. |
| 4 | + |
| 5 | +## Projektübersicht |
| 6 | + |
| 7 | +ProcessCube.AppTemplate ist ein Template zur Entwicklung eigener Node-RED-Nodes, Plugins und Dashboard-2-Widgets, die in die ProcessCube-Plattform integriert werden. Das Projekt ist in JavaScript geschrieben (TypeScript-Version geplant) und verwendet Vue.js für Dashboard-Widgets. |
| 8 | + |
| 9 | +## Architektur |
| 10 | + |
| 11 | +Vier Docker-Services bilden die Plattform: |
| 12 | + |
| 13 | +- **engine** (Port 8000) — ProcessCube BPMN-Workflow-Engine mit PostgreSQL-Backend |
| 14 | +- **authority** (Port 11560) — OAuth2/OIDC-Identity-Provider |
| 15 | +- **postgres** (Port 5432, dynamisches externes Mapping) — PostgreSQL 17, gemeinsam genutzt von Engine und Authority |
| 16 | +- **lowcode** (Port 1880, Debug-Port 9229) — Node-RED mit Custom-Nodes/-Widgets, gebaut aus `apps/lowcode/Dockerfile` |
| 17 | + |
| 18 | +Der Lowcode-Service hängt von Engine ab (Healthcheck), die wiederum von Postgres abhängt (Healthcheck). Authority läuft unabhängig. |
| 19 | + |
| 20 | +## Wichtige Verzeichnisse |
| 21 | + |
| 22 | +- `apps/lowcode/src/` — Alle Custom-Node-RED-Nodes, Plugins und Vue.js-Widgets |
| 23 | +- `apps/lowcode/src/nodes/` — Node-RED-Node-Implementierungen (JS- + HTML-Paare) |
| 24 | +- `apps/lowcode/src/ui/` — Vue.js-Komponenten und Vite-Export-Einträge für Dashboard-2-Widgets |
| 25 | +- `.processcube/engine/config/` — Engine-Konfiguration (config.json) |
| 26 | +- `.processcube/authority/config/` — Authority-Konfiguration und User-Seeding-Daten |
| 27 | +- `processes/` — BPMN-Prozessdefinitionen (werden beim Start in die Engine geladen) |
| 28 | + |
| 29 | +## Befehle |
| 30 | + |
| 31 | +### Alle Services starten |
| 32 | +``` |
| 33 | +docker compose up |
| 34 | +``` |
| 35 | + |
| 36 | +### Lowcode-Docker-Image bauen |
| 37 | +``` |
| 38 | +docker compose build |
| 39 | +``` |
| 40 | + |
| 41 | +### Vue.js Dashboard-2-Widgets bauen (innerhalb von `apps/lowcode/src/`) |
| 42 | +``` |
| 43 | +npm install |
| 44 | +npm run build # baut alle Widgets |
| 45 | +npm run build:hello # baut nur das ui-hello-Widget |
| 46 | +npm run build:thermo # baut nur das ui-thermo-Widget |
| 47 | +``` |
| 48 | + |
| 49 | +### Debugging (VSCode) |
| 50 | +1. `docker compose up` |
| 51 | +2. VSCode: Ausführen und Debuggen → "Attach to Node-RED" (Port 9229) |
| 52 | +3. Breakpoints in `apps/lowcode/src/` setzen |
| 53 | + |
| 54 | +Für Break-on-Start-Debugging die `--inspect-brk`-Zeile in `docker-compose.yml` (Zeile ~78) einkommentieren. |
| 55 | + |
| 56 | +## Konventionen |
| 57 | + |
| 58 | +- **Dashboard-2-Widget-Pakete müssen** `node-red-dashboard-2-*` heißen und im `nodesDir` der Node-RED-Installation liegen, damit sie korrekt geladen werden. |
| 59 | +- **Widget-Architektur**: Backend-Node.js-Modul registriert sich bei der Dashboard-2-Gruppe; Frontend-Vue.js-SFC-Komponente kommuniziert über Socket.io-Events (`widget-action`, `widget-change`). |
| 60 | +- **Jedes Widget benötigt**: einen Vite-Build-Eintrag in `ui/exports/`, eine Vue-Komponente in `ui/components/`, ein Node.js-Backend in `nodes/` und eine Registrierung in `package.json` unter `node-red.nodes` und `node-red-dashboard-2.widgets`. |
| 61 | +- **External-Task-Pattern**: Custom-Nodes integrieren sich über External Tasks mit der ProcessCube Engine (siehe `nodes/sample_node/hello.js` und `processes/Sample_With_Custome_Node.bpmn`). |
| 62 | +- **Flow-Speicherformat ist YAML** (`NODERED_FLOW_STORAGE_OUTPUT_FORMAT=yaml`). |
| 63 | + |
| 64 | +## CI/CD |
| 65 | + |
| 66 | +GitHub-Actions-Workflow (`.github/workflows/build.yml`) wird bei Push auf `main` ausgelöst: |
| 67 | +1. Extrahiert die Version aus der Root-`package.json` mittels `@5minds/product_ci_tools` |
| 68 | +2. Baut ein Docker-Image (linux/amd64) und pusht es nach `ghcr.io/5minds/lowcode_apptemplate` |
| 69 | + |
| 70 | +## Version |
| 71 | + |
| 72 | +Die Root-`package.json` enthält die Projektversion (aktuell 0.9.4). Auf Root-Ebene sind keine npm-Scripts definiert — Build-Scripts befinden sich in `apps/lowcode/src/package.json`. |
| 73 | + |
| 74 | +## Claude Regeln |
| 75 | + |
| 76 | +### Arbeitsablauf |
| 77 | + |
| 78 | +1. **Analyse & Planung** |
| 79 | + - Durchdenke das Problem gründlich |
| 80 | + - Lies die relevanten Dateien der Codebasis |
| 81 | + - Erstelle einen Plan in `todos/<thema>/todo.md` |
| 82 | + - todos sollen auch immer commited werden |
| 83 | + |
| 84 | +2. **Aufgabenliste** |
| 85 | + - Der Plan enthält eine Liste von Todo-Punkten |
| 86 | + - Hake sie beim Abarbeiten ab |
| 87 | + |
| 88 | +3. **Abstimmung** |
| 89 | + - Bevor du beginnst, stimme dich mit mir ab |
| 90 | + - Ich prüfe den Plan |
| 91 | + |
| 92 | +4. **Umsetzung** |
| 93 | + - Arbeite die Todo-Punkte ab |
| 94 | + - Markiere erledigte Aufgaben |
| 95 | + |
| 96 | +5. **Kommunikation** |
| 97 | + - Gib bei jedem Schritt eine kurze Zusammenfassung der Änderungen |
| 98 | + |
| 99 | +6. **Einfachheit** |
| 100 | + - Halte jede Aufgabe und Codeänderung so einfach wie möglich |
| 101 | + - Vermeide umfangreiche oder komplexe Änderungen |
| 102 | + - Jede Änderung soll so wenig Code wie möglich betreffen |
| 103 | + - Einfachheit ist das oberste Prinzip |
| 104 | + |
| 105 | +7. **Review** |
| 106 | + - Füge am Ende einen Review-Abschnitt in `todos/<thema>/todo.md` hinzu |
| 107 | + - Fasse die Änderungen und relevante Informationen zusammen |
| 108 | + |
| 109 | +### Grundsätze |
| 110 | + |
| 111 | +- **Keine Faulheit.** Du bist ein Senior Developer. Finde bei Bugs die Ursache und behebe sie richtig. Keine temporären Fixes. |
| 112 | + |
| 113 | +- **Maximale Einfachheit.** Alle Änderungen betreffen nur den notwendigen Code. Das Ziel ist, keine neuen Bugs einzuführen. Einfachheit über alles. |
| 114 | + |
| 115 | +- **Dateiberechtigungen.** Neue Dateien müssen für Gruppe und andere lesbar sein. Nach dem Erstellen von Dateien: `chmod go+r <datei>`. Bei Verzeichnissen zusätzlich: `chmod go+x <verzeichnis>`. |
| 116 | + |
| 117 | +- **Kein automatisches Commit/Push.** Niemals selbstständig committen oder pushen. Nur auf explizite Anweisung des Benutzers. |
0 commit comments