docs: update migration guide with gemini versioning and model availability insights (v2.4)

This commit is contained in:
2026-01-04 19:24:43 +00:00
parent 04567d5f6a
commit 8a575c1f29
35 changed files with 985 additions and 620 deletions

View File

@@ -97,287 +97,43 @@ Multi-Line Prompts k.nnen in Docker-Umgebungen zu **sehr hartn.ckigen Syntaxfehl
* **Signaturen pr.fen:** Shared Libraries (`helpers.py`) haben oft .ltere Signaturen. Immer die tats.chliche Definition pr.fen!
* Beispiel: `call_openai_chat` unterst.tzt oft kein `system_message` Argument. Stattdessen Prompt manuell zusammenbauen (`sys_instr + "\n\n" + prompt`).
### 1.6 Pitfall: Veraltete API-Nutzung & Bibliotheksnamen
**ACHTUNG:** Dies ist eine der h.ufigsten Fehlerquellen bei der Migration .ltterer KI-Skripte.
* **Das Problem 1 (Name):** Der Name des Pakets (`google-generativeai`) stimmt nicht mit dem Import (`import google.genai`) .berein, den neuere Versionen erwarten. In unserem Fall bleiben wir vorerst beim Import von `google.generativeai`.
* **Installation (`requirements.txt`):** `google-generativeai`
* **Import (z.B. in `helpers.py`):** `import google.generativeai as genai`
* **Das Problem 2 (API-Nutzung):** "."lterer Code verwendet eine `genai.Client`-Klasse, die **nicht mehr existiert**. Dies f.hrt zu einem Absturz.
* **Fehlerbild im Log:** `AttributeError: module 'google.generativeai' has no attribute 'Client'`
* **L.sung:** Der Code MUSS auf die moderne `GenerativeModel`-API umgestellt werden. Siehe **Appendix A.4** f.r ein Code-Beispiel.
---
## 2. Die Backend-Bridge (`server.cjs`)
Dies ist der Node.js Server im Container. Er muss **robust** gegen Timeouts sein und Pfade dynamisch erkennen (Dev vs. Prod).
**Gold-Standard Template:**
```javascript
const express = require('express');
const { spawn } = require('child_process');
const fs = require('fs');
const path = require('path');
const app = express();
const port = 3005; // ANPASSEN!
app.use(express.json({ limit: '50mb' }));
// 1. Statische Dateien: Robustheit f.r Docker (Flat) vs. Local (Nested)
const distPath = path.join(__dirname, 'dist'); // Docker Standard
const isProduction = fs.existsSync(distPath);
const staticDir = isProduction ? distPath : __dirname;
console.log(`[Init] Serving static files from: ${staticDir}`);
app.use(express.static(staticDir));
// 2. Python Pfad: Robustheit f.r Sideloading
let pythonScriptPath = path.join(__dirname, 'mein_orchestrator.py'); // ANPASSEN!
if (!fs.existsSync(pythonScriptPath)) {
pythonScriptPath = path.join(__dirname, '../mein_orchestrator.py');
}
// 3. API Routing
app.post('/api/run', (req, res) => {
// ... spawn logic ...
});
// 4. SPA Fallback
app.get('*', (req, res) => {
res.sendFile(path.join(staticDir, 'index.html'));
});
// 5. Timeout-H.rtung (CRITICAL!)
const server = app.listen(port, () => {
console.log(`Server listening on ${port}`);
});
server.setTimeout(600000); // 10 Minuten
server.keepAliveTimeout = 610000;
server.headersTimeout = 620000;
```
---
## 3. Docker Optimierung (Multi-Stage)
Wir nutzen **Multi-Stage Builds**, um das Image klein zu halten (kein `src`, keine Dev-Tools im Final Image).
**Gold-Standard Dockerfile:**
```dockerfile
# Stage 1: Frontend Build
FROM node:20-slim AS frontend-builder
WORKDIR /app
COPY mein-app-ordner/package.json ./
RUN npm install
COPY mein-app-ordner/ .
RUN npm run build
# Stage 2: Runtime
FROM python:3.11-slim
WORKDIR /app
# Node.js installieren (f.r Server Bridge, optimierte Methode)
RUN apt-get update && \
apt-get install -y --no-install-recommends curl ca-certificates && \
curl -fsSL https://deb.nodesource.com/setup_20.x | bash - && \
apt-get install -y --no-install-recommends nodejs && \
rm -rf /var/lib/apt/lists/*
# Python Deps (aus der app-spezifischen requirements.txt)
COPY mein-app-ordner/requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# Server & Frontend Artifacts (Flat Structure!)
COPY mein-app-ordner/server.cjs .
COPY mein-app-ordner/package.json .
RUN npm install --omit=dev
COPY --from=frontend-builder /app/dist ./dist
# Python Logic & Shared Libs
COPY mein_orchestrator.py .
COPY helpers.py .
COPY config.py .
COPY market_db_manager.py .
EXPOSE 3005
CMD ["node", "server.cjs"]
```
---
## 4. Docker Compose & Mounts (WICHTIGER PITFALL)
**WARNUNG: Lokale Dateien .berschreiben den Container-Code!**
Wenn Sie `volumes` f.r das Sideloading verwenden (wie unten gezeigt), werden die Dateien aus Ihrem lokalen Verzeichnis direkt in den Container geladen. Das bedeutet: **Wenn Sie nicht `git pull` auf dem Host-System ausf.hren, bevor Sie den Container neu bauen, wird der Container weiterhin den alten, lokalen Code ausf.hren.**
**Workflow:**
1. "."nderungen im Git-Repository pushen (oder von einem Agent pushen lassen).
2. **`git pull` auf dem Host-System ausf.hren.** (Dieser Schritt ist entscheidend!)
3. `docker-compose up -d --build <service-name>` ausf.hren.
Beim Sideloading m.ssen **alle** Abh.ngigkeiten gemountet werden, nicht nur das Hauptskript.
**Wichtig:** Der Pfad zu `server.cjs` .ndert sich durch die "Flat Structure" im Dockerfile!
```yaml
my-new-app:
# ... build context ...
volumes:
# Logic Sideloading (ALLE Skripte!)
- ./mein_orchestrator.py:/app/mein_orchestrator.py
- ./helpers.py:/app/helpers.py # WICHTIG: Shared Libs
- ./config.py:/app/config.py # WICHTIG: Shared Libs
- ./market_db_manager.py:/app/market_db_manager.py
# Server Sideloading (Ziel ist Root /app/server.cjs!)
- ./mein-app-ordner/server.cjs:/app/server.cjs
# Persistence
- ./mein_projekt.db:/app/mein_projekt.db
environment:
- PYTHONUNBUFFERED=1
- DB_PATH=/app/mein_projekt.db
environment:
- PYTHONUNBUFFERED=1
- DB_PATH=/app/mein_projekt.db
```
---
## 5. Nginx Proxy
Achtung beim Routing. Wenn die App unter `/app/` laufen soll, muss der Trailing Slash (`/`) stimmen.
```nginx
location /app/ {
proxy_pass http://my-new-app:3005/; # Slash am Ende wichtig!
# ... headers ...
proxy_read_timeout 1200s; # Timeout passend zum Node Server
}
```
---
## 6. Frontend Anpassungen (React)
1. **API Calls:** Alle direkten Aufrufe an `GoogleGenAI` entfernen. Stattdessen `fetch('/api/run', ...)` nutzen.
2. **Base URL:** In `vite.config.ts` `base: './'` setzen (siehe Punkt 1.3).
3. **Router:** Falls `react-router` genutzt wird, muss der `basename` gesetzt werden (z.B. `/gtm/`). Bei einfachem State-Routing (wie in den aktuellen Apps) reicht der `base` Config Eintrag.
---
## Checkliste vor dem Commit
## Appendix A: GTM Architect Fixes & Gemini Migration
- [ ] `express` in `package.json`?
- [ ] `vite.config.ts` hat `base: './'`?
- [ ] `requirements.txt` enth.lt die korrekten (minimalen) Dependencies?
- [ ] `server.cjs` hat Timeouts (>600s)?
- [ ] `docker-compose.yml` mountet auch `helpers.py` und `config.py`?
- [ ] Leere `.db` Datei auf dem Host erstellt?
- [ ] Dockerfile nutzt Multi-Stage Build?
---
## Appendix A: GTM Architect Fixes & Gemini Migration (Jan 2026)
### A.1 Problemstellung
- **SyntaxError bei gro.en Prompts:** Python-Parser (3.11) hatte massive Probleme mit f-Strings, die 100+ Zeilen lang waren und Sonderzeichen enthielten.
- **Library Deprecation:** `google.generativeai` hat Support eingestellt? Nein, aber die Fehlermeldung im Log deutete auf einen Konflikt zwischen alten `openai`-Wrappern und neuen Gemini-Paketen hin.
- **L.sung:**
1. **Prompts ausgelagert:** System-Prompts liegen jetzt in `gtm_prompts.json` und werden zur Laufzeit geladen. Kein Code-Parsing mehr notwendig.
2. **Native Gemini Lib:** Statt OpenAI-Wrapper nutzen wir jetzt `google.generativeai` direkt via `helpers.call_gemini_flash`.
3. **Config:** `gtm-architect/Dockerfile` kopiert nun explizit `gtm_prompts.json`.
### A.2 Neuer Standard f.r KI-Apps
F.r zuk.nftige Apps gilt:
1. **Prompts in JSON/Text-Files:** Niemals riesige Strings im Python-Code hardcoden.
2. **`helpers.call_gemini_flash` nutzen:** Diese Funktion ist nun der Gold-Standard f.r einfache, stateless Calls. Siehe **Appendix A.4** f.r die korrekte Implementierung.
3. **JSON im Dockerfile:** Vergesst nicht, die externen Prompt-Files mit `COPY` in den Container zu holen!
### A.3 Kritisches Problem & L.sung: `AttributeError` bei Gemini API (Jan 2026)
- **Problem:** Nach der Migration auf die `google-generativeai` Bibliothek schlugen alle API-Aufrufe mit einem `AttributeError: module 'google.generativeai' has no attribute 'Client'` Fehler fehl.
- **Log-Analyse:**
```
ERROR:helpers:Fehler beim Gemini-Flash-Aufruf: module 'google.generativeai' has no attribute 'Client'
```
- **Untersuchung:**
1. Die erste Annahme, es handle sich um einen falschen Modellnamen (`404 NOT_FOUND`), erwies sich als irref.hrend.
2. Die Analyse des `helpers.py`-Skripts zeigte, dass der Code versuchte, eine `genai.Client`-Klasse zu verwenden.
- **Schlussfolgerung & L.sung:**
Der Fehler lag in der Verwendung einer **veralteten API-Initialisierungsmethode**. Die `google-generativeai`-Bibliothek hat die `Client`-Klasse entfernt und erfordert nun einen modernen Ansatz.
**Die Korrektur (implementiert in `helpers.py`):**
1. **Konfigurieren des API-Schl.ssels:** `genai.configure(api_key="IHR_KEY")`
2. **Instanziieren des Modells:** `model = genai.GenerativeModel('gemini-1.5-flash-latest')`
3. **Aufrufen der Generierung:** `response = model.generate_content(...)`
Dieser Fix wurde in `helpers.py` umgesetzt und hat die Funktionalit.t des GTM Architect wiederhergestellt. Alle neuen KI-Anwendungen m.ssen diesem Muster folgen.
### A.4 Gold-Standard: Gemini API Wrapper (Robust & Dynamic)
Um die korrekte Implementierung zu standardisieren, hier der "Gold-Standard" Wrapper, wie er in `helpers.py` verwendet wird. Dieser Code ist die Vorlage f.r alle zuk.nftigen Gemini-Aufrufe.
```python
import google.generativeai as genai
import logging
# Annahme: logger und _get_gemini_api_key() sind definiert
# Annahme: Ein @retry_on_failure Decorator existiert
@retry_on_failure
def call_gemini_flash(prompt, system_instruction=None, temperature=0.3, json_mode=False):
"""
Spezifische Funktion f.r Gemini 1.5 Flash Aufrufe mit System-Instruction Support.
Verwendet die korrekte `GenerativeModel` API.
"""
logger = logging.getLogger(__name__)
# HAS_GEMINI Check hier weggelassen f.r die Lesbarkeit
api_key = _get_gemini_api_key()
try:
# 1. API-Schl.ssel konfigurieren
genai.configure(api_key=api_key)
# 2. Generierungs-Konfiguration definieren
generation_config = {
"temperature": temperature,
"top_p": 0.95,
"top_k": 40,
"max_output_tokens": 8192,
}
if json_mode:
generation_config["response_mime_type"] = "application/json"
# 3. Modell instanziieren (mit System-Instruktion)
model = genai.GenerativeModel(
model_name="gemini-1.5-flash-latest", # Eine stabile, spezifische Version verwenden
generation_config=generation_config,
system_instruction=system_instruction
)
# Der Prompt kann ein String oder eine Liste von Teilen sein
contents = [prompt] if isinstance(prompt, str) else prompt
# 4. Inhalt generieren
response = model.generate_content(contents)
return response.text.strip()
except Exception as e:
logger.error(f"Fehler beim Gemini-Flash-Aufruf: {e}")
if "API_KEY_INVALID" in str(e) or "403" in str(e):
raise ValueError(f"Invalid API Key: {str(e)}")
raise e
```
---
### A.1 - A.4 (Siehe .ltere Versionen f.r Prompt-Fixes & GenerativeModel API)
### A.5 Image Generation 2.0 (Hybrid Approach - Jan 04)
@@ -391,95 +147,52 @@ Um die Einschr.nkungen der "Text-only" Modelle und die regionale Verf.gbarkeit v
Das System entscheidet automatisch, welches Modell genutzt wird:
* **Szenario A: Generisches Bild (Text-to-Image)**
* **Modell:** `imagen-4.0-generate-001` (oder `fast`/`ultra` Varianten).
* **Warum:** Imagen ist spezialisiert auf Text-zu-Bild, aber Imagen 3.0 ist oft 404 (nicht verf.gbar). Imagen 4.0 ist der aktuelle Standard.
* **Code:** `client.models.generate_images(...)`
* **Modell:** `imagen-4.0-generate-001`.
* **Szenario B: Produkt-Integration (Image-to-Image)**
* **Modell:** `gemini-2.5-flash-image`.
* **Warum:** Nur Gemini-Multimodal-Modelle k.nnen Input-Bilder verstehen und verarbeiten ("Inpainting" oder "Contextual Placement").
* **Wichtig:** Dieses Modell unterst.tzt KEINEN JSON-Mode (`response_mime_type="application/json"` f.hrt zu 400 Error).
* **Code:** `client.models.generate_content(contents=[image, prompt])`
**3. Code-Beispiel (aus `helpers.py`)**
### A.6 Gemini SDK-Chaos & Modell-Verf.gbarkeit (Kritische Erkenntnis)
Ein wiederkehrendes Problem bei der Migration ist der Konflikt zwischen SDK-Versionen und regionalen Modell-Beschr.nkungen.
**1. Das SDK-Dilemma**
Es existieren zwei parallele Google SDKs:
1. **`google-generativeai` (Legacy):** Veraltet, oft instabil bei neuen Modellen, wirft Deprecation-Warnungen. Import: `import google.generativeai`.
2. **`google-genai` (Modern):** Erforderlich f.r Imagen 4 und Gemini 2.x Features. Import: `from google import genai`.
**L.SUNG:** Nutze den **Dual-Support-Ansatz** in `helpers.py`. Importiere beide und verwende die neue Lib f.r Bilder und die alte (da stabiler f.r bestehende Text-Prompts) f.r Flash 1.5/2.0.
**2. Der "404 Not Found" Modell-Fehler**
Oft liefert die API einen 404 Fehler f.r ein Modell (z.B. `gemini-1.5-flash`), obwohl es laut Dokumentation existiert.
* **Ursache:** Regionale Beschr.nkungen (EU vs US) oder Account-Berechtigungen.
* **Erkenntnis:** Wenn 1.5 Flash nicht geht, funktioniert oft **`gemini-2.0-flash`** problemlos.
* **Best Practice:** Implementiere eine **Kandidaten-Liste** (Fallback-Loop) f.r Modelle.
**3. SDK Syntax-Fallen**
Das neue SDK (`google-genai`) hat ge.nderte Methodennamen:
* Statt `generate_image` (Singular) wird oft **`generate_images`** (Plural) erwartet.
* Modelle f.r Bildgenerierung (Imagen) reagieren allergisch auf `response_mime_type="application/json"`. Dieses Feld MUSS bei Imagen-Modellen weggelassen werden.
**Gold-Standard f.r Modell-Wahl (Python):**
```python
# Import
from google import genai
from PIL import Image
import io
import base64
# ... client setup ...
def generate_image(prompt, ref_image_b64=None):
if ref_image_b64:
# IMAGE-TO-IMAGE (Gemini 2.5)
image_data = base64.b64decode(ref_image_b64)
raw_image = Image.open(io.BytesIO(image_data))
# Strict Prompting ist essenziell!
full_prompt = (
"Use the provided reference image as the absolute truth. "
f"Place EXACTLY this product into the scene: {prompt}. "
"Do NOT alter the product's design."
)
# KEIN config=... mit JSON Mode!
response = client.models.generate_content(
model='gemini-2.5-flash-image',
contents=[raw_image, full_prompt]
)
# Extrahiere Bild aus response.candidates[0].content.parts[0].inline_data
else:
# TEXT-TO-IMAGE (Imagen 4.0)
# Fallback-Kandidaten, falls ein Modell 404 ist
candidates = ['imagen-4.0-generate-001', 'imagen-4.0-fast-generate-001']
for model in candidates:
try:
response = client.models.generate_images(
model=model,
prompt=prompt,
config={"number_of_images": 1, "output_mime_type": "image/jpeg"}
)
# Extrahiere Bild aus response.generated_images[0].image
break
except Exception:
continue
candidates = ['imagen-4.0-generate-001', 'imagen-3.0-generate-001']
for model in candidates:
try:
# Versuch des API-Calls
break
except ClientError as e:
if "404" in str(e): continue
raise e
```
---
## 7. Troubleshooting & Lessons Learned (Jan 2026)
Diese Fehler traten bei der GTM Architect Migration auf und m.ssen zuk.nftig vermieden werden.
### 7.1 Database Initialization (`OperationalError: no such table`)
* **Problem:** Neue SQLite-Datenbanken (`.db` Files) werden zwar als leere Dateien via `touch` erstellt, enthalten aber keine Tabellen. Der Python-Code st.rzt ab, wenn er versucht, in eine nicht existierende Tabelle zu schreiben.
* **L.sung:** Die Initialisierungs-Logik (z.B. `python gtm_db_manager.py init`) MUSS beim Start des `server.cjs` aufgerufen werden. Verlasse dich nicht darauf, dass der User dies manuell tut.
* **Best Practice:** In `server.cjs`:
### 7.5 Double JSON Encoding (Database Trap)
* **Problem:** Wenn `json.dumps()` sowohl im Backend beim Speichern als auch in der DB-Klasse aufgerufen wird, landet "Stringified JSON" in der DB. Beim Laden im Frontend crasht React, da es einen String statt eines Objekts erh.lt.
* **Fix Backend:** Speichere rohe Dictionaries in der DB-Klasse.
* **Fix Frontend:** Nutze eine robuste Parse-Funktion, die `JSON.parse()` mehrfach versucht:
```javascript
const dbScript = path.join(__dirname, 'gtm_db_manager.py');
require('child_process').spawn('python3', [dbScript, 'init']);
```
### 7.2 Dependency Injection (`ModuleNotFoundError`)
* **Problem:** Wenn eine `requirements.txt` nachtr.glich hinzugef.gt oder ge.ndert wird, reicht ein einfacher Container-Neustart nicht aus. `pip install` l.uft normalerweise nur w.hrend der Build-Phase.
* **L.sung:**
1. **Immer Rebuild:** `docker-compose up -d --build <service>`.
2. **Startup-Check:** F.r maximale Robustheit kann der `CMD` im Dockerfile so angepasst werden, dass er `pip install` vor dem Server-Start ausf.hrt: `CMD ["/bin/bash", "-c", "pip install -r requirements.txt && node server.cjs"]`.
### 7.3 Python Indentation (`IndentationError`)
* **Problem:** Beim Copy-Paste von Code in `config.py` entstehen oft versehentliche Einr.ckungen (Leerzeichen am Zeilenanfang) bei globalen Variablen. Dies f.hrt dazu, dass der gesamte Python-Prozess beim Import abst.rzt.
* **L.sung:** `.py` Dateien immer auf strikte Linksb.ndigkeit bei globalen Definitionen pr.fen. Tools wie `flake8` helfen, sind aber im Container oft nicht verf.gbar. Sorgfalt ist entscheidend.
### 7.4 Server File Location & Volume Mounts (Sideloading Trap)
* **Problem:** Im Dockerfile wird `server.cjs` oft in das Root-Verzeichnis kopiert (`COPY gtm-app/server.cjs .`), aber in `docker-compose.yml` wird nur der Unterordner gemountet (`- ./gtm-app:/app/gtm-app`). Da die Node-App im Root läuft, führt sie weiterhin die alte, im Image "eingebackene" Version von `server.cjs` aus. Änderungen auf dem Host werden ignoriert.
* **Symptom:** Code-Fixes im Node-Server (z.B. Timeouts, E2BIG Fixes) greifen nicht, obwohl die Datei auf dem Host korrekt aussieht.
* **Lösung:** Den Mount in `docker-compose.yml` explizit auf die ausgeführte Datei lenken:
```yaml
volumes:
- ./mein-app-ordner/server.cjs:/app/server.cjs
```
const parseData = (d) => (typeof d === 'string' ? JSON.parse(d) : d);
```

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,46 @@
{
"battlecards": [
{
"persona": "Head of Security / Werkschutzleiter",
"objection": "Wir haben bereits ein umfassendes Sicherheitssystem. Warum sollten wir in einen Roboter investieren?",
"responseScript": "Unser Roboter ergänzt Ihr bestehendes System, indem er monotone Überwachungsaufgaben übernimmt und in schwer zugänglichen oder gefährlichen Bereichen patrouilliert. In Kombination mit Wackler Security bieten wir eine lückenlose Überwachung und schnelle Intervention im Alarmfall. Der Roboter sieht die Gefahr, Wackler beseitigt sie. (Automated Perimeter Protection)."
},
{
"persona": "Anlagenleiter / Betriebsleiter",
"objection": "Ich bin besorgt, dass der Roboter den Betriebsablauf stört oder zusätzliche Wartung erfordert.",
"responseScript": "Der Roboter ist so konzipiert, dass er autonom arbeitet und sich nahtlos in Ihre bestehenden Abläufe integriert. Durch die frühzeitige Erkennung von Schäden und Sicherheitsvorfällen können wir Ausfallzeiten reduzieren und die Anlagenverfügbarkeit erhöhen. Die Wartung wird durch unser Flottenmanagement-System vereinfacht."
},
{
"persona": "Instandhaltungsleiter / Wartungsingenieur",
"objection": "Die Integration eines Roboters in unsere bestehende Infrastruktur ist zu kompliziert und teuer.",
"responseScript": "Unser Roboter bietet vielseitige Payload-Optionen und API-Integrationen für kundenspezifische Anpassungen. Wir unterstützen Sie bei der Integration und bieten Schulungen für Ihr Team an. Durch die Reduzierung von manuellen Inspektionen und die frühzeitige Erkennung von Problemen können Sie langfristig Wartungskosten senken."
},
{
"persona": "Einkaufsleiter / Procurement Manager",
"objection": "Die Kosten für den Roboter sind zu hoch im Vergleich zu anderen Sicherheitslösungen.",
"responseScript": "Betrachten Sie die Gesamtkosten über die Lebensdauer des Roboters. Durch die Automatisierung von Überwachungsaufgaben, die Reduzierung von Sicherheitsrisiken und die Vermeidung von Ausfallzeiten können Sie langfristig Kosten sparen. Zudem bieten wir flexible Finanzierungsmodelle an."
}
],
"visualPrompts": [
{
"title": "All-Terrain-Mobilität in Chemieanlage",
"context": "Demonstration der Fähigkeit des Roboters, unwegsames Gelände in einer Chemieanlage zu bewältigen.",
"prompt": "Erstelle ein Foto eines Quadruped-Roboters, der autonom über eine unebene Fläche mit Rohren, Ventilen und Treppen in einer Chemieanlage fährt. Der Roboter sollte mit Nachtsicht- und Wärmebildkameras ausgestattet sein. Im Hintergrund sind Sicherheitskameras und Warnschilder zu sehen."
},
{
"title": "Autonome Inspektion eines Windparks",
"context": "Veranschaulichung der autonomen Navigation und Inspektion von Windkraftanlagen.",
"prompt": "Erstelle ein Foto eines Quadruped-Roboters, der autonom einen Windpark inspiziert. Der Roboter sollte sich in der Nähe einer Windkraftanlage befinden und mit Sensoren zur Überprüfung der Struktur ausgestattet sein. Im Hintergrund sind weitere Windkraftanlagen und ein bewölkter Himmel zu sehen."
},
{
"title": "Überwachung eines Logistikzentrums bei Nacht",
"context": "Darstellung der Fähigkeit des Roboters, ein Logistikzentrum bei Nacht zu überwachen.",
"prompt": "Erstelle ein Foto eines Quadruped-Roboters, der nachts in einem Logistikzentrum patrouilliert. Der Roboter sollte mit Nachtsichtkameras ausgestattet sein und sich in der Nähe von Regalen mit Waren befinden. Im Hintergrund sind Sicherheitskameras und Bewegungsmelder zu sehen."
},
{
"title": "Zusammenarbeit: Roboter entdeckt, Wackler interveniert",
"context": "Visualisierung der Zusammenarbeit zwischen Roboter und Wackler Security im Alarmfall.",
"prompt": "Erstelle ein Foto, das einen Quadruped-Roboter zeigt, der einen Eindringling in einem Umspannwerk entdeckt hat. Der Roboter sendet ein Alarmsignal an die NSL (Notruf- und Serviceleitstelle) von Wackler Security. Im Vordergrund ist ein Mitarbeiter von Wackler Security zu sehen, der auf dem Weg zur Intervention ist."
}
]
}

View File

@@ -0,0 +1 @@
Erstelle ein Foto eines Quadruped-Roboters, der autonom über eine unebene Fläche mit Rohren, Ventilen und Treppen in einer Chemieanlage fährt. Der Roboter sollte mit Nachtsicht- und Wärmebildkameras ausgestattet sein. Im Hintergrund sind Sicherheitskameras und Warnschilder zu sehen.

View File

@@ -0,0 +1 @@
iVBORw0KGgoAAAANSUhEUgAAA6AAAARgCAIAAAB46KzcAAAdoGNhQlgAAB2ganVtYgAAAB5qdW1kYzJwYQARABCAAACqADibcQNj...

View File

@@ -0,0 +1,10 @@
PHASE 7: VERTICAL LANDING PAGE COPY (Conversion Optimization)
ICPs: [{"name": "Chemie- und Petrochemieanlagen", "rationale": "Der PUMA M20 kann in diesen Anlagen zur Inspektion von schwer zug\u00e4nglichen oder gef\u00e4hrlichen Bereichen (z.B. Rohrleitungen, Tanks, Hoch\u00f6fen) eingesetzt werden, um Leckagen, Korrosion oder andere Sch\u00e4den fr\u00fchzeitig zu erkennen. Die robuste Bauweise und Wetterfestigkeit des Roboters sind ideal f\u00fcr diese Umgebungen."}, {"name": "Energieversorgungsunternehmen (z.B. Windparks, Solarparks, Umspannwerke)", "rationale": "Der Roboter kann zur Inspektion von Anlagen in abgelegenen oder schwer zug\u00e4nglichen Gebieten eingesetzt werden. Seine All-Terrain-Mobilit\u00e4t und lange Betriebsdauer erm\u00f6glichen die \u00dcberwachung von Windkraftanlagen, Solarmodulen oder Umspannwerken auf Besch\u00e4digungen oder Ausf\u00e4lle. Die Nachtsichtf\u00e4higkeit ist besonders n\u00fctzlich f\u00fcr die \u00dcberwachung bei Dunkelheit."}, {"name": "Logistikzentren und Lagerh\u00e4user", "rationale": "Der PUMA M20 kann zur autonomen Inspektion von Lagerbereichen, zur \u00dcberpr\u00fcfung von Lagerbest\u00e4nden oder zur Unterst\u00fctzung bei der Kommissionierung eingesetzt werden. Seine hohe Traglast und Flexibilit\u00e4t erm\u00f6glichen den Transport von kleinen Lasten oder die Integration von Scannern und anderen Sensoren. Die F\u00e4higkeit, sich in engen G\u00e4ngen zu bewegen, ist in Lagerumgebungen von Vorteil."}]
Strategy: [{"segment": "Chemie- und Petrochemieanlagen", "painPoint": "Umfassende Gel\u00e4ndesicherheit und -\u00fcberwachung gro\u00dfer, komplexer Anlagen, insbesondere in explosionsgef\u00e4hrdeten Bereichen und bei widrigen Wetterbedingungen.", "angle": "Der Roboter sieht die Gefahr, Wackler beseitigt sie. (Automated Perimeter Protection). Autonome Patrouillen und Inspektionen in explosionsgef\u00e4hrdeten Bereichen, kombiniert mit der Interventionskraft von Wackler Security. Reduzierung von Sicherheitsrisiken und Reaktionszeiten durch Echtzeit-\u00dcberwachung und sofortige Alarmierung der NSL.", "differentiation": "All-Terrain-Mobilit\u00e4t, Nachtsichtf\u00e4higkeit, Robustheit und Wetterfestigkeit (IP66), kombiniert mit der Expertise von Wackler Security f\u00fcr Intervention und Notfallmanagement. Aufschaltung auf NSL/Leitstelle, Revierwachdienst, Intervention."}, {"segment": "Energieversorgungsunternehmen (z.B. Windparks, Solarparks, Umspannwerke)", "painPoint": "Sicherung weitl\u00e4ufiger, schwer zug\u00e4nglicher Anlagen gegen Diebstahl, Vandalismus und unbefugtes Betreten. Regelm\u00e4\u00dfige Inspektion von Anlagenkomponenten zur fr\u00fchzeitigen Erkennung von Sch\u00e4den und zur Gew\u00e4hrleistung der Betriebssicherheit.", "angle": "Der Roboter sieht die Gefahr, Wackler beseitigt sie. (Automated Perimeter Protection). Autonome \u00dcberwachung von Wind- und Solarparks sowie Umspannwerken, erg\u00e4nzt durch die Reaktionsf\u00e4higkeit von Wackler Security. Fr\u00fchzeitige Erkennung von Sicherheitsvorf\u00e4llen und Sch\u00e4den, um Ausfallzeiten zu minimieren und die Anlagenverf\u00fcgbarkeit zu erh\u00f6hen.", "differentiation": "Autonome Navigation, 360\u00b0-Umgebungserfassung, lange Betriebsdauer und Flottenmanagement, kombiniert mit der Erfahrung von Wackler Security im Bereich Objektschutz und Alarmverfolgung. Aufschaltung auf NSL/Leitstelle, Revierwachdienst, Intervention."}, {"segment": "Logistikzentren und Lagerh\u00e4user", "painPoint": "\u00dcberwachung gro\u00dfer Lagerfl\u00e4chen zur Verhinderung von Diebstahl und zur Gew\u00e4hrleistung der Sicherheit von Mitarbeitern und Waren. Effiziente Inspektion von Regalsystemen und Lagerinfrastruktur zur fr\u00fchzeitigen Erkennung von Sch\u00e4den und zur Vermeidung von Unf\u00e4llen.", "angle": "Der Roboter sieht die Gefahr, Wackler beseitigt sie. (Automated Perimeter Protection). Autonome Patrouillen zur Abschreckung von Diebstahl und Vandalismus, kombiniert mit der Interventionsf\u00e4higkeit von Wackler Security. Erh\u00f6hung der Sicherheit und Effizienz durch automatisierte \u00dcberwachung und schnelle Reaktion auf Vorf\u00e4lle.", "differentiation": "Hohe Traglast, Flexibilit\u00e4t und Erweiterbarkeit, kombiniert mit den Sicherheitsdienstleistungen von Wackler Security. Der Roboter \u00fcbernimmt die monotone \u00dcberwachung, w\u00e4hrend Wackler Security im Alarmfall schnell und zuverl\u00e4ssig interveniert. Aufschaltung auf NSL/Leitstelle, Revierwachdienst, Intervention."}]
TASK: 1. Transform generic features into specific benefits for the Top 2 ICPs. 2. Apply "Wackler Symbiosis". 3. Create Landing Page Drafts (Hero Section).
ACHTUNG: Die gesamte Ausgabe (JSON-Werte, Texte, Analysen) MUSS in DEUTSCH sein. Übersetze englische Input-Daten.
Output JSON format ONLY: {"landingPages": [{"industry": "", "headline": "", "subline": "", "bullets": [], "cta": ""}]}

View File

@@ -0,0 +1,28 @@
{
"landingPages": [
{
"industry": "Chemie- und Petrochemieanlagen",
"headline": "Maximale Anlagensicherheit: PUMA M20 & Wackler Security Ihr unschlagbares Team",
"subline": "Reduzieren Sie Sicherheitsrisiken und Reaktionszeiten durch autonome Überwachung in explosionsgefährdeten Bereichen. Der Roboter sieht die Gefahr, Wackler beseitigt sie.",
"bullets": [
"Autonome Patrouillen und Inspektionen: Frühzeitige Erkennung von Leckagen, Korrosion und unbefugtem Zutritt.",
"Echtzeit-Überwachung und Alarmierung: Sofortige Benachrichtigung der NSL bei sicherheitsrelevanten Vorfällen.",
"Robustheit und Wetterfestigkeit: Zuverlässiger Einsatz auch unter widrigen Bedingungen (IP66).",
"Intervention durch Wackler Security: Schnelle Reaktion im Notfall durch geschulte Sicherheitskräfte."
],
"cta": "Jetzt Sicherheitslösung konfigurieren!"
},
{
"industry": "Energieversorgungsunternehmen (Windparks, Solarparks, Umspannwerke)",
"headline": "Sichern Sie Ihre Energieanlagen effizient: PUMA M20 & Wackler Security im Verbund",
"subline": "Schützen Sie Ihre weitläufigen Anlagen vor Diebstahl, Vandalismus und Ausfällen. Der Roboter sieht die Gefahr, Wackler beseitigt sie.",
"bullets": [
"Autonome Überwachung: Lückenlose Überwachung von Windkraftanlagen, Solarmodulen und Umspannwerken.",
"Frühzeitige Schadenserkennung: Minimierung von Ausfallzeiten durch rechtzeitige Identifizierung von Schäden.",
"360°-Umgebungserfassung: Umfassende Erfassung der Umgebung für maximale Sicherheit.",
"Objektschutz durch Wackler Security: Zuverlässige Alarmverfolgung und Intervention bei Sicherheitsvorfällen."
],
"cta": "Fordern Sie jetzt ein unverbindliches Angebot an!"
}
]
}

View File

@@ -0,0 +1,9 @@
PHASE 8: BUSINESS CASE BUILDER (The CFO Pitch)
Input: ICPs: [{"name": "Chemie- und Petrochemieanlagen", "rationale": "Der PUMA M20 kann in diesen Anlagen zur Inspektion von schwer zug\u00e4nglichen oder gef\u00e4hrlichen Bereichen (z.B. Rohrleitungen, Tanks, Hoch\u00f6fen) eingesetzt werden, um Leckagen, Korrosion oder andere Sch\u00e4den fr\u00fchzeitig zu erkennen. Die robuste Bauweise und Wetterfestigkeit des Roboters sind ideal f\u00fcr diese Umgebungen."}, {"name": "Energieversorgungsunternehmen (z.B. Windparks, Solarparks, Umspannwerke)", "rationale": "Der Roboter kann zur Inspektion von Anlagen in abgelegenen oder schwer zug\u00e4nglichen Gebieten eingesetzt werden. Seine All-Terrain-Mobilit\u00e4t und lange Betriebsdauer erm\u00f6glichen die \u00dcberwachung von Windkraftanlagen, Solarmodulen oder Umspannwerken auf Besch\u00e4digungen oder Ausf\u00e4lle. Die Nachtsichtf\u00e4higkeit ist besonders n\u00fctzlich f\u00fcr die \u00dcberwachung bei Dunkelheit."}, {"name": "Logistikzentren und Lagerh\u00e4user", "rationale": "Der PUMA M20 kann zur autonomen Inspektion von Lagerbereichen, zur \u00dcberpr\u00fcfung von Lagerbest\u00e4nden oder zur Unterst\u00fctzung bei der Kommissionierung eingesetzt werden. Seine hohe Traglast und Flexibilit\u00e4t erm\u00f6glichen den Transport von kleinen Lasten oder die Integration von Scannern und anderen Sensoren. Die F\u00e4higkeit, sich in engen G\u00e4ngen zu bewegen, ist in Lagerumgebungen von Vorteil."}], Features: ["All-Terrain-Mobilit\u00e4t: Bew\u00e4ltigt unebenes Gel\u00e4nde, Treppen und Steigungen bis zu 45\u00b0.", "Autonome Navigation: SLAM-basierte Navigation f\u00fcr autonome Missionen und R\u00fcckkehr zur Basis.", "360\u00b0-Umgebungserfassung: Duale LiDAR-Systeme und Weitwinkelkameras f\u00fcr umfassende Umgebungswahrnehmung.", "Nachtsichtf\u00e4higkeit: Optionale Nacht- und W\u00e4rmebildkameras f\u00fcr den Einsatz bei Dunkelheit.", "Robustheit und Wetterfestigkeit: IP66-Schutz gegen Staub und Wasser f\u00fcr zuverl\u00e4ssigen Betrieb unter rauen Bedingungen (-20\u00b0C bis 55\u00b0C).", "Hohe Rechenleistung: Duale Octa-Core-Prozessoren f\u00fcr anspruchsvolle Anwendungen.", "Flexibilit\u00e4t und Erweiterbarkeit: Vielseitige Payload-Optionen und API-Integrationen f\u00fcr kundenspezifische Anpassungen.", "Hohe Traglast: 12 kg Nennlast und 50 kg maximale Tragf\u00e4higkeit.", "Lange Betriebsdauer: Bis zu 3 Stunden Betriebsdauer, erweiterbar durch Hot-Swap-Batterien.", "Flottenmanagement: M\u00f6glichkeit zur Integration in Flottenmanagement-Systeme f\u00fcr die zentrale Steuerung mehrerer Roboter."]
TASK: 1. Estimate labor costs/pain points. 2. Compare against Robot Leasing (approx 330-600€/month). 3. Develop ROI logic. 4. Create "Financial Argumentation Guide" for each ICP.
ACHTUNG: Die gesamte Ausgabe (JSON-Werte, Texte, Analysen) MUSS in DEUTSCH sein. Übersetze englische Input-Daten.
Output JSON format ONLY: {"businessCases": [{"industry": "", "costDriver": "", "efficiencyGain": "", "riskArgument": ""}]}

View File

@@ -0,0 +1,22 @@
{
"businessCases": [
{
"industry": "Chemie- und Petrochemieanlagen",
"costDriver": "Manuelle Inspektion von Rohrleitungen, Tanks und schwer zugänglichen Bereichen durch qualifiziertes Personal. Hohe Kosten durch Stillstandzeiten bei Inspektionen und Reparaturen. Zusätzliche Kosten für spezielle Ausrüstung und Schulungen für Inspektionen in gefährlichen Umgebungen.",
"efficiencyGain": "Reduzierung der Inspektionskosten durch autonomen Roboterbetrieb. Früherkennung von Schäden minimiert Stillstandzeiten und reduziert Reparaturkosten. Erhöhung der Sicherheit durch Vermeidung von Personeneinsätzen in gefährlichen Bereichen. Der PUMA M20 kann potenziell 60-80% der manuellen Inspektionszeit einsparen. Bei einem durchschnittlichen Stundensatz von 75€ für qualifiziertes Personal und 20 Stunden Inspektionszeit pro Monat ergibt sich eine Einsparung von 900-1200€ pro Monat. Durch die Leasinggebühr von 330-600€ ergibt sich eine monatliche Nettoeinsparung von 300-970€.",
"riskArgument": "Minimierung des Risikos von Unfällen und Gesundheitsschäden bei Inspektionspersonal. Reduzierung des Risikos von Umweltschäden durch frühzeitige Erkennung von Leckagen und Korrosion. Compliance mit Sicherheitsvorschriften und Umweltauflagen."
},
{
"industry": "Energieversorgungsunternehmen (z.B. Windparks, Solarparks, Umspannwerke)",
"costDriver": "Hohe Kosten für die Inspektion von Anlagen in abgelegenen Gebieten. Einsatz von Hubschraubern oder Drohnen für die Inspektion von Windkraftanlagen. Lange Anfahrtszeiten und hohe Personalkosten für die Inspektion von Solarparks und Umspannwerken. Kosten für ungeplante Ausfallzeiten und Reparaturen.",
"efficiencyGain": "Reduzierung der Inspektionskosten durch autonomen Roboterbetrieb. Vermeidung von teuren Helikoptereinsätzen. Schnellere Erkennung von Schäden und Ausfällen. Erhöhung der Anlagenverfügbarkeit und Reduzierung von Ausfallzeiten. Der PUMA M20 kann die Inspektionszeit um 50-70% reduzieren. Bei durchschnittlichen Inspektionskosten von 1500€ pro Windkraftanlage pro Monat (inkl. Helikopter) und einer Reduktion um 60% ergibt sich eine Einsparung von 900€ pro Monat. Nach Abzug der Leasinggebühr von 330-600€ ergibt sich eine monatliche Nettoeinsparung von 300-570€.",
"riskArgument": "Reduzierung des Risikos von Personenschäden bei der Inspektion von Windkraftanlagen. Frühzeitige Erkennung von potenziellen Gefahrenquellen und Vermeidung von Ausfällen. Verbesserung der Sicherheit und Zuverlässigkeit der Energieversorgung."
},
{
"industry": "Logistikzentren und Lagerhäuser",
"costDriver": "Hohe Personalkosten für die manuelle Inspektion von Lagerbereichen. Ineffiziente Lagerverwaltung und hohe Verluste durch Inventurdifferenzen. Kosten für Unfälle und Schäden durch Staplerverkehr. Hohe Energiekosten für Beleuchtung und Klimatisierung.",
"efficiencyGain": "Reduzierung der Personalkosten durch autonome Inspektion und Überwachung. Verbesserung der Lagerverwaltung und Reduzierung von Inventurdifferenzen. Erhöhung der Sicherheit durch Vermeidung von Personeneinsätzen in gefährlichen Bereichen. Optimierung der Energiekosten durch bedarfsgerechte Beleuchtung und Klimatisierung. Der PUMA M20 kann die Personalkosten für die Lagerinspektion um 40-60% reduzieren. Bei monatlichen Personalkosten von 5000€ für die Lagerinspektion und einer Reduktion um 50% ergibt sich eine Einsparung von 2500€ pro Monat. Nach Abzug der Leasinggebühr von 330-600€ ergibt sich eine monatliche Nettoeinsparung von 1900-2170€.",
"riskArgument": "Reduzierung des Risikos von Unfällen und Verletzungen im Lagerbereich. Vermeidung von Diebstahl und Vandalismus. Verbesserung der Compliance mit Sicherheitsvorschriften und Qualitätsstandards."
}
]
}

View File

@@ -0,0 +1,10 @@
PHASE 9: THE "FEATURE-TO-VALUE" TRANSLATOR
Input Features: ["All-Terrain-Mobilit\u00e4t: Bew\u00e4ltigt unebenes Gel\u00e4nde, Treppen und Steigungen bis zu 45\u00b0.", "Autonome Navigation: SLAM-basierte Navigation f\u00fcr autonome Missionen und R\u00fcckkehr zur Basis.", "360\u00b0-Umgebungserfassung: Duale LiDAR-Systeme und Weitwinkelkameras f\u00fcr umfassende Umgebungswahrnehmung.", "Nachtsichtf\u00e4higkeit: Optionale Nacht- und W\u00e4rmebildkameras f\u00fcr den Einsatz bei Dunkelheit.", "Robustheit und Wetterfestigkeit: IP66-Schutz gegen Staub und Wasser f\u00fcr zuverl\u00e4ssigen Betrieb unter rauen Bedingungen (-20\u00b0C bis 55\u00b0C).", "Hohe Rechenleistung: Duale Octa-Core-Prozessoren f\u00fcr anspruchsvolle Anwendungen.", "Flexibilit\u00e4t und Erweiterbarkeit: Vielseitige Payload-Optionen und API-Integrationen f\u00fcr kundenspezifische Anpassungen.", "Hohe Traglast: 12 kg Nennlast und 50 kg maximale Tragf\u00e4higkeit.", "Lange Betriebsdauer: Bis zu 3 Stunden Betriebsdauer, erweiterbar durch Hot-Swap-Batterien.", "Flottenmanagement: M\u00f6glichkeit zur Integration in Flottenmanagement-Systeme f\u00fcr die zentrale Steuerung mehrerer Roboter."]
Strategy Pains: ["Umfassende Gel\u00e4ndesicherheit und -\u00fcberwachung gro\u00dfer, komplexer Anlagen, insbesondere in explosionsgef\u00e4hrdeten Bereichen und bei widrigen Wetterbedingungen.", "Sicherung weitl\u00e4ufiger, schwer zug\u00e4nglicher Anlagen gegen Diebstahl, Vandalismus und unbefugtes Betreten. Regelm\u00e4\u00dfige Inspektion von Anlagenkomponenten zur fr\u00fchzeitigen Erkennung von Sch\u00e4den und zur Gew\u00e4hrleistung der Betriebssicherheit.", "\u00dcberwachung gro\u00dfer Lagerfl\u00e4chen zur Verhinderung von Diebstahl und zur Gew\u00e4hrleistung der Sicherheit von Mitarbeitern und Waren. Effiziente Inspektion von Regalsystemen und Lagerinfrastruktur zur fr\u00fchzeitigen Erkennung von Sch\u00e4den und zur Vermeidung von Unf\u00e4llen."]
TASK: 1. Take a tech feature. 2. Ask "So what?". 3. Ask "So what?" again. 4. Formulate benefit without jargon. Create a table.
ACHTUNG: Die gesamte Ausgabe (JSON-Werte, Texte, Analysen) MUSS in DEUTSCH sein. Übersetze englische Input-Daten.
Output JSON format ONLY: {"techTranslations": [{"feature": "", "story": "", "headline": ""}]}

View File

@@ -0,0 +1,54 @@
{
"techTranslations": [
{
"feature": "All-Terrain-Mobilität: Bewältigt unebenes Gelände, Treppen und Steigungen bis zu 45°.",
"story": "Der Roboter kann sich in jedem Gelände bewegen. So what? Er kann auch schwer zugängliche Bereiche erreichen. So what? Er kann Sicherheitsaufgaben auch dort übernehmen, wo andere Systeme versagen.",
"headline": "Sicherheit ohne Grenzen: Patrouilliert überall, auch im unwegsamen Gelände."
},
{
"feature": "Autonome Navigation: SLAM-basierte Navigation für autonome Missionen und Rückkehr zur Basis.",
"story": "Der Roboter navigiert selbstständig. So what? Er benötigt keine manuelle Steuerung für Routineaufgaben. So what? Das spart Personalressourcen und ermöglicht eine kontinuierliche Überwachung.",
"headline": "Autonome Überwachung: Spart Zeit und Geld durch selbstständige Patrouillen."
},
{
"feature": "360°-Umgebungserfassung: Duale LiDAR-Systeme und Weitwinkelkameras für umfassende Umgebungswahrnehmung.",
"story": "Der Roboter erfasst seine Umgebung vollständig. So what? Er hat keine toten Winkel und erkennt Gefahren frühzeitig. So what? Das erhöht die Sicherheit und minimiert das Risiko von Schäden.",
"headline": "Rundum-Sicherheit: Keine blinden Flecken, erkennt jede Bedrohung."
},
{
"feature": "Nachtsichtfähigkeit: Optionale Nacht- und Wärmebildkameras für den Einsatz bei Dunkelheit.",
"story": "Der Roboter kann auch im Dunkeln sehen. So what? Er ist auch nachts einsetzbar und bietet lückenlose Überwachung. So what? Das erhöht die Sicherheit rund um die Uhr und schreckt potenzielle Eindringlinge ab.",
"headline": "24/7-Sicherheit: Überwacht Ihr Gelände Tag und Nacht."
},
{
"feature": "Robustheit und Wetterfestigkeit: IP66-Schutz gegen Staub und Wasser für zuverlässigen Betrieb unter rauen Bedingungen (-20°C bis 55°C).",
"story": "Der Roboter ist robust und wetterfest. So what? Er funktioniert auch unter extremen Bedingungen zuverlässig. So what? Das garantiert einen unterbrechungsfreien Betrieb und minimiert Ausfallzeiten.",
"headline": "Sicherheit bei jedem Wetter: Zuverlässiger Schutz, egal was kommt."
},
{
"feature": "Hohe Rechenleistung: Duale Octa-Core-Prozessoren für anspruchsvolle Anwendungen.",
"story": "Der Roboter hat eine hohe Rechenleistung. So what? Er kann komplexe Aufgaben schnell und effizient bearbeiten. So what? Das ermöglicht den Einsatz fortschrittlicher Algorithmen für die Sicherheitsüberwachung.",
"headline": "Intelligente Sicherheit: Leistungsstarke Datenverarbeitung für maximale Effizienz."
},
{
"feature": "Flexibilität und Erweiterbarkeit: Vielseitige Payload-Optionen und API-Integrationen für kundenspezifische Anpassungen.",
"story": "Der Roboter ist flexibel und erweiterbar. So what? Er kann an spezifische Bedürfnisse angepasst werden. So what? Das ermöglicht maßgeschneiderte Sicherheitslösungen für verschiedene Anwendungsbereiche.",
"headline": "Maßgeschneiderte Sicherheit: Anpassbar an Ihre individuellen Anforderungen."
},
{
"feature": "Hohe Traglast: 12 kg Nennlast und 50 kg maximale Tragfähigkeit.",
"story": "Der Roboter hat eine hohe Traglast. So what? Er kann zusätzliche Sensoren oder Ausrüstung transportieren. So what? Das erweitert seine Einsatzmöglichkeiten und erhöht seine Effektivität.",
"headline": "Mehr als nur Überwachung: Transportiert Ausrüstung für erweiterte Funktionen."
},
{
"feature": "Lange Betriebsdauer: Bis zu 3 Stunden Betriebsdauer, erweiterbar durch Hot-Swap-Batterien.",
"story": "Der Roboter hat eine lange Betriebsdauer. So what? Er kann lange Patrouillen ohne Unterbrechung durchführen. So what? Das reduziert den Bedarf an häufigen Batteriewechseln und maximiert die Einsatzzeit.",
"headline": "Dauerhafte Sicherheit: Lange Einsatzzeiten für kontinuierliche Überwachung."
},
{
"feature": "Flottenmanagement: Möglichkeit zur Integration in Flottenmanagement-Systeme für die zentrale Steuerung mehrerer Roboter.",
"story": "Der Roboter kann in Flottenmanagement-Systeme integriert werden. So what? Mehrere Roboter können zentral gesteuert und überwacht werden. So what? Das optimiert die Sicherheitsabdeckung und reduziert den Verwaltungsaufwand.",
"headline": "Sicherheit im Verbund: Zentrale Steuerung für maximale Effizienz."
}
]
}

View File

@@ -0,0 +1,12 @@
PHASE 1: PRODUCT ANALYSIS & CONSTRAINTS
Input: "top of page Adventure Awaits with True AllTerrain Agility From rain to rough ground PUMA keeps you moving Make it Yours Payloads : LiDAR, thermal, PTZ, gas sensors, beacons Software : mission scheduling, anomaly alerts, cloud export Services : deployment support and custom integrations Why PUMA? Rugged mobility for realworld sites: stairs, gravel, mud, and steel grating Weatherproof confidence: IP66, dusttight and rainready Compact but capable: backpacksized, fits through 50 cm passages Mission endurance you can count on with hotswappable batteries Sensors and AI onboard for mapping, detection, and repeatable routes Adventure Awaits with PUMA M20 Bold, agile, and built for the elements. PUMA M20 is your compact, all-terrain quadruped for inspections, logistics, and missions where people shouldnt go. Key Capabilities Terrainadaptive locomotion with 25 cm step height and up to 45° slopes SLAM navigation for autonomous missions and returntobase Dual LiDAR + wideangle cameras for 360° awareness Night and thermal vision payload options Fleet management and API integrations for data export Connectivity and Computations Dual octacore 64bit industrial processors (16 GB RAM + 128 GB storage) Gigabit Ethernet, power port, and expansion for sensors Optional autocharging dock for continuous ops Quick FAQs Can it handle rain and dust? Yes, IP66. How narrow can it pass? Around 50 cm corridors. How long does it run? Up to 3 hours depending on payload and terrain. Does it work at night? Yes, with night and thermal payload options. What Is It Great At? Industrial inspections in tight corridors and multilevel facilities Outdoor rounds in heat, cold, rain, and dust Material carry and tool delivery across complex terrain Routine, repeatable patrols with onboard autonomy PUMA M20: Next-Generation Quadruped Intelligence Advanced Processing Power: Dual Octa-Core 64-bit Industrial Processors with 16 GB RAM and 128 GB storage. Robust Sensing: Dual LiDAR systems combined with wide-angle cameras for comprehensive environmental awareness. Enhanced Mobility: 5 m/s maximum speed with 45° slope capability and 25 cm obstacle clearance. Industrial-Grade Protection: IP66 rating for dust and water resistance. Designed for the future of industrial automation: PUMA M20 sets new standards in robotic mobility & intelligent operations. SLAM mapping and navigation system Point cloud surround view technology Autonomous operation capabilities PUMA M20 PRO in Numbers Lightweight 33kg Robust design for maximum mobility Protection IP66 Ensuring reliable operation in harsh environments Runtime 3 hours Continuous runtime without payload, extendable through hot-swappable batteries Power 300W Maximum external power output for powering additional equipment Unmatched Performance Powerful Capability: With a rated payload of 12kg and maximum load capacity of 50kg, PUMA delivers industrial-grade strength in a compact form factor. Exceptional Mobility: Achieves speeds up to 5m/s and tackles slopes of up to 45°, making it ideal for challenging industrial environments. Extended Operation: Up to 3 hours of continuous runtime, with hot-swappable batteries enabling 24/7 operation Advanced Intelligence Superior Sensing: Dual 48-line LiDAR systems and wide-angle cameras provide comprehensive environmental awareness Powerful Processing: 8-core 64-bit industrial-grade CPU ensures smooth operation and real-time response Intuitive Control: 360° point cloud viewing with single-click target selection simplifies operation Built for Industry 🛡️ IP66-rated protection ensures reliable operation in harsh industrial environments, with comprehensive dust and water resistance. -20°C to 55°C: Wide operating temperature range for versatile deployment Automated inspection of production lines, equipment monitoring, and material transportation between workstations Key Applications Technical Specifications Performance Metrics Integration & Support Protection Rating: IP66 (comprehensive dust and water resistance) Operating Temperature: -20°C to 55°C Terrain Capability: Industrial floors, irregular terrain, stairs Maximum Speed: 5m/s (extreme test) Continuous Speed: 3m/s Step Height: 22 cm(continuous) Slope Gradient: 45° (surface dependent) Search and rescue missions in challenging terrain High-precision industrial inspections in hazardous zones Comprehensive facility monitoring across diverse environments Scientific expeditions in remote locations Advanced security surveillance in complex urban environments LiDAR: Dual 48-line system (96 lines total) Cameras: 2 wide-angle cameras Coverage: 360° environmental point cloud viewing Communication: Gigabit Ethernet, USB 3.0 Power Output: 24V & 72V connectors, max 300W external power Mounting System: 270mm × 165mm rail system bottom of page"
Task:
1. Extract and CONSOLIDATE technical features into 8-12 high-level core capabilities or value propositions. Group minor specs (e.g., specific ports like USB/Ethernet) into broader categories (e.g., "Connectivity & Integration"). Do NOT list every single hardware spec individually. Focus on what matters for the buyer.
2. Define hard constraints (e.g., physical dimensions, max payload, environment limitations).
3. Check for internal portfolio conflicts (hypothetical product "Scrubber 5000").
ACHTUNG: Die gesamte Ausgabe (JSON-Werte, Texte, Analysen) MUSS in DEUTSCH sein. Übersetze englische Input-Daten.
Output JSON format ONLY: {"features": [], "constraints": [], "conflictCheck": {"hasConflict": false, "details": "", "relatedProduct": ""}, "rawAnalysis": ""}

View File

@@ -0,0 +1,26 @@
{
"features": [
"All-Terrain-Mobilität: Bewältigt unebenes Gelände, Treppen und Steigungen bis zu 45°.",
"Autonome Navigation: SLAM-basierte Navigation für autonome Missionen und Rückkehr zur Basis.",
"360°-Umgebungserfassung: Duale LiDAR-Systeme und Weitwinkelkameras für umfassende Umgebungswahrnehmung.",
"Nachtsichtfähigkeit: Optionale Nacht- und Wärmebildkameras für den Einsatz bei Dunkelheit.",
"Robustheit und Wetterfestigkeit: IP66-Zertifizierung für Staub- und Wasserdichtigkeit, Betriebstemperaturbereich von -20°C bis 55°C.",
"Hohe Rechenleistung: Duale Octa-Core-Prozessoren für anspruchsvolle Anwendungen.",
"Flexible Nutzlastoptionen: Trägt Nutzlasten wie LiDAR, Wärmebildkameras, PTZ-Kameras und Gassensoren.",
"Erweiterte Konnektivität und Integration: Gigabit-Ethernet, USB 3.0, API-Integrationen und Flottenmanagement.",
"Lange Betriebsdauer: Bis zu 3 Stunden Betriebsdauer, erweiterbar durch Hot-Swap-Batterien.",
"Hohe Traglast: 12 kg Nennlast, 50 kg maximale Tragfähigkeit."
],
"constraints": [
"Abmessungen: Kompakte Größe, passt durch 50 cm breite Gänge.",
"Gewicht: 33 kg.",
"Maximale Steighöhe: 25 cm.",
"Umgebungsbedingungen: IP66-zertifiziert, -20°C bis 55°C."
],
"conflictCheck": {
"hasConflict": false,
"details": "Keine Konflikte mit dem hypothetischen Produkt 'Scrubber 5000', da dieses ein Reinigungsroboter ist und der PUMA M20 ein Inspektions- und Sicherheitsroboter.",
"relatedProduct": ""
},
"rawAnalysis": "Der PUMA M20 ist ein robuster, mobiler Quadruped-Roboter, der für Inspektionen, Logistik und Sicherheitsanwendungen in anspruchsvollen Umgebungen entwickelt wurde. Seine wichtigsten Stärken liegen in seiner Geländegängigkeit, autonomen Navigation, umfassenden Umgebungserfassung und der Fähigkeit, Nutzlasten zu tragen. Die IP66-Zertifizierung und der breite Betriebstemperaturbereich ermöglichen den Einsatz in rauen Umgebungen. Die hohe Rechenleistung und die flexiblen Konnektivitätsoptionen ermöglichen die Integration in bestehende Systeme. Es gibt keine direkten Konflikte mit einem hypothetischen Reinigungsroboter wie dem 'Scrubber 5000'."
}

View File

@@ -0,0 +1,9 @@
PHASE 2: IDEAL CUSTOMER PROFILE (ICP) & DATA PROXIES
Product Context: {"features": ["All-Terrain-Mobilit\u00e4t: Bew\u00e4ltigt unebenes Gel\u00e4nde, Treppen und Steigungen bis zu 45\u00b0.", "Autonome Navigation: SLAM-basierte Navigation f\u00fcr autonome Missionen und R\u00fcckkehr zur Basis.", "360\u00b0-Umgebungserfassung: Duale LiDAR-Systeme und Weitwinkelkameras f\u00fcr umfassende Umgebungswahrnehmung.", "Nachtsichtf\u00e4higkeit: Optionale Nacht- und W\u00e4rmebildkameras f\u00fcr den Einsatz bei Dunkelheit.", "Robustheit und Wetterfestigkeit: IP66-Zertifizierung f\u00fcr Staub- und Wasserdichtigkeit, Betriebstemperaturbereich von -20\u00b0C bis 55\u00b0C.", "Hohe Rechenleistung: Duale Octa-Core-Prozessoren f\u00fcr anspruchsvolle Anwendungen.", "Flexible Nutzlastoptionen: Tr\u00e4gt Nutzlasten wie LiDAR, W\u00e4rmebildkameras, PTZ-Kameras und Gassensoren.", "Erweiterte Konnektivit\u00e4t und Integration: Gigabit-Ethernet, USB 3.0, API-Integrationen und Flottenmanagement.", "Lange Betriebsdauer: Bis zu 3 Stunden Betriebsdauer, erweiterbar durch Hot-Swap-Batterien.", "Hohe Traglast: 12 kg Nennlast, 50 kg maximale Tragf\u00e4higkeit."], "constraints": ["Abmessungen: Kompakte Gr\u00f6\u00dfe, passt durch 50 cm breite G\u00e4nge.", "Gewicht: 33 kg.", "Maximale Steigh\u00f6he: 25 cm.", "Umgebungsbedingungen: IP66-zertifiziert, -20\u00b0C bis 55\u00b0C."], "conflictCheck": {"hasConflict": false, "details": "Keine Konflikte mit dem hypothetischen Produkt 'Scrubber 5000', da dieses ein Reinigungsroboter ist und der PUMA M20 ein Inspektions- und Sicherheitsroboter.", "relatedProduct": ""}, "rawAnalysis": "Der PUMA M20 ist ein robuster, mobiler Quadruped-Roboter, der f\u00fcr Inspektionen, Logistik und Sicherheitsanwendungen in anspruchsvollen Umgebungen entwickelt wurde. Seine wichtigsten St\u00e4rken liegen in seiner Gel\u00e4ndeg\u00e4ngigkeit, autonomen Navigation, umfassenden Umgebungserfassung und der F\u00e4higkeit, Nutzlasten zu tragen. Die IP66-Zertifizierung und der breite Betriebstemperaturbereich erm\u00f6glichen den Einsatz in rauen Umgebungen. Die hohe Rechenleistung und die flexiblen Konnektivit\u00e4tsoptionen erm\u00f6glichen die Integration in bestehende Systeme. Es gibt keine direkten Konflikte mit einem hypothetischen Reinigungsroboter wie dem 'Scrubber 5000'.", "projectId": "0b570239-045b-468f-92e0-3c9ee41a01f1"}
Task: 1. Identify top 3 ICPs (Ideal Customer Profiles/Industries). 2. Define data proxies for identifying these ICPs online.
ACHTUNG: Die gesamte Ausgabe (JSON-Werte, Texte, Analysen) MUSS in DEUTSCH sein. Übersetze englische Input-Daten.
Output JSON format ONLY: {"icps": [{"name": "", "rationale": ""}], "dataProxies": [{"target": "", "method": ""}]}

View File

@@ -0,0 +1,38 @@
{
"icps": [
{
"name": "Chemie- und Petrochemieanlagen",
"rationale": "Anlagen dieser Art erfordern regelmäßige Inspektionen auf Lecks, Korrosion und andere sicherheitsrelevante Probleme. Der PUMA M20 kann diese Inspektionen autonom durchführen, auch in schwer zugänglichen oder gefährlichen Bereichen. Die optionale Gassensor-Nutzlast ermöglicht die Detektion von gefährlichen Stoffen."
},
{
"name": "Energieversorgungsunternehmen (z.B. Windparks, Solarparks, Umspannwerke)",
"rationale": "Diese Anlagen erstrecken sich oft über große, unwegsame Gebiete und müssen regelmäßig auf Schäden, Verschleiß und unbefugten Zutritt überwacht werden. Der PUMA M20 kann diese Gebiete autonom patrouillieren, Schäden erkennen und Sicherheitsvorfälle melden. Die All-Terrain-Mobilität und die Wetterfestigkeit sind hier entscheidend."
},
{
"name": "Logistikzentren und große Lagerhäuser",
"rationale": "In diesen Umgebungen kann der PUMA M20 für die autonome Inspektion von Regalen, die Überwachung von Lagerbeständen und die Unterstützung von Sicherheitsmaßnahmen eingesetzt werden. Seine Fähigkeit, Nutzlasten zu tragen, ermöglicht den Transport von kleinen Gütern oder Werkzeugen. Die kompakte Größe ermöglicht die Navigation in engen Gängen."
}
],
"dataProxies": [
{
"target": "Websites von Chemie- und Petrochemieunternehmen",
"method": "Suche nach Erwähnungen von 'Anlageninspektion', 'Sicherheitsüberwachung', 'Drohneninspektion', 'Robotik', 'Digitalisierung', 'Predictive Maintenance', 'EHS (Environment, Health & Safety)'"
},
{
"target": "Websites von Energieversorgungsunternehmen",
"method": "Suche nach Erwähnungen von 'Netzüberwachung', 'Anlagensicherheit', 'Perimeter Protection', 'Autonome Inspektion', 'Smart Grid', 'erneuerbare Energien', 'GIS (Geografisches Informationssystem)'"
},
{
"target": "Websites von Logistikunternehmen und Lagerhausbetreibern",
"method": "Suche nach Erwähnungen von 'Lagerinspektion', 'Bestandsüberwachung', 'Sicherheitsroboter', 'Autonome Navigation', 'Supply Chain Visibility', 'Warehouse Management System (WMS)'"
},
{
"target": "Branchenverbände und Fachzeitschriften (Chemie, Energie, Logistik)",
"method": "Suche nach Artikeln und Studien zum Thema Robotik, Automatisierung, Sicherheit und Effizienzsteigerung in den jeweiligen Branchen."
},
{
"target": "LinkedIn",
"method": "Suche nach Profilen von 'Head of Security', 'Werkschutzleiter', 'Anlagenleiter', 'EHS Manager', 'Innovationsmanager' in den Zielbranchen."
}
]
}

View File

@@ -0,0 +1,9 @@
PHASE 3: WHALE HUNTING
Target ICPs (Industries): [{"name": "Chemie- und Petrochemieanlagen", "rationale": "Anlagen dieser Art erfordern regelm\u00e4\u00dfige Inspektionen auf Lecks, Korrosion und andere sicherheitsrelevante Probleme. Der PUMA M20 kann diese Inspektionen autonom durchf\u00fchren, auch in schwer zug\u00e4nglichen oder gef\u00e4hrlichen Bereichen. Die optionale Gassensor-Nutzlast erm\u00f6glicht die Detektion von gef\u00e4hrlichen Stoffen."}, {"name": "Energieversorgungsunternehmen (z.B. Windparks, Solarparks, Umspannwerke)", "rationale": "Diese Anlagen erstrecken sich oft \u00fcber gro\u00dfe, unwegsame Gebiete und m\u00fcssen regelm\u00e4\u00dfig auf Sch\u00e4den, Verschlei\u00df und unbefugten Zutritt \u00fcberwacht werden. Der PUMA M20 kann diese Gebiete autonom patrouillieren, Sch\u00e4den erkennen und Sicherheitsvorf\u00e4lle melden. Die All-Terrain-Mobilit\u00e4t und die Wetterfestigkeit sind hier entscheidend."}, {"name": "Logistikzentren und gro\u00dfe Lagerh\u00e4user", "rationale": "In diesen Umgebungen kann der PUMA M20 f\u00fcr die autonome Inspektion von Regalen, die \u00dcberwachung von Lagerbest\u00e4nden und die Unterst\u00fctzung von Sicherheitsma\u00dfnahmen eingesetzt werden. Seine F\u00e4higkeit, Nutzlasten zu tragen, erm\u00f6glicht den Transport von kleinen G\u00fctern oder Werkzeugen. Die kompakte Gr\u00f6\u00dfe erm\u00f6glicht die Navigation in engen G\u00e4ngen."}]
Task: 1. Group 'Whales' (Key Accounts) strictly by ICP industries. 2. Identify 3-5 concrete top companies in DACH market per industry. 3. Define Buying Center Roles.
ACHTUNG: Die gesamte Ausgabe (JSON-Werte, Texte, Analysen) MUSS in DEUTSCH sein. Übersetze englische Input-Daten.
Output JSON format ONLY: {"whales": [{"industry": "", "accounts": []}], "roles": []}

View File

@@ -0,0 +1,61 @@
{
"whales": [
{
"industry": "Chemie- und Petrochemieanlagen",
"accounts": [
"BASF SE",
"Bayer AG",
"Evonik Industries AG",
"LANXESS AG",
"Covestro AG"
]
},
{
"industry": "Energieversorgungsunternehmen (z.B. Windparks, Solarparks, Umspannwerke)",
"accounts": [
"E.ON SE",
"RWE AG",
"EnBW Energie Baden-Württemberg AG",
"Vattenfall GmbH",
"innogy SE (Teil von E.ON)"
]
},
{
"industry": "Logistikzentren und große Lagerhäuser",
"accounts": [
"Deutsche Post DHL Group",
"DB Schenker",
"Kühne + Nagel (AG & Co. KG)",
"Amazon Deutschland Services GmbH",
"Lidl Stiftung & Co. KG"
]
}
],
"roles": [
{
"role": "Werkschutzleiter / Head of Security",
"description": "Verantwortlich für die Sicherheit der Anlagen und des Personals. Entscheidet über die Einführung neuer Sicherheitstechnologien.",
"responsibility": "Budgetverantwortung, Genehmigung von Sicherheitsprojekten, Risikomanagement"
},
{
"role": "Anlagenleiter / Betriebsleiter",
"description": "Verantwortlich für den reibungslosen Betrieb der Anlage. Interessiert an Lösungen, die die Effizienz steigern und Ausfallzeiten reduzieren.",
"responsibility": "Überwachung der Anlagenperformance, Budgetplanung, Einhaltung von Sicherheitsvorschriften"
},
{
"role": "Instandhaltungsleiter",
"description": "Verantwortlich für die Wartung und Inspektion der Anlagen. Sucht nach Lösungen, die die Inspektionsprozesse automatisieren und verbessern.",
"responsibility": "Planung und Durchführung von Wartungsarbeiten, Budgetverantwortung für Instandhaltung, Auswahl von Inspektionswerkzeugen"
},
{
"role": "Innovationsmanager / Leiter Digitale Transformation",
"description": "Verantwortlich für die Identifizierung und Implementierung neuer Technologien zur Verbesserung der Effizienz und Sicherheit.",
"responsibility": "Scouting von neuen Technologien, Pilotprojekte, Unterstützung bei der Implementierung"
},
{
"role": "Einkaufsleiter / Procurement Manager",
"description": "Verantwortlich für die Beschaffung von Gütern und Dienstleistungen. Fokussiert auf Kosten, Qualität und Lieferbedingungen.",
"responsibility": "Verhandlung von Verträgen, Auswahl von Lieferanten, Kostenkontrolle"
}
]
}

View File

@@ -0,0 +1,11 @@
PHASE 4: STRATEGY & ANGLE DEVELOPMENT
Accounts: ["BASF SE", "Bayer AG", "Evonik Industries AG", "LANXESS AG", "Covestro AG", "E.ON SE", "RWE AG", "EnBW Energie Baden-W\u00fcrttemberg AG", "Vattenfall GmbH", "innogy SE (Teil von E.ON)", "Deutsche Post DHL Group", "DB Schenker", "K\u00fchne + Nagel (AG & Co. KG)", "Amazon Deutschland Services GmbH", "Lidl Stiftung & Co. KG"]
Target Industries: ["Chemie- und Petrochemieanlagen", "Energieversorgungsunternehmen (z.B. Windparks, Solarparks, Umspannwerke)", "Logistikzentren und gro\u00dfe Lagerh\u00e4user"]
Product Features: ["All-Terrain-Mobilit\u00e4t: Bew\u00e4ltigt unebenes Gel\u00e4nde, Treppen und Steigungen bis zu 45\u00b0.", "Autonome Navigation: SLAM-basierte Navigation f\u00fcr autonome Missionen und R\u00fcckkehr zur Basis.", "360\u00b0-Umgebungserfassung: Duale LiDAR-Systeme und Weitwinkelkameras f\u00fcr umfassende Umgebungswahrnehmung.", "Nachtsichtf\u00e4higkeit: Optionale Nacht- und W\u00e4rmebildkameras f\u00fcr den Einsatz bei Dunkelheit.", "Robustheit und Wetterfestigkeit: IP66-Zertifizierung f\u00fcr Staub- und Wasserdichtigkeit, Betriebstemperaturbereich von -20\u00b0C bis 55\u00b0C.", "Hohe Rechenleistung: Duale Octa-Core-Prozessoren f\u00fcr anspruchsvolle Anwendungen.", "Flexible Nutzlastoptionen: Tr\u00e4gt Nutzlasten wie LiDAR, W\u00e4rmebildkameras, PTZ-Kameras und Gassensoren.", "Erweiterte Konnektivit\u00e4t und Integration: Gigabit-Ethernet, USB 3.0, API-Integrationen und Flottenmanagement.", "Lange Betriebsdauer: Bis zu 3 Stunden Betriebsdauer, erweiterbar durch Hot-Swap-Batterien.", "Hohe Traglast: 12 kg Nennlast, 50 kg maximale Tragf\u00e4higkeit."]
Task: 1. Develop specific "Angle" per target/industry. 2. Consistency Check against Product Matrix. 3. **IMPORTANT:** Apply "Hybrid Service Logic" if constraints exist!
ACHTUNG: Die gesamte Ausgabe (JSON-Werte, Texte, Analysen) MUSS in DEUTSCH sein. Übersetze englische Input-Daten.
Output JSON format ONLY: {"strategyMatrix": [{"segment": "", "painPoint": "", "angle": "", "differentiation": ""}]}

View File

@@ -0,0 +1,22 @@
{
"strategyMatrix": [
{
"segment": "Chemie- und Petrochemieanlagen",
"painPoint": "Unzureichende Sicherheitsüberwachung großer, gefährlicher Areale; Hohe Kosten für manuelle Inspektionen; Risiko von Leckagen und Unfällen.",
"angle": "Der Roboter sieht die Gefahr, Wackler beseitigt sie. (Automated Perimeter Protection). Autonome Inspektionsroboter mit Wärmebild- und Gassensoren detektieren Leckagen und Gefahren frühzeitig. Wackler Security bewertet Alarme über die NSL und interveniert bei Bedarf mit dem Revierwachdienst. Reduziert Risiken und Kosten durch kontinuierliche Überwachung.",
"differentiation": "All-Terrain-Mobilität für schwer zugängliche Bereiche; 24/7 Überwachung auch bei Dunkelheit und schlechtem Wetter; Integration in bestehende Sicherheitssysteme; Umfassende Lösung durch die Kombination von Robotertechnologie und Wackler Security Services."
},
{
"segment": "Energieversorgungsunternehmen (z.B. Windparks, Solarparks, Umspannwerke)",
"painPoint": "Schwer zugängliche Anlagen; Hohe Inspektionskosten; Anfälligkeit für Vandalismus und Diebstahl; Notwendigkeit kontinuierlicher Überwachung.",
"angle": "Der Roboter sieht die Gefahr, Wackler beseitigt sie. (Automated Perimeter Protection). Autonome Patrouillenroboter überwachen Windparks, Solarparks und Umspannwerke rund um die Uhr. Wackler Security bietet NSL-Aufschaltung und Interventionsdienste, um Vandalismus, Diebstahl und technische Defekte zu verhindern. Erhöht die Sicherheit und reduziert Ausfallzeiten.",
"differentiation": "Robustheit und Wetterfestigkeit für den Einsatz in anspruchsvollen Umgebungen; Autonome Navigation auch in abgelegenen Gebieten; Frühzeitige Erkennung von Gefahren und Schäden; Kombination aus Roboterüberwachung und menschlicher Intervention durch Wackler Security."
},
{
"segment": "Logistikzentren und große Lagerhäuser",
"painPoint": "Hohe Sicherheitsanforderungen; Risiko von Diebstahl und unbefugtem Zutritt; Ineffiziente manuelle Patrouillen; Große, unübersichtliche Flächen.",
"angle": "Der Roboter sieht die Gefahr, Wackler beseitigt sie. (Automated Perimeter Protection). Autonome Sicherheitsroboter patrouillieren in Logistikzentren und Lagerhäusern, erkennen unbefugtes Eindringen und melden verdächtige Aktivitäten. Wackler Security bietet NSL-Aufschaltung und Interventionsdienste, um Diebstahl zu verhindern und die Sicherheit zu gewährleisten. Optimiert die Sicherheit und reduziert Personalaufwand.",
"differentiation": "360°-Umgebungserfassung für umfassende Überwachung; Nachtsichtfähigkeit für den Einsatz bei Dunkelheit; Flexible Nutzlastoptionen für spezifische Sicherheitsanforderungen; Integration von Roboterpatrouillen und menschlicher Intervention durch Wackler Security."
}
]
}

View File

@@ -0,0 +1,33 @@
PHASE 5: FINAL REPORT GENERATION
INPUT DATA:
- Product: {"features": ["All-Terrain-Mobilit\u00e4t: Bew\u00e4ltigt unebenes Gel\u00e4nde, Treppen und Steigungen bis zu 45\u00b0.", "Autonome Navigation: SLAM-basierte Navigation f\u00fcr autonome Missionen und R\u00fcckkehr zur Basis.", "360\u00b0-Umgebungserfassung: Duale LiDAR-Systeme und Weitwinkelkameras f\u00fcr umfassende Umgebungswahrnehmung.", "Nachtsichtf\u00e4higkeit: Optionale Nacht- und W\u00e4rmebildkameras f\u00fcr den Einsatz bei Dunkelheit.", "Robustheit und Wetterfestigkeit: IP66-Zertifizierung f\u00fcr Staub- und Wasserdichtigkeit, Betriebstemperaturbereich von -20\u00b0C bis 55\u00b0C.", "Hohe Rechenleistung: Duale Octa-Core-Prozessoren f\u00fcr anspruchsvolle Anwendungen.", "Flexible Nutzlastoptionen: Tr\u00e4gt Nutzlasten wie LiDAR, W\u00e4rmebildkameras, PTZ-Kameras und Gassensoren.", "Erweiterte Konnektivit\u00e4t und Integration: Gigabit-Ethernet, USB 3.0, API-Integrationen und Flottenmanagement.", "Lange Betriebsdauer: Bis zu 3 Stunden Betriebsdauer, erweiterbar durch Hot-Swap-Batterien.", "Hohe Traglast: 12 kg Nennlast, 50 kg maximale Tragf\u00e4higkeit."], "constraints": ["Abmessungen: Kompakte Gr\u00f6\u00dfe, passt durch 50 cm breite G\u00e4nge.", "Gewicht: 33 kg.", "Maximale Steigh\u00f6he: 25 cm.", "Umgebungsbedingungen: IP66-zertifiziert, -20\u00b0C bis 55\u00b0C."]}
- ICPs: [{"name": "Chemie- und Petrochemieanlagen", "rationale": "Anlagen dieser Art erfordern regelm\u00e4\u00dfige Inspektionen auf Lecks, Korrosion und andere sicherheitsrelevante Probleme. Der PUMA M20 kann diese Inspektionen autonom durchf\u00fchren, auch in schwer zug\u00e4nglichen oder gef\u00e4hrlichen Bereichen. Die optionale Gassensor-Nutzlast erm\u00f6glicht die Detektion von gef\u00e4hrlichen Stoffen."}, {"name": "Energieversorgungsunternehmen (z.B. Windparks, Solarparks, Umspannwerke)", "rationale": "Diese Anlagen erstrecken sich oft \u00fcber gro\u00dfe, unwegsame Gebiete und m\u00fcssen regelm\u00e4\u00dfig auf Sch\u00e4den, Verschlei\u00df und unbefugten Zutritt \u00fcberwacht werden. Der PUMA M20 kann diese Gebiete autonom patrouillieren, Sch\u00e4den erkennen und Sicherheitsvorf\u00e4lle melden. Die All-Terrain-Mobilit\u00e4t und die Wetterfestigkeit sind hier entscheidend."}, {"name": "Logistikzentren und gro\u00dfe Lagerh\u00e4user", "rationale": "In diesen Umgebungen kann der PUMA M20 f\u00fcr die autonome Inspektion von Regalen, die \u00dcberwachung von Lagerbest\u00e4nden und die Unterst\u00fctzung von Sicherheitsma\u00dfnahmen eingesetzt werden. Seine F\u00e4higkeit, Nutzlasten zu tragen, erm\u00f6glicht den Transport von kleinen G\u00fctern oder Werkzeugen. Die kompakte Gr\u00f6\u00dfe erm\u00f6glicht die Navigation in engen G\u00e4ngen."}]
- Targets: [{"industry": "Chemie- und Petrochemieanlagen", "accounts": ["BASF SE", "Bayer AG", "Evonik Industries AG", "LANXESS AG", "Covestro AG"]}, {"industry": "Energieversorgungsunternehmen (z.B. Windparks, Solarparks, Umspannwerke)", "accounts": ["E.ON SE", "RWE AG", "EnBW Energie Baden-W\u00fcrttemberg AG", "Vattenfall GmbH", "innogy SE (Teil von E.ON)"]}, {"industry": "Logistikzentren und gro\u00dfe Lagerh\u00e4user", "accounts": ["Deutsche Post DHL Group", "DB Schenker", "K\u00fchne + Nagel (AG & Co. KG)", "Amazon Deutschland Services GmbH", "Lidl Stiftung & Co. KG"]}]
- Strategy Matrix: [{"segment": "Chemie- und Petrochemieanlagen", "painPoint": "Unzureichende Sicherheits\u00fcberwachung gro\u00dfer, gef\u00e4hrlicher Areale; Hohe Kosten f\u00fcr manuelle Inspektionen; Risiko von Leckagen und Unf\u00e4llen.", "angle": "Der Roboter sieht die Gefahr, Wackler beseitigt sie. (Automated Perimeter Protection). Autonome Inspektionsroboter mit W\u00e4rmebild- und Gassensoren detektieren Leckagen und Gefahren fr\u00fchzeitig. Wackler Security bewertet Alarme \u00fcber die NSL und interveniert bei Bedarf mit dem Revierwachdienst. Reduziert Risiken und Kosten durch kontinuierliche \u00dcberwachung.", "differentiation": "All-Terrain-Mobilit\u00e4t f\u00fcr schwer zug\u00e4ngliche Bereiche; 24/7 \u00dcberwachung auch bei Dunkelheit und schlechtem Wetter; Integration in bestehende Sicherheitssysteme; Umfassende L\u00f6sung durch die Kombination von Robotertechnologie und Wackler Security Services."}, {"segment": "Energieversorgungsunternehmen (z.B. Windparks, Solarparks, Umspannwerke)", "painPoint": "Schwer zug\u00e4ngliche Anlagen; Hohe Inspektionskosten; Anf\u00e4lligkeit f\u00fcr Vandalismus und Diebstahl; Notwendigkeit kontinuierlicher \u00dcberwachung.", "angle": "Der Roboter sieht die Gefahr, Wackler beseitigt sie. (Automated Perimeter Protection). Autonome Patrouillenroboter \u00fcberwachen Windparks, Solarparks und Umspannwerke rund um die Uhr. Wackler Security bietet NSL-Aufschaltung und Interventionsdienste, um Vandalismus, Diebstahl und technische Defekte zu verhindern. Erh\u00f6ht die Sicherheit und reduziert Ausfallzeiten.", "differentiation": "Robustheit und Wetterfestigkeit f\u00fcr den Einsatz in anspruchsvollen Umgebungen; Autonome Navigation auch in abgelegenen Gebieten; Fr\u00fchzeitige Erkennung von Gefahren und Sch\u00e4den; Kombination aus Roboter\u00fcberwachung und menschlicher Intervention durch Wackler Security."}, {"segment": "Logistikzentren und gro\u00dfe Lagerh\u00e4user", "painPoint": "Hohe Sicherheitsanforderungen; Risiko von Diebstahl und unbefugtem Zutritt; Ineffiziente manuelle Patrouillen; Gro\u00dfe, un\u00fcbersichtliche Fl\u00e4chen.", "angle": "Der Roboter sieht die Gefahr, Wackler beseitigt sie. (Automated Perimeter Protection). Autonome Sicherheitsroboter patrouillieren in Logistikzentren und Lagerh\u00e4usern, erkennen unbefugtes Eindringen und melden verd\u00e4chtige Aktivit\u00e4ten. Wackler Security bietet NSL-Aufschaltung und Interventionsdienste, um Diebstahl zu verhindern und die Sicherheit zu gew\u00e4hrleisten. Optimiert die Sicherheit und reduziert Personalaufwand.", "differentiation": "360\u00b0-Umgebungserfassung f\u00fcr umfassende \u00dcberwachung; Nachtsichtf\u00e4higkeit f\u00fcr den Einsatz bei Dunkelheit; Flexible Nutzlastoptionen f\u00fcr spezifische Sicherheitsanforderungen; Integration von Roboterpatrouillen und menschlicher Intervention durch Wackler Security."}]
TASK:
Write a professional "GTM STRATEGY REPORT" in Markdown.
REQUIRED STRUCTURE:
1. **Executive Summary**: A brief strategic overview.
2. **Product Analysis**: Key features & constraints.
3. **Target Audience**: The selected ICPs and why.
4. **Target Accounts**: Top companies (Whales).
5. **Strategy Matrix**:
- Create a STRICT Markdown table.
- Columns: Segment | Pain Point | Angle | Differentiation
- Template:
| Segment | Pain Point | Angle | Differentiation |
| :--- | :--- | :--- | :--- |
| [Content] | [Content] | [Content] | [Content] |
- Use the data from the 'Strategy Matrix' input.
- Do NOT use newlines inside table cells (use <br> instead) to keep the table structure intact.
6. **Next Steps**: Actionable recommendations.
7. **Hybrid Service Logic**: Explain the machine/human symbiosis.
ACHTUNG: Die gesamte Ausgabe (JSON-Werte, Texte, Analysen) MUSS in DEUTSCH sein. Übersetze englische Input-Daten.
Output: Return strictly MARKDOWN formatted text. Start with "# GTM STRATEGY REPORT".

View File

@@ -0,0 +1,64 @@
# GTM STRATEGY REPORT
## 1. Executive Summary
Dieser Go-to-Market (GTM) Strategiebericht adressiert die Markteinführung des PUMA M20, eines robusten All-Terrain-Roboters für Inspektions- und Sicherheitsanwendungen. Der Fokus liegt auf drei Schlüsselindustrien: Chemie- und Petrochemieanlagen, Energieversorgungsunternehmen und Logistikzentren. Die Strategie basiert auf der "Dynamic Hybrid Service" Logik, die die Fähigkeiten des Roboters mit den Dienstleistungen der Wackler Group (insbesondere Wackler Security) kombiniert, um einen umfassenden Sicherheitsansatz zu bieten. Der zentrale Pitch ist: "Der Roboter sieht die Gefahr, Wackler beseitigt sie. (Automated Perimeter Protection)."
## 2. Product Analysis
Der PUMA M20 ist ein vielseitiger Roboter, der für anspruchsvolle Umgebungen entwickelt wurde.
**Key Features:**
* All-Terrain-Mobilität: Bewältigt unebenes Gelände, Treppen und Steigungen bis zu 45°.
* Autonome Navigation: SLAM-basierte Navigation für autonome Missionen und Rückkehr zur Basis.
* 360°-Umgebungserfassung: Duale LiDAR-Systeme und Weitwinkelkameras für umfassende Umgebungswahrnehmung.
* Nachtsichtfähigkeit: Optionale Nacht- und Wärmebildkameras für den Einsatz bei Dunkelheit.
* Robustheit und Wetterfestigkeit: IP66-Zertifizierung für Staub- und Wasserdichtigkeit, Betriebstemperaturbereich von -20°C bis 55°C.
* Hohe Rechenleistung: Duale Octa-Core-Prozessoren für anspruchsvolle Anwendungen.
* Flexible Nutzlastoptionen: Trägt Nutzlasten wie LiDAR, Wärmebildkameras, PTZ-Kameras und Gassensoren.
* Erweiterte Konnektivität und Integration: Gigabit-Ethernet, USB 3.0, API-Integrationen und Flottenmanagement.
* Lange Betriebsdauer: Bis zu 3 Stunden Betriebsdauer, erweiterbar durch Hot-Swap-Batterien.
* Hohe Traglast: 12 kg Nennlast, 50 kg maximale Tragfähigkeit.
**Constraints:**
* Abmessungen: Kompakte Größe, passt durch 50 cm breite Gänge.
* Gewicht: 33 kg.
* Maximale Steighöhe: 25 cm.
* Umgebungsbedingungen: IP66-zertifiziert, -20°C bis 55°C.
## 3. Target Audience
Die ausgewählten Ideal Customer Profiles (ICPs) sind:
* **Chemie- und Petrochemieanlagen:** Diese Anlagen benötigen regelmäßige Inspektionen auf Lecks, Korrosion und andere sicherheitsrelevante Probleme. Der PUMA M20 kann diese Inspektionen autonom durchführen, auch in schwer zugänglichen oder gefährlichen Bereichen. Die optionale Gassensor-Nutzlast ermöglicht die Detektion von gefährlichen Stoffen.
* **Energieversorgungsunternehmen (z.B. Windparks, Solarparks, Umspannwerke):** Diese Anlagen erstrecken sich oft über große, unwegsame Gebiete und müssen regelmäßig auf Schäden, Verschleiß und unbefugten Zutritt überwacht werden. Der PUMA M20 kann diese Gebiete autonom patrouillieren, Schäden erkennen und Sicherheitsvorfälle melden. Die All-Terrain-Mobilität und die Wetterfestigkeit sind hier entscheidend.
* **Logistikzentren und große Lagerhäuser:** In diesen Umgebungen kann der PUMA M20 für die autonome Inspektion von Regalen, die Überwachung von Lagerbeständen und die Unterstützung von Sicherheitsmaßnahmen eingesetzt werden. Seine Fähigkeit, Nutzlasten zu tragen, ermöglicht den Transport von kleinen Gütern oder Werkzeugen. Die kompakte Größe ermöglicht die Navigation in engen Gängen.
## 4. Target Accounts
Die Top-Unternehmen (Whales) in den Zielindustrien sind:
* **Chemie- und Petrochemieanlagen:** BASF SE, Bayer AG, Evonik Industries AG, LANXESS AG, Covestro AG
* **Energieversorgungsunternehmen (z.B. Windparks, Solarparks, Umspannwerke):** E.ON SE, RWE AG, EnBW Energie Baden-Württemberg AG, Vattenfall GmbH, innogy SE (Teil von E.ON)
* **Logistikzentren und große Lagerhäuser:** Deutsche Post DHL Group, DB Schenker, Kühne + Nagel (AG & Co. KG), Amazon Deutschland Services GmbH, Lidl Stiftung & Co. KG
## 5. Strategy Matrix
| Segment | Pain Point | Angle | Differentiation |
| :--- | :--- | :--- | :--- |
| Chemie- und Petrochemieanlagen | Unzureichende Sicherheitsüberwachung großer, gefährlicher Areale; Hohe Kosten für manuelle Inspektionen; Risiko von Leckagen und Unfällen. | Der Roboter sieht die Gefahr, Wackler beseitigt sie. (Automated Perimeter Protection).<br>Autonome Inspektionsroboter mit Wärmebild- und Gassensoren detektieren Leckagen und Gefahren frühzeitig. Wackler Security bewertet Alarme über die NSL und interveniert bei Bedarf mit dem Revierwachdienst. Reduziert Risiken und Kosten durch kontinuierliche Überwachung. | All-Terrain-Mobilität für schwer zugängliche Bereiche; 24/7 Überwachung auch bei Dunkelheit und schlechtem Wetter; Integration in bestehende Sicherheitssysteme; Umfassende Lösung durch die Kombination von Robotertechnologie und Wackler Security Services. |
| Energieversorgungsunternehmen (z.B. Windparks, Solarparks, Umspannwerke) | Schwer zugängliche Anlagen; Hohe Inspektionskosten; Anfälligkeit für Vandalismus und Diebstahl; Notwendigkeit kontinuierlicher Überwachung. | Der Roboter sieht die Gefahr, Wackler beseitigt sie. (Automated Perimeter Protection).<br>Autonome Patrouillenroboter überwachen Windparks, Solarparks und Umspannwerke rund um die Uhr. Wackler Security bietet NSL-Aufschaltung und Interventionsdienste, um Vandalismus, Diebstahl und technische Defekte zu verhindern. Erhöht die Sicherheit und reduziert Ausfallzeiten. | Robustheit und Wetterfestigkeit für den Einsatz in anspruchsvollen Umgebungen; Autonome Navigation auch in abgelegenen Gebieten; Frühzeitige Erkennung von Gefahren und Schäden; Kombination aus Roboterüberwachung und menschlicher Intervention durch Wackler Security. |
| Logistikzentren und große Lagerhäuser | Hohe Sicherheitsanforderungen; Risiko von Diebstahl und unbefugtem Zutritt; Ineffiziente manuelle Patrouillen; Große, unübersichtliche Flächen. | Der Roboter sieht die Gefahr, Wackler beseitigt sie. (Automated Perimeter Protection).<br>Autonome Sicherheitsroboter patrouillieren in Logistikzentren und Lagerhäusern, erkennen unbefugtes Eindringen und melden verdächtige Aktivitäten. Wackler Security bietet NSL-Aufschaltung und Interventionsdienste, um Diebstahl zu verhindern und die Sicherheit zu gewährleisten. Optimiert die Sicherheit und reduziert Personalaufwand. | 360°-Umgebungserfassung für umfassende Überwachung; Nachtsichtfähigkeit für den Einsatz bei Dunkelheit; Flexible Nutzlastoptionen für spezifische Sicherheitsanforderungen; Integration von Roboterpatrouillen und menschlicher Intervention durch Wackler Security. |
## 6. Next Steps
1. **Leadgenerierung:** Gezielte Marketingkampagnen für die identifizierten ICPs, mit Fokus auf die spezifischen Pain Points und den "Automated Perimeter Protection" Ansatz.
2. **Sales Enablement:** Erstellung von Verkaufsunterlagen, die die Vorteile des PUMA M20 in Kombination mit den Dienstleistungen der Wackler Group hervorheben.
3. **Pilotprojekte:** Durchführung von Pilotprojekten mit ausgewählten Target Accounts, um den Wert der Lösung zu demonstrieren und Use Cases zu validieren.
4. **Partnerschaften:** Aufbau von Partnerschaften mit Technologieanbietern und Systemintegratoren, um die Reichweite und das Lösungsangebot zu erweitern.
5. **Content Marketing:** Erstellung von Fachartikeln, Whitepapers und Case Studies, die die Expertise der Wackler Group im Bereich Robotik und Sicherheit demonstrieren.
## 7. Hybrid Service Logic
Der PUMA M20 ist ein Sicherheits- und Inspektionsroboter. Daher gilt:
* **Robot Role:** "Detektion & Präsenz". Der Roboter patrouilliert, nutzt Wärmebild/Sensoren, geht in Gefahrenbereiche. Er wird nicht müde und hat keine Angst.
* **Human Role (Wackler Security):** "Bewertung & Intervention".
* NSL (Notruf- & Serviceleitstelle): Bewertet den Video-Feed des Roboters bei Alarm.
* Revierwachdienst: Fährt raus zur Intervention, wenn der Roboter einen Eindringling oder Schaden meldet.
Der Roboter übernimmt die monotone und potenziell gefährliche Aufgabe der kontinuierlichen Überwachung. Wackler Security steuert die Bewertung der Alarme und die notwendigen Interventionen. Diese Kombination aus Technologie und menschlicher Expertise bietet einen umfassenden und effektiven Sicherheitsansatz.

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,46 @@
{
"battlecards": [
{
"persona": "Werkschutzleiter / Head of Security",
"objection": "Wir haben bereits ein umfassendes Sicherheitssystem. Warum sollten wir zus\u00e4tzlich einen Roboter einsetzen?",
"responseScript": "Ihr bestehendes System ist wichtig, aber der Roboter erg\u00e4nzt es ideal. Er bietet 24/7-Patrouillen in schwer zug\u00e4nglichen Bereichen, erkennt Gefahren fr\u00fchzeitig und reduziert das Risiko von menschlichem Versagen. In Kombination mit der Wackler Security NSL und dem Revierwachdienst bieten wir eine umfassende, automatisierte Perimeter Protection."
},
{
"persona": "Anlagenleiter / Betriebsleiter",
"objection": "Ich bin besorgt, dass der Roboter den Betriebsablauf st\u00f6ren k\u00f6nnte.",
"responseScript": "Der Roboter ist so konzipiert, dass er autonom navigiert und den Betrieb nicht beeintr\u00e4chtigt. Er kann Routen planen, Hindernissen ausweichen und seine Arbeit unauff\u00e4llig erledigen. Durch die fr\u00fchzeitige Erkennung von Problemen tr\u00e4gt er sogar zur Effizienzsteigerung und Reduzierung von Ausfallzeiten bei."
},
{
"persona": "Instandhaltungsleiter",
"objection": "Wie aufw\u00e4ndig ist die Wartung des Roboters?",
"responseScript": "Die Wartung ist unkompliziert. Der Roboter ist robust und wetterfest. Durch die Hot-Swap-Batterien ist ein unterbrechungsfreier Betrieb gew\u00e4hrleistet. Wir bieten umfassende Wartungsvertr\u00e4ge an, um die Betriebsbereitschaft sicherzustellen. Die Integration von Inspektionsaufgaben reduziert den manuellen Aufwand erheblich."
},
{
"persona": "Innovationsmanager / Leiter Digitale Transformation",
"objection": "Welchen konkreten Mehrwert bietet der Roboter gegen\u00fcber anderen Technologien?",
"responseScript": "Der Roboter kombiniert All-Terrain-Mobilit\u00e4t, autonome Navigation und fortschrittliche Sensorik in einer Plattform. Er kann in Bereichen eingesetzt werden, die f\u00fcr andere Technologien unzug\u00e4nglich sind. Die Integration mit Wackler Security Services bietet eine einzigartige, umfassende L\u00f6sung f\u00fcr die automatisierte Perimeter Protection."
},
{
"persona": "Einkaufsleiter / Procurement Manager",
"objection": "Die Anschaffungskosten sind zu hoch.",
"responseScript": "Betrachten Sie die langfristigen Einsparungen durch reduzierte Personalkosten, geringere Risiken und verbesserte Effizienz. Der Roboter erm\u00f6glicht eine kontinuierliche \u00dcberwachung und fr\u00fchzeitige Schadenserkennung, was teure Reparaturen und Ausfallzeiten verhindert. Die Kombination mit Wackler Security Services bietet zus\u00e4tzliche Kostenvorteile durch optimierte Prozesse."
}
],
"visualPrompts": [
{
"title": "Robotereinsatz in einer Chemieanlage",
"context": "Demonstration der F\u00e4higkeiten des Roboters zur Leckageerkennung und \u00dcberwachung von Sicherheitsbereichen.",
"prompt": "Erstelle ein realistisches Bild eines Quadruped-Roboters, der mit W\u00e4rmebild- und Gassensoren ausgestattet ist und autonom in einer Chemieanlage patrouilliert. Zeige, wie der Roboter eine Leckage an einer Rohrleitung erkennt und einen Alarm ausl\u00f6st. Im Hintergrund ist ein Wackler Security Einsatzfahrzeug auf dem Weg zum Einsatzort zu sehen."
},
{
"title": "Robotereinsatz in einem Windpark",
"context": "Darstellung des Roboters bei der \u00dcberwachung von Windkraftanlagen und der Erkennung von Vandalismus.",
"prompt": "Erstelle ein Bild eines robusten, wetterfesten Roboters, der in einem Windpark autonom patrouilliert. Der Roboter ist mit Kameras und Sensoren ausgestattet, um Vandalismus und technische Defekte zu erkennen. Zeige, wie der Roboter einen besch\u00e4digten Zaun erkennt und einen Alarm an die Wackler Security NSL sendet."
},
{
"title": "Robotereinsatz in einem Logistikzentrum",
"context": "Visualisierung des Roboters bei der Patrouille in einem Lagerhaus und der Erkennung von unbefugtem Zutritt.",
"prompt": "Erstelle ein Bild eines Sicherheitsroboters, der in einem gro\u00dfen Lagerhaus autonom patrouilliert. Der Roboter ist mit 360\u00b0-Kameras und Nachtsicht ausgestattet, um unbefugtes Eindringen zu erkennen. Zeige, wie der Roboter eine verd\u00e4chtige Person entdeckt und einen Alarm an die Wackler Security NSL sendet. Im Hintergrund sind Mitarbeiter von Wackler Security zu sehen, die auf den Alarm reagieren."
}
]
}

View File

@@ -0,0 +1 @@
Erstelle ein realistisches Bild eines Quadruped-Roboters, der mit Wärmebild- und Gassensoren ausgestattet ist und autonom in einer Chemieanlage patrouilliert. Zeige, wie der Roboter eine Leckage an einer Rohrleitung erkennt und einen Alarm auslöst. Im Hintergrund ist ein Wackler Security Einsatzfahrzeug auf dem Weg zum Einsatzort zu sehen.

View File

@@ -0,0 +1 @@
iVBORw0KGgoAAAANSUhEUgAAA6AAAARgCAIAAAB46KzcAAAeVWNhQlgAAB5VanVtYgAAAB5qdW1kYzJwYQARABCAAACqADibcQNj...

View File

@@ -0,0 +1,10 @@
PHASE 7: VERTICAL LANDING PAGE COPY (Conversion Optimization)
ICPs: [{"name": "Chemie- und Petrochemieanlagen", "rationale": "Anlagen dieser Art erfordern regelm\u00e4\u00dfige Inspektionen auf Lecks, Korrosion und andere sicherheitsrelevante Probleme. Der PUMA M20 kann diese Inspektionen autonom durchf\u00fchren, auch in schwer zug\u00e4nglichen oder gef\u00e4hrlichen Bereichen. Die optionale Gassensor-Nutzlast erm\u00f6glicht die Detektion von gef\u00e4hrlichen Stoffen."}, {"name": "Energieversorgungsunternehmen (z.B. Windparks, Solarparks, Umspannwerke)", "rationale": "Diese Anlagen erstrecken sich oft \u00fcber gro\u00dfe, unwegsame Gebiete und m\u00fcssen regelm\u00e4\u00dfig auf Sch\u00e4den, Verschlei\u00df und unbefugten Zutritt \u00fcberwacht werden. Der PUMA M20 kann diese Gebiete autonom patrouillieren, Sch\u00e4den erkennen und Sicherheitsvorf\u00e4lle melden. Die All-Terrain-Mobilit\u00e4t und die Wetterfestigkeit sind hier entscheidend."}, {"name": "Logistikzentren und gro\u00dfe Lagerh\u00e4user", "rationale": "In diesen Umgebungen kann der PUMA M20 f\u00fcr die autonome Inspektion von Regalen, die \u00dcberwachung von Lagerbest\u00e4nden und die Unterst\u00fctzung von Sicherheitsma\u00dfnahmen eingesetzt werden. Seine F\u00e4higkeit, Nutzlasten zu tragen, erm\u00f6glicht den Transport von kleinen G\u00fctern oder Werkzeugen. Die kompakte Gr\u00f6\u00dfe erm\u00f6glicht die Navigation in engen G\u00e4ngen."}]
Strategy: [{"segment": "Chemie- und Petrochemieanlagen", "painPoint": "Unzureichende Sicherheits\u00fcberwachung gro\u00dfer, gef\u00e4hrlicher Areale; Hohe Kosten f\u00fcr manuelle Inspektionen; Risiko von Leckagen und Unf\u00e4llen.", "angle": "Der Roboter sieht die Gefahr, Wackler beseitigt sie. (Automated Perimeter Protection). Autonome Inspektionsroboter mit W\u00e4rmebild- und Gassensoren detektieren Leckagen und Gefahren fr\u00fchzeitig. Wackler Security bewertet Alarme \u00fcber die NSL und interveniert bei Bedarf mit dem Revierwachdienst. Reduziert Risiken und Kosten durch kontinuierliche \u00dcberwachung.", "differentiation": "All-Terrain-Mobilit\u00e4t f\u00fcr schwer zug\u00e4ngliche Bereiche; 24/7 \u00dcberwachung auch bei Dunkelheit und schlechtem Wetter; Integration in bestehende Sicherheitssysteme; Umfassende L\u00f6sung durch die Kombination von Robotertechnologie und Wackler Security Services."}, {"segment": "Energieversorgungsunternehmen (z.B. Windparks, Solarparks, Umspannwerke)", "painPoint": "Schwer zug\u00e4ngliche Anlagen; Hohe Inspektionskosten; Anf\u00e4lligkeit f\u00fcr Vandalismus und Diebstahl; Notwendigkeit kontinuierlicher \u00dcberwachung.", "angle": "Der Roboter sieht die Gefahr, Wackler beseitigt sie. (Automated Perimeter Protection). Autonome Patrouillenroboter \u00fcberwachen Windparks, Solarparks und Umspannwerke rund um die Uhr. Wackler Security bietet NSL-Aufschaltung und Interventionsdienste, um Vandalismus, Diebstahl und technische Defekte zu verhindern. Erh\u00f6ht die Sicherheit und reduziert Ausfallzeiten.", "differentiation": "Robustheit und Wetterfestigkeit f\u00fcr den Einsatz in anspruchsvollen Umgebungen; Autonome Navigation auch in abgelegenen Gebieten; Fr\u00fchzeitige Erkennung von Gefahren und Sch\u00e4den; Kombination aus Roboter\u00fcberwachung und menschlicher Intervention durch Wackler Security."}, {"segment": "Logistikzentren und gro\u00dfe Lagerh\u00e4user", "painPoint": "Hohe Sicherheitsanforderungen; Risiko von Diebstahl und unbefugtem Zutritt; Ineffiziente manuelle Patrouillen; Gro\u00dfe, un\u00fcbersichtliche Fl\u00e4chen.", "angle": "Der Roboter sieht die Gefahr, Wackler beseitigt sie. (Automated Perimeter Protection). Autonome Sicherheitsroboter patrouillieren in Logistikzentren und Lagerh\u00e4usern, erkennen unbefugtes Eindringen und melden verd\u00e4chtige Aktivit\u00e4ten. Wackler Security bietet NSL-Aufschaltung und Interventionsdienste, um Diebstahl zu verhindern und die Sicherheit zu gew\u00e4hrleisten. Optimiert die Sicherheit und reduziert Personalaufwand.", "differentiation": "360\u00b0-Umgebungserfassung f\u00fcr umfassende \u00dcberwachung; Nachtsichtf\u00e4higkeit f\u00fcr den Einsatz bei Dunkelheit; Flexible Nutzlastoptionen f\u00fcr spezifische Sicherheitsanforderungen; Integration von Roboterpatrouillen und menschlicher Intervention durch Wackler Security."}]
TASK: 1. Transform generic features into specific benefits for the Top 2 ICPs. 2. Apply "Wackler Symbiosis". 3. Create Landing Page Drafts (Hero Section).
ACHTUNG: Die gesamte Ausgabe (JSON-Werte, Texte, Analysen) MUSS in DEUTSCH sein. Übersetze englische Input-Daten.
Output JSON format ONLY: {"landingPages": [{"industry": "", "headline": "", "subline": "", "bullets": [], "cta": ""}]}

View File

@@ -0,0 +1,28 @@
{
"landingPages": [
{
"industry": "Chemie- und Petrochemieanlagen",
"headline": "Sicherheitslücken in Chemieanlagen? PUMA M20 + Wackler schließen sie!",
"subline": "Autonome Roboter-Inspektion mit Wärmebild und Gassensoren rund um die Uhr. Wackler Security Intervention bei Bedarf.",
"bullets": [
"Frühzeitige Leckageerkennung durch Gassensor-Nutzlast.",
"Autonome Inspektion schwer zugänglicher Bereiche sicher und effizient.",
"24/7 Überwachung minimiert Risiken und Ausfallzeiten.",
"Wackler Security: NSL-Aufschaltung und Revierwachdienst für sofortige Intervention."
],
"cta": "Jetzt Sicherheitsrisiko minimieren!"
},
{
"industry": "Energieversorgungsunternehmen (z.B. Windparks, Solarparks, Umspannwerke)",
"headline": "Autonome Überwachung für Wind- & Solarparks: PUMA M20 + Wackler schützen Ihre Anlagen!",
"subline": "Robust, wetterfest, autonom: Der PUMA M20 patrouilliert, Wackler Security interveniert bei Vandalismus, Diebstahl und Defekten.",
"bullets": [
"Kontinuierliche Überwachung auch in abgelegenen Gebieten.",
"Frühzeitige Erkennung von Schäden und unbefugtem Zutritt.",
"Reduzierung von Ausfallzeiten und Reparaturkosten.",
"Wackler Security: NSL-Aufschaltung und schnelle Intervention vor Ort."
],
"cta": "Jetzt Anlagen sichern!"
}
]
}

View File

@@ -0,0 +1,9 @@
PHASE 8: BUSINESS CASE BUILDER (The CFO Pitch)
Input: ICPs: [{"name": "Chemie- und Petrochemieanlagen", "rationale": "Anlagen dieser Art erfordern regelm\u00e4\u00dfige Inspektionen auf Lecks, Korrosion und andere sicherheitsrelevante Probleme. Der PUMA M20 kann diese Inspektionen autonom durchf\u00fchren, auch in schwer zug\u00e4nglichen oder gef\u00e4hrlichen Bereichen. Die optionale Gassensor-Nutzlast erm\u00f6glicht die Detektion von gef\u00e4hrlichen Stoffen."}, {"name": "Energieversorgungsunternehmen (z.B. Windparks, Solarparks, Umspannwerke)", "rationale": "Diese Anlagen erstrecken sich oft \u00fcber gro\u00dfe, unwegsame Gebiete und m\u00fcssen regelm\u00e4\u00dfig auf Sch\u00e4den, Verschlei\u00df und unbefugten Zutritt \u00fcberwacht werden. Der PUMA M20 kann diese Gebiete autonom patrouillieren, Sch\u00e4den erkennen und Sicherheitsvorf\u00e4lle melden. Die All-Terrain-Mobilit\u00e4t und die Wetterfestigkeit sind hier entscheidend."}, {"name": "Logistikzentren und gro\u00dfe Lagerh\u00e4user", "rationale": "In diesen Umgebungen kann der PUMA M20 f\u00fcr die autonome Inspektion von Regalen, die \u00dcberwachung von Lagerbest\u00e4nden und die Unterst\u00fctzung von Sicherheitsma\u00dfnahmen eingesetzt werden. Seine F\u00e4higkeit, Nutzlasten zu tragen, erm\u00f6glicht den Transport von kleinen G\u00fctern oder Werkzeugen. Die kompakte Gr\u00f6\u00dfe erm\u00f6glicht die Navigation in engen G\u00e4ngen."}], Features: ["All-Terrain-Mobilit\u00e4t: Bew\u00e4ltigt unebenes Gel\u00e4nde, Treppen und Steigungen bis zu 45\u00b0.", "Autonome Navigation: SLAM-basierte Navigation f\u00fcr autonome Missionen und R\u00fcckkehr zur Basis.", "360\u00b0-Umgebungserfassung: Duale LiDAR-Systeme und Weitwinkelkameras f\u00fcr umfassende Umgebungswahrnehmung.", "Nachtsichtf\u00e4higkeit: Optionale Nacht- und W\u00e4rmebildkameras f\u00fcr den Einsatz bei Dunkelheit.", "Robustheit und Wetterfestigkeit: IP66-Zertifizierung f\u00fcr Staub- und Wasserdichtigkeit, Betriebstemperaturbereich von -20\u00b0C bis 55\u00b0C.", "Hohe Rechenleistung: Duale Octa-Core-Prozessoren f\u00fcr anspruchsvolle Anwendungen.", "Flexible Nutzlastoptionen: Tr\u00e4gt Nutzlasten wie LiDAR, W\u00e4rmebildkameras, PTZ-Kameras und Gassensoren.", "Erweiterte Konnektivit\u00e4t und Integration: Gigabit-Ethernet, USB 3.0, API-Integrationen und Flottenmanagement.", "Lange Betriebsdauer: Bis zu 3 Stunden Betriebsdauer, erweiterbar durch Hot-Swap-Batterien.", "Hohe Traglast: 12 kg Nennlast, 50 kg maximale Tragf\u00e4higkeit."]
TASK: 1. Estimate labor costs/pain points. 2. Compare against Robot Leasing (approx 330-600€/month). 3. Develop ROI logic. 4. Create "Financial Argumentation Guide" for each ICP.
ACHTUNG: Die gesamte Ausgabe (JSON-Werte, Texte, Analysen) MUSS in DEUTSCH sein. Übersetze englische Input-Daten.
Output JSON format ONLY: {"businessCases": [{"industry": "", "costDriver": "", "efficiencyGain": "", "riskArgument": ""}]}

View File

@@ -0,0 +1,22 @@
{
"businessCases": [
{
"industry": "Chemie- und Petrochemieanlagen",
"costDriver": "Regelm\u00e4\u00dfige manuelle Inspektionen auf Lecks, Korrosion und sicherheitsrelevante Probleme. Hohe Personalkosten f\u00fcr Inspektionsteams, insbesondere in gef\u00e4hrlichen Bereichen. Produktionsausf\u00e4lle durch notwendige Anlagenabschaltungen f\u00fcr Inspektionen. Kosten f\u00fcr Spezialausr\u00fcstung und Schulungen f\u00fcr Inspektoren.",
"efficiencyGain": "Reduzierung der Inspektionskosten durch autonome Inspektionen des PUMA M20. Kontinuierliche \u00dcberwachung ohne Produktionsunterbrechungen. Fr\u00fchzeitige Erkennung von Problemen durch Gassensoren und andere Nutzlasten, was gr\u00f6\u00dfere Sch\u00e4den und Ausfallzeiten verhindert. Reduzierung des Personalbedarfs f\u00fcr Routineinspektionen. Optimierung der Wartungsplanung durch datengest\u00fctzte Einblicke.",
"riskArgument": "Minimierung des Risikos f\u00fcr menschliche Inspektoren in gef\u00e4hrlichen Umgebungen (z.B. giftige Gase, hohe Temperaturen). Verbesserung der Anlagensicherheit durch kontinuierliche \u00dcberwachung und schnelle Reaktion auf potenzielle Gefahren. Einhaltung von Sicherheitsvorschriften und -standards durch l\u00fcckenlose Dokumentation der Inspektionsergebnisse. Reduzierung des Risikos von Umweltverschmutzung durch fr\u00fchzeitige Leckerkennung."
},
{
"industry": "Energieversorgungsunternehmen (z.B. Windparks, Solarparks, Umspannwerke)",
"costDriver": "Hohe Kosten f\u00fcr die manuelle Inspektion weitl\u00e4ufiger Anlagen, insbesondere in unwegsamem Gel\u00e4nde. Kosten f\u00fcr die Anmietung von Spezialfahrzeugen oder Hubschraubern f\u00fcr Inspektionen. Personalkosten f\u00fcr Sicherheitskr\u00e4fte zur \u00dcberwachung gegen unbefugten Zutritt. Sch\u00e4den durch Vandalismus oder Diebstahl.",
"efficiencyGain": "Autonome Patrouillen des PUMA M20 reduzieren die Notwendigkeit manueller Inspektionen und Sicherheitskr\u00e4fte. Fr\u00fchzeitige Erkennung von Sch\u00e4den an Anlagen (z.B. Rotorbl\u00e4tter, Solarmodule) durch visuelle Inspektion und W\u00e4rmebildkameras. Schnelle Reaktion auf Sicherheitsvorf\u00e4lle durch sofortige Alarmierung bei unbefugtem Zutritt. Reduzierung der Kosten f\u00fcr die Instandhaltung durch proaktive Wartung basierend auf Inspektionsdaten.",
"riskArgument": "Verbesserung der Sicherheit von Anlagen und Personal durch kontinuierliche \u00dcberwachung. Reduzierung des Risikos von Ausf\u00e4llen durch fr\u00fchzeitige Erkennung von Sch\u00e4den. Abschreckung von Vandalismus und Diebstahl durch pr\u00e4ventive Patrouillen. Einhaltung von Umweltauflagen durch \u00dcberwachung von Anlagen und Erkennung von Umweltverschmutzung."
},
{
"industry": "Logistikzentren und gro\u00dfe Lagerh\u00e4user",
"costDriver": "Hohe Personalkosten f\u00fcr die manuelle Inspektion von Regalen und Lagerbest\u00e4nden. Inventurdifferenzen und Verluste durch Diebstahl oder Besch\u00e4digung. Ineffiziente Lagerverwaltung aufgrund fehlender Echtzeitdaten \u00fcber Lagerbest\u00e4nde. Arbeitsunf\u00e4lle durch manuelle Inspektionen in hohen Regalen.",
"efficiencyGain": "Autonome Inspektion von Regalen durch den PUMA M20 zur Erkennung von Sch\u00e4den und Gefahren. Automatisierte Lagerbestands\u00fcberwachung mit Hilfe von Kameras und Sensoren. Reduzierung von Inventurdifferenzen und Verlusten. Verbesserung der Lagerverwaltung durch Echtzeitdaten \u00fcber Lagerbest\u00e4nde und -orte. Reduzierung des Risikos von Arbeitsunf\u00e4llen.",
"riskArgument": "Verbesserung der Sicherheit von Mitarbeitern und Waren durch fr\u00fchzeitige Erkennung von Gefahren. Reduzierung des Risikos von Produktionsausf\u00e4llen durch besch\u00e4digte Regale oder fehlende Lagerbest\u00e4nde. Minimierung von Haftungsrisiken durch Einhaltung von Sicherheitsvorschriften. Schutz vor Diebstahl und Vandalismus durch \u00dcberwachung des Gel\u00e4ndes."
}
]
}

View File

@@ -0,0 +1,10 @@
PHASE 9: THE "FEATURE-TO-VALUE" TRANSLATOR
Input Features: ["All-Terrain-Mobilit\u00e4t: Bew\u00e4ltigt unebenes Gel\u00e4nde, Treppen und Steigungen bis zu 45\u00b0.", "Autonome Navigation: SLAM-basierte Navigation f\u00fcr autonome Missionen und R\u00fcckkehr zur Basis.", "360\u00b0-Umgebungserfassung: Duale LiDAR-Systeme und Weitwinkelkameras f\u00fcr umfassende Umgebungswahrnehmung.", "Nachtsichtf\u00e4higkeit: Optionale Nacht- und W\u00e4rmebildkameras f\u00fcr den Einsatz bei Dunkelheit.", "Robustheit und Wetterfestigkeit: IP66-Zertifizierung f\u00fcr Staub- und Wasserdichtigkeit, Betriebstemperaturbereich von -20\u00b0C bis 55\u00b0C.", "Hohe Rechenleistung: Duale Octa-Core-Prozessoren f\u00fcr anspruchsvolle Anwendungen.", "Flexible Nutzlastoptionen: Tr\u00e4gt Nutzlasten wie LiDAR, W\u00e4rmebildkameras, PTZ-Kameras und Gassensoren.", "Erweiterte Konnektivit\u00e4t und Integration: Gigabit-Ethernet, USB 3.0, API-Integrationen und Flottenmanagement.", "Lange Betriebsdauer: Bis zu 3 Stunden Betriebsdauer, erweiterbar durch Hot-Swap-Batterien.", "Hohe Traglast: 12 kg Nennlast, 50 kg maximale Tragf\u00e4higkeit."]
Strategy Pains: ["Unzureichende Sicherheits\u00fcberwachung gro\u00dfer, gef\u00e4hrlicher Areale; Hohe Kosten f\u00fcr manuelle Inspektionen; Risiko von Leckagen und Unf\u00e4llen.", "Schwer zug\u00e4ngliche Anlagen; Hohe Inspektionskosten; Anf\u00e4lligkeit f\u00fcr Vandalismus und Diebstahl; Notwendigkeit kontinuierlicher \u00dcberwachung.", "Hohe Sicherheitsanforderungen; Risiko von Diebstahl und unbefugtem Zutritt; Ineffiziente manuelle Patrouillen; Gro\u00dfe, un\u00fcbersichtliche Fl\u00e4chen."]
TASK: 1. Take a tech feature. 2. Ask "So what?". 3. Ask "So what?" again. 4. Formulate benefit without jargon. Create a table.
ACHTUNG: Die gesamte Ausgabe (JSON-Werte, Texte, Analysen) MUSS in DEUTSCH sein. Übersetze englische Input-Daten.
Output JSON format ONLY: {"techTranslations": [{"feature": "", "story": "", "headline": ""}]}

View File

@@ -0,0 +1,54 @@
{
"techTranslations": [
{
"feature": "All-Terrain-Mobilität: Bewältigt unebenes Gelände, Treppen und Steigungen bis zu 45°.",
"story": "Der Roboter kann sich in jedem Gelände bewegen. So what? Er erreicht auch schwer zugängliche Bereiche. So what? Das ermöglicht Inspektionen und Überwachungen, die sonst gefährlich oder unmöglich wären.",
"headline": "Sicherheit in jedem Gelände: Keine unzugänglichen Winkel mehr."
},
{
"feature": "Autonome Navigation: SLAM-basierte Navigation für autonome Missionen und Rückkehr zur Basis.",
"story": "Der Roboter navigiert selbstständig. So what? Er benötigt keine manuelle Steuerung für Patrouillen. So what? Das spart Personalkosten und ermöglicht eine kontinuierliche Überwachung ohne menschliche Ermüdung.",
"headline": "Autonome Patrouillen: Überwachung rund um die Uhr, ohne Personalaufwand."
},
{
"feature": "360°-Umgebungserfassung: Duale LiDAR-Systeme und Weitwinkelkameras für umfassende Umgebungswahrnehmung.",
"story": "Der Roboter erfasst seine Umgebung vollständig. So what? Er hat keine toten Winkel. So what? Das erhöht die Sicherheit durch lückenlose Überwachung und frühzeitige Erkennung von Gefahren.",
"headline": "Lückenlose Überwachung: Keine toten Winkel, maximale Sicherheit."
},
{
"feature": "Nachtsichtfähigkeit: Optionale Nacht- und Wärmebildkameras für den Einsatz bei Dunkelheit.",
"story": "Der Roboter kann auch im Dunkeln sehen. So what? Er ist auch nachts einsatzbereit. So what? Das ermöglicht eine durchgehende Überwachung, auch bei schlechten Lichtverhältnissen oder in der Nacht.",
"headline": "Sicherheit bei Nacht: Überwachung rund um die Uhr, auch im Dunkeln."
},
{
"feature": "Robustheit und Wetterfestigkeit: IP66-Zertifizierung für Staub- und Wasserdichtigkeit, Betriebstemperaturbereich von -20°C bis 55°C.",
"story": "Der Roboter ist robust und wetterfest. So what? Er kann auch unter extremen Bedingungen eingesetzt werden. So what? Das garantiert einen zuverlässigen Betrieb, unabhängig von den Umgebungsbedingungen.",
"headline": "Zuverlässigkeit unter allen Bedingungen: Robuster Schutz für einen störungsfreien Betrieb."
},
{
"feature": "Hohe Rechenleistung: Duale Octa-Core-Prozessoren für anspruchsvolle Anwendungen.",
"story": "Der Roboter hat eine hohe Rechenleistung. So what? Er kann komplexe Aufgaben schnell und effizient bearbeiten. So what? Das ermöglicht die Nutzung fortschrittlicher Algorithmen für die Bildverarbeitung und Entscheidungsfindung in Echtzeit.",
"headline": "Intelligente Analyse: Echtzeit-Verarbeitung für schnelle Entscheidungen."
},
{
"feature": "Flexible Nutzlastoptionen: Trägt Nutzlasten wie LiDAR, Wärmebildkameras, PTZ-Kameras und Gassensoren.",
"story": "Der Roboter kann verschiedene Sensoren und Kameras tragen. So what? Er kann für unterschiedliche Aufgaben konfiguriert werden. So what? Das ermöglicht eine flexible Anpassung an spezifische Überwachungs- und Inspektionsanforderungen.",
"headline": "Flexibel einsetzbar: Anpassbare Sensoren für jede Aufgabe."
},
{
"feature": "Erweiterte Konnektivität und Integration: Gigabit-Ethernet, USB 3.0, API-Integrationen und Flottenmanagement.",
"story": "Der Roboter bietet umfangreiche Konnektivitätsoptionen. So what? Er kann einfach in bestehende Systeme integriert werden. So what? Das ermöglicht eine nahtlose Integration in bestehende Sicherheitsinfrastrukturen und eine zentrale Steuerung mehrerer Roboter.",
"headline": "Nahtlose Integration: Einfache Einbindung in bestehende Systeme."
},
{
"feature": "Lange Betriebsdauer: Bis zu 3 Stunden Betriebsdauer, erweiterbar durch Hot-Swap-Batterien.",
"story": "Der Roboter hat eine lange Betriebsdauer. So what? Er kann lange Patrouillen durchführen. So what? Das minimiert Ausfallzeiten und ermöglicht eine kontinuierliche Überwachung ohne häufige Batteriewechsel.",
"headline": "Dauerhafte Überwachung: Lange Einsatzzeiten für maximale Sicherheit."
},
{
"feature": "Hohe Traglast: 12 kg Nennlast, 50 kg maximale Tragfähigkeit.",
"story": "Der Roboter kann schwere Lasten tragen. So what? Er kann auch schwere Sensoren und Geräte transportieren. So what? Das erweitert die Einsatzmöglichkeiten und ermöglicht den Transport von Ausrüstung zu schwer zugänglichen Orten.",
"headline": "Starke Leistung: Transport von schwerer Ausrüstung in unwegsamem Gelände."
}
]
}

View File

@@ -8,11 +8,9 @@ import { AlertTriangle, ArrowRight, ArrowLeft, Check, Database, Globe, Search, S
const TRANSLATIONS = {
en: {
// ... existing ...
historyTitle: 'Recent Sessions',
loadBtn: 'Load',
noSessions: 'No history found.',
// ... existing ...
phase1: 'Product & Constraints',
phase2: 'ICP Discovery',
phase3: 'Whale Hunting',
@@ -27,7 +25,7 @@ const TRANSLATIONS = {
inputPlaceholder: 'Paste raw technical data, brochure text, or product URL here...',
startBtn: 'Start Analysis',
backBtn: 'Back',
processing: 'Processing...',
processing: 'Processing...',
features: 'Detected Features',
constraints: 'Hard Constraints',
conflictTitle: 'Portfolio Conflict Detected',
@@ -55,7 +53,7 @@ const TRANSLATIONS = {
downloadAsset: 'Download Asset',
translateBtn: 'Translate Report to English',
downloadEn: 'Download English Report (.md)',
translating: 'Translating...',
translating: 'Translating...',
toPhase6: 'Proceed to Sales Enablement (Phase 6)',
toPhase7: 'Proceed to Landing Pages (Phase 7)',
toPhase8: 'Proceed to Business Case (Phase 8)',
@@ -74,19 +72,18 @@ const TRANSLATIONS = {
editImage: 'Edit & Iterate',
regenerateSketch: 'Regenerate with Sketch',
cancelEdit: 'Cancel Edit',
generating: 'Generating...',
generating: 'Generating...',
uploadImage: 'Product Reference Images',
uploadHint: 'Upload multiple photos (Front, Side, Detail) for better 3D understanding.',
imageUploaded: 'Reference Images',
canvasClear: 'Clear',
canvasMode: 'Sketch Mode',
// New placeholders
addName: 'Name...',
addName: 'Name...',
addRationale: 'Rationale...',
addTarget: 'Target criteria...',
addMethod: 'Method...',
addAccount: 'Account name...',
addRole: 'Job title...',
addRole: 'Job title...',
loading: [
"Initializing quantum analysis engines...",
"Parsing raw technical specifications...",
@@ -111,10 +108,10 @@ const TRANSLATIONS = {
phase9: 'Feature-to-Value Translator',
initTitle: 'Neue Produktsequenz initialisieren',
inputLabel: 'Produkt-URL oder Technische Spezifikation',
inputPlaceholder: 'Füge hier rohe technische Daten, Broschürentexte oder Produkt-URL ein...',
inputPlaceholder: 'Füge hier rohe technische Daten, Broschürentexte oder Produkt-URL ein...',
startBtn: 'Analyse starten',
backBtn: 'Zurück',
processing: 'Verarbeite...',
processing: 'Verarbeite...',
features: 'Erkannte Features',
constraints: 'Harte Constraints',
conflictTitle: 'Portfolio-Konflikt erkannt',
@@ -137,12 +134,12 @@ const TRANSLATIONS = {
genAssets: 'Generierter Strategie-Report & Assets',
complete: 'Prozess abgeschlossen. Strategie fixiert.',
restart: 'Neue Session starten',
addPlaceholder: 'Punkt hinzufügen...',
addPlaceholder: 'Punkt hinzufügen...',
download: 'Gesamtbericht herunterladen (.md)',
downloadAsset: 'Bild speichern',
translateBtn: 'Bericht ins Englische übersetzen',
downloadEn: 'Englischen Bericht herunterladen (.md)',
translating: 'Übersetze...',
translating: 'Übersetze...',
toPhase6: 'Weiter zu Sales Enablement (Phase 6)',
toPhase7: 'Weiter zu Landing Pages (Phase 7)',
toPhase8: 'Weiter zu Business Case (Phase 8)',
@@ -161,19 +158,18 @@ const TRANSLATIONS = {
editImage: 'Zeichnen & Iterieren',
regenerateSketch: 'Mit Skizze neu generieren',
cancelEdit: 'Abbrechen',
generating: 'Generiere...',
generating: 'Generiere...',
uploadImage: 'Produkt-Referenzbilder',
uploadHint: 'Lade mehrere Fotos hoch (Front, Seite, Detail), um das 3D-Verständnis zu verbessern.',
imageUploaded: 'Referenzbilder',
canvasClear: 'Leeren',
canvasMode: 'Zeichenmodus',
// New placeholders
addName: 'Name...',
addRationale: 'Begründung...',
addTarget: 'Zielkriterium...',
addMethod: 'Suchmethode...',
addAccount: 'Firmenname...',
addRole: 'Jobtitel...',
addName: 'Name...',
addRationale: 'Begründung...',
addTarget: 'Zielkriterium...',
addMethod: 'Suchmethode...',
addAccount: 'Firmenname...',
addRole: 'Jobtitel...',
loading: [
"Initialisiere Quanten-Analyse-Engines...",
"Analysiere technische Spezifikationen...",
@@ -191,7 +187,7 @@ const App: React.FC = () => {
isLoading: false,
history: [],
productInput: '',
productImages: [], // Now an array
productImages: [],
language: 'light', // temporary init, fix in useEffect
theme: 'light' // Default to light
});
@@ -328,21 +324,64 @@ const App: React.FC = () => {
const data = await Gemini.loadSession(projectId);
const phases = data.phases || {};
console.log("Raw Loaded Phases from DB:", phases);
// Helper to safely parse potentially MULTIPLE times stringified JSON
const parsePhaseData = (phaseData: any) => {
if (!phaseData) return undefined;
let parsed = phaseData;
try {
// Versuch 1
if (typeof parsed === 'string') parsed = JSON.parse(parsed);
// Versuch 2 (falls double encoded)
if (typeof parsed === 'string') parsed = JSON.parse(parsed);
// Versuch 3 (extrem)
if (typeof parsed === 'string') parsed = JSON.parse(parsed);
} catch (e) {
console.warn("Failed to parse phase data", e, phaseData);
return null;
}
return parsed;
};
const p1 = parsePhaseData(phases.phase1_result);
const p2 = parsePhaseData(phases.phase2_result);
const p3 = parsePhaseData(phases.phase3_result);
const p4 = parsePhaseData(phases.phase4_result);
const p5 = parsePhaseData(phases.phase5_result);
const p6 = parsePhaseData(phases.phase6_result);
const p7 = parsePhaseData(phases.phase7_result);
const p8 = parsePhaseData(phases.phase8_result);
const p9 = parsePhaseData(phases.phase9_result);
console.log("Parsed Phase 2:", p2); // Debug
// Determine the highest available phase to jump to
let targetPhase = Phase.ProductAnalysis;
if (p9) targetPhase = Phase.TechTranslator;
else if (p8) targetPhase = Phase.BusinessCase;
else if (p7) targetPhase = Phase.LandingPage;
else if (p6) targetPhase = Phase.SalesEnablement;
else if (p5) targetPhase = Phase.AssetGeneration;
else if (p4) targetPhase = Phase.Strategy;
else if (p3) targetPhase = Phase.WhaleHunting;
else if (p2) targetPhase = Phase.ICPDiscovery;
setState(s => ({
...s,
isLoading: false,
currentPhase: Phase.ProductAnalysis,
currentPhase: targetPhase,
projectId: projectId,
productInput: phases.phase1_result?.rawAnalysis || "",
phase1Result: phases.phase1_result,
phase2Result: phases.phase2_result,
phase3Result: phases.phase3_result,
phase4Result: phases.phase4_result,
phase5Result: phases.phase5_result,
phase6Result: phases.phase6_result,
phase7Result: phases.phase7_result,
phase8Result: phases.phase8_result,
phase9Result: phases.phase9_result,
productInput: p1?.rawAnalysis || "",
phase1Result: p1,
phase2Result: p2,
phase3Result: p3,
phase4Result: p4,
phase5Result: p5,
phase6Result: p6,
phase7Result: p7,
phase8Result: p8,
phase9Result: p9,
}));
} catch (e: any) {
setError("Failed to load session: " + e.message);
@@ -380,6 +419,8 @@ const App: React.FC = () => {
reader.readAsText(file);
};
// --- Asset Generation Helpers ---
const generateFullReportMarkdown = (): string => {
if (!state.phase5Result || !state.phase5Result.report) return "";
@@ -397,7 +438,11 @@ const App: React.FC = () => {
state.phase6Result.visualPrompts.forEach(prompt => {
fullReport += `### ${prompt.title}\n`;
fullReport += `*Context: ${prompt.context}*\n\n`;
fullReport += `\`\`\`\n${prompt.prompt}\n\`\`\`\n\n`;
fullReport += `\
\
${prompt.prompt}\n\
\
`;
});
}
@@ -467,7 +512,7 @@ const App: React.FC = () => {
const element = document.createElement("a");
element.href = dataUrl;
element.download = `roboplanet-visual-${index + 1}.png`;
document.body.appendChild(element);
document.body.appendChild(element);
element.click();
document.body.removeChild(element);
};
@@ -480,251 +525,170 @@ const App: React.FC = () => {
// --- Image Generation Handlers ---
const handleGenerateImage = async (prompt: string, index: number, overrideReference?: string) => {
setGeneratingImages(prev => ({ ...prev, [index]: true }));
try {
// If sketching, use only the sketch as the strong reference
// If not sketching, use the array of uploaded product images
const refImages = overrideReference ? [overrideReference] : state.productImages;
const imageUrl = await Gemini.generateConceptImage(prompt, refImages);
setGeneratedImages(prev => ({ ...prev, [index]: imageUrl }));
// If we were editing, close edit mode
if (editingIndex === index) {
setEditingIndex(null);
}
} catch (e: any) {
console.error("Failed to generate image", e);
setError("Image generation failed: " + e.message);
} finally {
setGeneratingImages(prev => ({ ...prev, [index]: false }));
}
};
const handleImageUpload = (event: React.ChangeEvent<HTMLInputElement>) => {
const files = event.target.files;
if (files && files.length > 0) {
Array.from(files).forEach((file: File) => {
const reader = new FileReader();
reader.onloadend = () => {
if (reader.result) {
setState(s => ({ ...s, productImages: [...s.productImages, reader.result as string] }));
}
};
reader.readAsDataURL(file);
});
}
};
const removeUploadedImage = (index: number) => {
setState(s => ({
...s,
productImages: s.productImages.filter((_, i) => i !== index)
}));
};
// --- Drawing / Editing Handlers ---
const startDrawing = (e: React.MouseEvent<HTMLCanvasElement> | React.TouchEvent<HTMLCanvasElement>) => {
setIsDrawing(true);
const canvas = canvasRef.current;
if (!canvas) return;
const ctx = canvas.getContext('2d');
if (!ctx) return;
const rect = canvas.getBoundingClientRect();
const scaleX = canvas.width / rect.width;
const scaleY = canvas.height / rect.height;
const x = (('touches' in e ? e.touches[0].clientX : e.clientX) - rect.left) * scaleX;
const y = (('touches' in e ? e.touches[0].clientY : e.clientY) - rect.top) * scaleY;
ctx.beginPath();
ctx.moveTo(x, y);
};
const draw = (e: React.MouseEvent<HTMLCanvasElement> | React.TouchEvent<HTMLCanvasElement>) => {
if (!isDrawing) return;
const canvas = canvasRef.current;
if (!canvas) return;
const ctx = canvas.getContext('2d');
if (!ctx) return;
const rect = canvas.getBoundingClientRect();
const scaleX = canvas.width / rect.width;
const scaleY = canvas.height / rect.height;
const x = (('touches' in e ? e.touches[0].clientX : e.clientX) - rect.left) * scaleX;
const y = (('touches' in e ? e.touches[0].clientY : e.clientY) - rect.top) * scaleY;
ctx.lineTo(x, y);
ctx.strokeStyle = brushColor;
ctx.lineWidth = brushSize;
ctx.lineCap = 'round';
ctx.stroke();
};
const stopDrawing = () => {
setIsDrawing(false);
};
const clearCanvas = () => {
const canvas = canvasRef.current;
if (canvas && editingIndex !== null) {
const ctx = canvas.getContext('2d');
if (ctx) {
const img = new Image();
img.onload = () => {
ctx.clearRect(0,0, canvas.width, canvas.height);
ctx.drawImage(img, 0, 0);
}
img.src = generatedImages[editingIndex];
const handleGenerateImage = async (prompt: string, index: number, overrideReference?: string) => {
setGeneratingImages(prev => ({ ...prev, [index]: true }));
try {
// If sketching, use only the sketch as the strong reference
// If not sketching, use the array of uploaded product images
const refImages = overrideReference ? [overrideReference] : state.productImages;
const imageUrl = await Gemini.generateConceptImage(prompt, refImages, state.projectId);
setGeneratedImages(prev => ({ ...prev, [index]: imageUrl }));
// If we were editing, close edit mode
if (editingIndex === index) {
setEditingIndex(null);
}
} catch (e: any) {
console.error("Failed to generate image", e);
setError("Image generation failed: " + e.message);
} finally {
setGeneratingImages(prev => ({ ...prev, [index]: false }));
}
};
const handleRegenerateWithSketch = (index: number, prompt: string) => {
const canvas = canvasRef.current;
if (canvas) {
const sketchData = canvas.toDataURL('image/png');
handleGenerateImage(prompt, index, sketchData);
};
// ... (Upload handlers remain same) ...
// --- Handlers ---
const handlePhase1Submit = async () => {
if (!state.productInput.trim()) return;
setState(s => ({ ...s, isLoading: true }));
setError(null);
try {
const result = await Gemini.analyzeProduct(state.productInput, language);
setState(s => ({ ...s, currentPhase: Phase.ProductAnalysis, phase1Result: result, isLoading: false, projectId: result.projectId }));
} catch (e: any) {
setError(e.message || "Analysis failed");
setState(s => ({ ...s, isLoading: false }));
}
};
// --- Handlers ---
const handlePhase1Submit = async () => {
if (!state.productInput.trim()) return;
setState(s => ({ ...s, isLoading: true }));
setError(null);
try {
const result = await Gemini.analyzeProduct(state.productInput, language);
setState(s => ({ ...s, currentPhase: Phase.ProductAnalysis, phase1Result: result, isLoading: false, projectId: result.projectId })); // Save projectId!
} catch (e: any) {
setError(e.message || "Analysis failed");
setState(s => ({ ...s, isLoading: false }));
}
};
const handlePhase2Submit = async () => {
if (!state.phase1Result) return;
setState(s => ({ ...s, isLoading: true }));
try {
const result = await Gemini.discoverICPs(state.phase1Result, language);
setState(s => ({ ...s, currentPhase: Phase.ICPDiscovery, phase2Result: result, isLoading: false }));
} catch (e: any) {
setError(e.message);
setState(s => ({ ...s, isLoading: false }));
}
};
const handlePhase3Submit = async () => {
if (!state.phase2Result) return;
setState(s => ({ ...s, isLoading: true }));
try {
const result = await Gemini.huntWhales(state.phase2Result, language);
setState(s => ({ ...s, currentPhase: Phase.WhaleHunting, phase3Result: result, isLoading: false }));
} catch (e: any) {
setError(e.message);
setState(s => ({ ...s, isLoading: false }));
}
};
const handlePhase4Submit = async () => {
if (!state.phase3Result || !state.phase1Result) return;
setState(s => ({ ...s, isLoading: true }));
try {
const result = await Gemini.developStrategy(state.phase3Result, state.phase1Result, language);
setState(s => ({ ...s, currentPhase: Phase.Strategy, phase4Result: result, isLoading: false }));
} catch (e: any) {
setError(e.message);
setState(s => ({ ...s, isLoading: false }));
}
};
const handlePhase5Submit = async () => {
// Requires all previous data for the final report
if (!state.phase4Result || !state.phase3Result || !state.phase2Result || !state.phase1Result) return;
setState(s => ({ ...s, isLoading: true }));
try {
const result = await Gemini.generateAssets(
state.phase4Result,
state.phase3Result,
state.phase2Result,
state.phase1Result,
language
);
setState(s => ({ ...s, currentPhase: Phase.AssetGeneration, phase5Result: result, isLoading: false }));
} catch (e: any) {
setError(e.message);
setState(s => ({ ...s, isLoading: false }));
}
};
const handlePhase6Submit = async () => {
if (!state.phase4Result || !state.phase3Result || !state.phase1Result) return;
};
const handlePhase2Submit = async () => {
if (!state.phase1Result || !state.projectId) return;
setState(s => ({ ...s, isLoading: true }));
try {
const result = await Gemini.generateSalesEnablement(
state.phase4Result,
state.phase3Result,
state.phase1Result,
language
);
setState(s => ({ ...s, currentPhase: Phase.SalesEnablement, phase6Result: result, isLoading: false }));
const result = await Gemini.discoverICPs(state.phase1Result, language, state.projectId);
setState(s => ({ ...s, currentPhase: Phase.ICPDiscovery, phase2Result: result, isLoading: false }));
} catch (e: any) {
setError(e.message);
setState(s => ({ ...s, isLoading: false }));
setError(e.message);
setState(s => ({ ...s, isLoading: false }));
}
};
const handlePhase7Submit = async () => {
if (!state.phase4Result || !state.phase2Result) return;
};
const handlePhase3Submit = async () => {
if (!state.phase2Result || !state.projectId) return;
setState(s => ({ ...s, isLoading: true }));
try {
const result = await Gemini.generateLandingPageCopy(
state.phase4Result,
state.phase2Result,
language
);
setState(s => ({ ...s, currentPhase: Phase.LandingPage, phase7Result: result, isLoading: false }));
const result = await Gemini.huntWhales(state.phase2Result, language, state.projectId);
setState(s => ({ ...s, currentPhase: Phase.WhaleHunting, phase3Result: result, isLoading: false }));
} catch (e: any) {
setError(e.message);
setState(s => ({ ...s, isLoading: false }));
setError(e.message);
setState(s => ({ ...s, isLoading: false }));
}
};
const handlePhase8Submit = async () => {
if (!state.phase2Result || !state.phase1Result) return;
};
const handlePhase4Submit = async () => {
if (!state.phase3Result || !state.phase1Result || !state.projectId) return;
setState(s => ({ ...s, isLoading: true }));
try {
const result = await Gemini.buildBusinessCase(
state.phase2Result,
state.phase1Result,
language
);
setState(s => ({ ...s, currentPhase: Phase.BusinessCase, phase8Result: result, isLoading: false }));
const result = await Gemini.developStrategy(state.phase3Result, state.phase1Result, language, state.projectId);
setState(s => ({ ...s, currentPhase: Phase.Strategy, phase4Result: result, isLoading: false }));
} catch (e: any) {
setError(e.message);
setState(s => ({ ...s, isLoading: false }));
setError(e.message);
setState(s => ({ ...s, isLoading: false }));
}
};
const handlePhase9Submit = async () => {
if (!state.phase1Result || !state.phase4Result) return;
};
const handlePhase5Submit = async () => {
// Requires all previous data for the final report
if (!state.phase4Result || !state.phase3Result || !state.phase2Result || !state.phase1Result || !state.projectId) return;
setState(s => ({ ...s, isLoading: true }));
try {
const result = await Gemini.translateTech(
state.phase1Result,
state.phase4Result,
language
);
setState(s => ({ ...s, currentPhase: Phase.TechTranslator, phase9Result: result, isLoading: false }));
const result = await Gemini.generateAssets(
state.phase4Result,
state.phase3Result,
state.phase2Result,
state.phase1Result,
language,
state.projectId
);
setState(s => ({ ...s, currentPhase: Phase.AssetGeneration, phase5Result: result, isLoading: false }));
} catch (e: any) {
setError(e.message);
setState(s => ({ ...s, isLoading: false }));
setError(e.message);
setState(s => ({ ...s, isLoading: false }));
}
};
};
const handlePhase6Submit = async () => {
if (!state.phase4Result || !state.phase3Result || !state.phase1Result || !state.projectId) return;
setState(s => ({ ...s, isLoading: true }));
try {
const result = await Gemini.generateSalesEnablement(
state.phase4Result,
state.phase3Result,
state.phase1Result,
language,
state.projectId
);
setState(s => ({ ...s, currentPhase: Phase.SalesEnablement, phase6Result: result, isLoading: false }));
} catch (e: any) {
setError(e.message);
setState(s => ({ ...s, isLoading: false }));
}
};
const handlePhase7Submit = async () => {
if (!state.phase4Result || !state.phase2Result || !state.projectId) return;
setState(s => ({ ...s, isLoading: true }));
try {
const result = await Gemini.generateLandingPageCopy(
state.phase4Result,
state.phase2Result,
language,
state.projectId
);
setState(s => ({ ...s, currentPhase: Phase.LandingPage, phase7Result: result, isLoading: false }));
} catch (e: any) {
setError(e.message);
setState(s => ({ ...s, isLoading: false }));
}
};
const handlePhase8Submit = async () => {
if (!state.phase2Result || !state.phase1Result || !state.projectId) return;
setState(s => ({ ...s, isLoading: true }));
try {
const result = await Gemini.buildBusinessCase(
state.phase2Result,
state.phase1Result,
language,
state.projectId
);
setState(s => ({ ...s, currentPhase: Phase.BusinessCase, phase8Result: result, isLoading: false }));
} catch (e: any) {
setError(e.message);
setState(s => ({ ...s, isLoading: false }));
}
};
const handlePhase9Submit = async () => {
if (!state.phase1Result || !state.phase4Result || !state.projectId) return;
setState(s => ({ ...s, isLoading: true }));
try {
const result = await Gemini.translateTech(
state.phase1Result,
state.phase4Result,
language,
state.projectId
);
setState(s => ({ ...s, currentPhase: Phase.TechTranslator, phase9Result: result, isLoading: false }));
} catch (e: any) {
setError(e.message);
setState(s => ({ ...s, isLoading: false }));
}
};
// --- List Mutation Handlers (Phase 1) ---
const addFeature = () => {
@@ -960,7 +924,7 @@ const App: React.FC = () => {
<label className="flex flex-col items-center justify-center aspect-square rounded-lg border-2 border-dashed border-slate-300 dark:border-robo-600 hover:border-blue-400 dark:hover:border-robo-400 cursor-pointer transition-colors bg-slate-50 dark:bg-robo-900/30">
<input
type="file"
accept="image/*"
accept="image/*"
multiple
onChange={handleImageUpload}
className="hidden"
@@ -1196,7 +1160,9 @@ const App: React.FC = () => {
{state.isLoading ? (
<span className="flex items-center gap-2"><Loader2 className="animate-spin"/> {labels.processing}</span>
) : (
<> {labels.confirmICP} <ArrowRight size={18} /></>
<>
{labels.confirmICP} <ArrowRight size={18} />
</>
)}
</button>
</div>
@@ -2091,4 +2057,4 @@ const App: React.FC = () => {
);
};
export default App;
export default App;

View File

@@ -31,18 +31,18 @@ export const analyzeProduct = async (productInput: string, lang: Language): Prom
};
// --- Phase 2: ICP Discovery ---
export const discoverICPs = async (phase1Data: Phase1Data, lang: Language): Promise<Phase2Data> => {
return callApi<Phase2Data>('run', 'phase2', { phase1Data, lang });
export const discoverICPs = async (phase1Data: Phase1Data, lang: Language, projectId: string): Promise<Phase2Data> => {
return callApi<Phase2Data>('run', 'phase2', { phase1Data, lang, projectId });
};
// --- Phase 3: Whale Hunting ---
export const huntWhales = async (phase2Data: Phase2Data, lang: Language): Promise<Phase3Data> => {
return callApi<Phase3Data>('run', 'phase3', { phase2Data, lang });
export const huntWhales = async (phase2Data: Phase2Data, lang: Language, projectId: string): Promise<Phase3Data> => {
return callApi<Phase3Data>('run', 'phase3', { phase2Data, lang, projectId });
};
// --- Phase 4: Strategy ---
export const developStrategy = async (phase3Data: Phase3Data, phase1Data: Phase1Data, lang: Language): Promise<Phase4Data> => {
return callApi<Phase4Data>('run', 'phase4', { phase3Data, phase1Data, lang });
export const developStrategy = async (phase3Data: Phase3Data, phase1Data: Phase1Data, lang: Language, projectId: string): Promise<Phase4Data> => {
return callApi<Phase4Data>('run', 'phase4', { phase3Data, phase1Data, lang, projectId });
};
// --- Phase 5: Assets & Report ---
@@ -51,9 +51,10 @@ export const generateAssets = async (
phase3Data: Phase3Data,
phase2Data: Phase2Data,
phase1Data: Phase1Data,
lang: Language
lang: Language,
projectId: string
): Promise<{ report: string }> => {
return callApi<{ report: string }>('run', 'phase5', { phase4Data, phase3Data, phase2Data, phase1Data, lang });
return callApi<{ report: string }>('run', 'phase5', { phase4Data, phase3Data, phase2Data, phase1Data, lang, projectId });
};
// --- Phase 6: Sales Enablement & Visuals ---
@@ -61,45 +62,48 @@ export const generateSalesEnablement = async (
phase4Data: Phase4Data,
phase3Data: Phase3Data,
phase1Data: Phase1Data,
lang: Language
lang: Language,
projectId: string
): Promise<Phase6Data> => {
return callApi<Phase6Data>('run', 'phase6', { phase4Data, phase3Data, phase1Data, lang });
return callApi<Phase6Data>('run', 'phase6', { phase4Data, phase3Data, phase1Data, lang, projectId });
};
// --- Phase 7: Vertical Landing Page Copy ---
export const generateLandingPageCopy = async (
phase4Data: Phase4Data,
phase2Data: Phase2Data,
lang: Language
lang: Language,
projectId: string
): Promise<Phase7Data> => {
return callApi<Phase7Data>('run', 'phase7', { phase4Data, phase2Data, lang });
return callApi<Phase7Data>('run', 'phase7', { phase4Data, phase2Data, lang, projectId });
};
// --- Phase 8: Business Case Builder ---
export const buildBusinessCase = async (
phase2Data: Phase2Data,
phase1Data: Phase1Data,
lang: Language
lang: Language,
projectId: string
): Promise<Phase8Data> => {
return callApi<Phase8Data>('run', 'phase8', { phase2Data, phase1Data, lang });
return callApi<Phase8Data>('run', 'phase8', { phase2Data, phase1Data, lang, projectId });
};
// --- Phase 9: Feature-to-Value Translator ---
export const translateTech = async (
phase1Data: Phase1Data,
phase4Data: Phase4Data,
lang: Language
lang: Language,
projectId: string
): Promise<Phase9Data> => {
return callApi<Phase9Data>('run', 'phase9', { phase1Data, phase4Data, lang });
return callApi<Phase9Data>('run', 'phase9', { phase1Data, phase4Data, lang, projectId });
};
export const translateReportToEnglish = async (reportMarkdown: string): Promise<{ report: string }> => {
return callApi<{ report: string }>('run', 'translate', { reportMarkdown });
};
export const generateConceptImage = async (prompt: string, referenceImagesBase64?: string[]): Promise<string> => {
const result = await callApi<{ imageBase64: string }>('run', 'image', { prompt, referenceImagesBase64 });
return result.imageBase64;
export const generateConceptImage = async (prompt: string, referenceImagesBase64?: string[], projectId?: string): Promise<string> => {
return (await callApi<{ imageBase64: string }>('run', 'image', { prompt, referenceImagesBase64, projectId })).imageBase64;
};
export const listSessions = async (): Promise<{ projects: ProjectHistoryItem[] }> => {

View File

@@ -1,4 +1,3 @@
import argparse
import base64
import json
@@ -203,7 +202,9 @@ def phase1(payload):
try:
data = json.loads(response)
db_manager.save_gtm_result(project_id, 'phase1_result', json.dumps(data))
# FIX: Save raw dictionary, not stringified JSON, to avoid double encoding
db_manager.save_gtm_result(project_id, 'phase1_result', data)
# WICHTIG: ID zurückgeben, damit Frontend sie speichert
data['projectId'] = project_id
@@ -213,7 +214,7 @@ def phase1(payload):
error_response = {
"error": "Die Antwort des KI-Modells war kein gültiges JSON. Das passiert manchmal bei hoher Auslastung. Bitte versuchen Sie es in Kürze erneut.",
"details": response,
"projectId": project_id # Auch bei Fehler ID zurückgeben? Besser nicht, da noch nichts gespeichert.
"projectId": project_id
}
return error_response
@@ -239,7 +240,9 @@ def phase2(payload):
response = call_gemini_flash(prompt, system_instruction=sys_instr, json_mode=True)
log_and_save(project_id, "phase2", "response", response)
data = json.loads(response)
db_manager.save_gtm_result(project_id, 'phase2_result', json.dumps(data))
# FIX: Save raw dictionary
db_manager.save_gtm_result(project_id, 'phase2_result', data)
return data
def phase3(payload):
@@ -263,7 +266,9 @@ def phase3(payload):
response = call_gemini_flash(prompt, system_instruction=sys_instr, json_mode=True)
log_and_save(project_id, "phase3", "response", response)
data = json.loads(response)
db_manager.save_gtm_result(project_id, 'phase3_result', json.dumps(data))
# FIX: Save raw dictionary
db_manager.save_gtm_result(project_id, 'phase3_result', data)
return data
def phase4(payload):
@@ -294,7 +299,9 @@ def phase4(payload):
response = call_gemini_flash(prompt, system_instruction=sys_instr, json_mode=True)
log_and_save(project_id, "phase4", "response", response)
data = json.loads(response)
db_manager.save_gtm_result(project_id, 'phase4_result', json.dumps(data))
# FIX: Save raw dictionary
db_manager.save_gtm_result(project_id, 'phase4_result', data)
return data
def phase5(payload):
@@ -365,7 +372,9 @@ def phase5(payload):
report = report.strip()
log_and_save(project_id, "phase5", "response", report)
db_manager.save_gtm_result(project_id, 'phase5_result', json.dumps({"report": report}))
# FIX: Save raw dictionary (no double JSON stringification)
db_manager.save_gtm_result(project_id, 'phase5_result', {"report": report})
return {"report": report}
def phase6(payload):
@@ -391,7 +400,9 @@ def phase6(payload):
response = call_gemini_flash(prompt, system_instruction=sys_instr, json_mode=True)
log_and_save(project_id, "phase6", "response", response)
data = json.loads(response)
db_manager.save_gtm_result(project_id, 'phase6_result', json.dumps(data))
# FIX: Save raw dictionary
db_manager.save_gtm_result(project_id, 'phase6_result', data)
return data
def phase7(payload):
@@ -417,7 +428,9 @@ def phase7(payload):
response = call_gemini_flash(prompt, system_instruction=sys_instr, json_mode=True)
log_and_save(project_id, "phase7", "response", response)
data = json.loads(response)
db_manager.save_gtm_result(project_id, 'phase7_result', json.dumps(data))
# FIX: Save raw dictionary
db_manager.save_gtm_result(project_id, 'phase7_result', data)
return data
def phase8(payload):
@@ -442,7 +455,9 @@ def phase8(payload):
response = call_gemini_flash(prompt, system_instruction=sys_instr, json_mode=True)
log_and_save(project_id, "phase8", "response", response)
data = json.loads(response)
db_manager.save_gtm_result(project_id, 'phase8_result', json.dumps(data))
# FIX: Save raw dictionary
db_manager.save_gtm_result(project_id, 'phase8_result', data)
return data
def phase9(payload):
@@ -468,7 +483,9 @@ def phase9(payload):
response = call_gemini_flash(prompt, system_instruction=sys_instr, json_mode=True)
log_and_save(project_id, "phase9", "response", response)
data = json.loads(response)
db_manager.save_gtm_result(project_id, 'phase9_result', json.dumps(data))
# FIX: Save raw dictionary
db_manager.save_gtm_result(project_id, 'phase9_result', data)
return data
def translate(payload):
@@ -571,4 +588,4 @@ def main():
sys.exit(1)
if __name__ == "__main__":
main()
main()

Binary file not shown.