🤖 Website-Generierungs-Pipeline — Programmablaufplan

5-Stage Autonomous Workflow · Detailliert mit Agents · 2026-03-28

Prozess-Schritt
Entscheidung
🔄 Loop
✅ Live
❌ Fehler
Kontrollen:

[S1] DISCOVERY — Unternehmen finden & Konzept erstellen
[S1a]

🚀 Discovery Agent startet täglich

🤖 Agent: Akquise (@MiniconAquiseBot) | Cron: täglich 09:00 | Prompt
discoverCompanies() → Suche lädt Radius aus API
[S1b]

🔍 Suche Unternehmen bis 10 neue gefunden

🤖 Agent: Akquise (@MiniconAquiseBot)
searchCompanies(currentRadiusKm) → WHILE newCount < 10 AND openTickets < 100
⚠️ Bedingungen:
• newCount < 10 (noch nicht 10 neue Unternehmen gefunden)
• openTickets < 100 (weniger als 100 offene Tickets in DAHN Jira)
7 API Quellen:
Google Maps, Nominatim OSM, Lieferando, TripAdvisor, Facebook, LinkedIn, Instagram
📍 Auto-Radius-Expansion — PAP
[S1b-1]
Suche im aktuellen Radius
searchCompanies(currentRadiusKm)
[S1b-2]
Zähle neue Unternehmen
newCount = count(new)
[S1b-3] Bedingungen erfüllt?
newCount >= 10 AND openTickets < 100
✅ JA
[S1b-3a]
FERTIG
Weiter zu [S1c]
❌ NEIN
[S1b-3b]
Radius +50km
currentRadiusKm += 50
[S1b-4] ↻ LOOP ZURÜCK zu [S1b-1]
Nächste Suche mit Radius +50km
Sequenz:
Radius 0km → +50km → +100km → +150km ...
Läuft bis 10 neue Unternehmen gefunden
[S1c]

📋 Lege 10 Tickets in DAHN an

🤖 Agent: Akquise (@MiniconAquiseBot)
📋 createTickets(companies[10]) → DAHN project
10x Tickets erstellen:
• Label: discovery-new
• Label: siteid-{company-slug} (z.B. siteid-db-fashion)
• Type: Story (Website-Projekt)
• Fields: searchRadiusKm, dataQuality, discoverySource

⚠️ siteId generieren: Firmenname in Kleinbuchstaben, Leerzeichen→Bindestriche, Sonderzeichen entfernen
🔄 Label-basierter Restart:
Label entfernen = Prozess neu starten:
• Remove data-collected → Restart [S1d] Datensammlung
• Remove potential-{level} → Restart [S1e] Potenzial-Analyse
• Remove concept-done → Restart [S1f] Webseiten-Konzept
• Remove creative-reviewed → Restart [S1g] Creative Design Review

→ Agent erkennt fehlende Label und startet entsprechenden Schritt neu (retryCount wird zurückgesetzt)
[S1d]

🔎 Sammle Informationen & Assets

🤖 Agent: Recherche (@MiniconRecherche) + FireCrawl | Prompt
collectData(ticketIds[10]) → 7 Quellen + Assets
📊 Daten-Quellen:
Google Maps → Bewertungen, Öffnungszeiten, Fotos, Reviews
Nominatim/OSM → Genaue Adresse, Koordinaten, Ortdaten
Lieferando → Menü, Bewertungen, Öffnungszeiten, Kategorien
TripAdvisor → Bewertungen, Kommentare, Rankings
Facebook → Über-Sektion, Fotos, Posts, Follower, Kontakte
LinkedIn → Unternehmensinfo, Team, Beschreibung
Instagram → Fotos, Stories, Hashtags, Engagement
🖼️ Assets (WICHTIG):
Logo: Hochauflösung (PNG/SVG transparent, min 512px)
Hero-Bilder: MIN 1920x1080px, JPG/PNG, optimiert
Galerie: Produkte, Interior, Team, Events (je 3-5 Bilder)
Qualität: Nur hochwertige, unscharfe/Logos verwerfen
Speicher: Cloudflare R2 mit Metadaten (source, date, quality-score)
📋 attachAssets(assetList) → DAHN tickets (Logo + Top 2 Hero)
📋 Bestandsanalyse (in DAHN Description):
Google Maps: [link] → Bewertungen, Öffnungszeiten, Fotos
Facebook: [link] → Beiträge, Menükarte, Öffnungszeiten, Kontakt
Website: [link] → Aktuelle Struktur, Design, Inhalte
TripAdvisor: [link] → Bewertungen, Ranking, Kommentare
Lieferando: [link] → Menü, Preise, Kategorien (falls vorhanden)
LinkedIn: [link] → Team, Firmengröße, Branche
Instagram: [link] → Fotos, Engagement, Content-Style

→ Mit allen Links & spezifischen Findings je Quelle dokumentieren
[S1d-Check] Daten vollständig gesammelt?
CHECK: data-collected Label existiert (MAX 3 Retries)
✅ JA
[S1d-1a]
WEITER
zu [S1e] Analyse
🔄 NEIN
retryCount < 3
[S1d-1b]
RETRY [S1d]
Versuch 1-3
(retryCount++)
❌ FEHLER
retryCount >= 3
[S1d-1c]
ESKALATION
Ticket flaggen + Alert
[S1e]

📊 Analysiere Potential

🤖 Agent: Analyse (@MiniconAnalyseBot) | Cron: alle 6h | Prompt
analyzePotential(companyData) → Score, Level, Roadmap
🎯 Markt-Analyse:
• Branche & Zielgruppe (Demografie, Verhalten, Online-Präsenz)
• Aktuelle Online-Präsenz (Website-Qualität, Social-Media-Aktivität, Google-Bewertungen)
• Konkurrenz-Vergleich (TOP 3 Konkurrenten analysieren, Features, Design, Content)
• Markt-Trend (Wachstum, Saisonalität, Online-Verhalten in der Branche)
💡 Website-Potential:
• Aktuelle Website: Bestehend (welcher Typ) | Keine (muss erstellt werden)
• ROI-Potential: Conversion-Möglichkeiten, Online-Sales, Buchungen, Leads
• Content-Umfang: Wenig (nur Basics) | Mittel (Struktur vorhanden) | Reich (viel Content)
• Modernisierungs-Bedarf: Design, Funktionalität, SEO, Performance, Mobile
🏆 Potenzial-Bewertung:
NIEDRIG: Kleine lokale Unternehmen, wenig Online-Aktivität, geringer ROI
MITTEL: Etablierte Unternehmen mit guter Presence, moderates Wachstumspotenzial
HOCH: Starke Nachfrage, kompetitiver Markt, großer Unterschied zu Konkurrenz
SEHR HOCH: Hochprofitable Branche, Digital-Natives, hohes Wachstumspotenzial

→ Label: potential-niedrig | potential-mittel | potential-hoch | potential-sehrhoch
[S1e-Check] Potential analysiert?
CHECK: potential-{level} Label existiert
✅ JA
[S1e-1a]
WEITER
zu [S1e-Decision]
🔄 NEIN
retryCount < 3
[S1e-1b]
RETRY [S1e]
Versuch 1-3
(retryCount++)
❌ FEHLER
retryCount >= 3
[S1e-1c]
ESKALATION
Ticket flaggen + Alert
[S1e-Decision] Concept vorhanden?
IF concept-done Label exists
❌ NEIN
[S1e-3a]
START [S1f]
Erstelle Konzept
✅ JA
[S1e-3b]
SKIP [S1f]
Weiter zu [S1g]
[S1f]

🎨 Erstelle Webseiten-Konzept

🤖 Agent: Konzept (@MiniconKonzeptBot) | Cron: alle 6h | Prompt
createConcept(analysis, assets, bestandsanalyse) → Konzept-Dokument
📋 Webseiten-Konzept beinhaltet:

1. Zielgruppe & Messaging:
• Zielgruppe definieren (Demografie, Bedürfnisse)
• Haupt-Botschaft & Value Proposition
• USPs vs. Konkurrenz

2. Struktur & Navigation:
• Site-Map (Hierarchie der Seiten)
• Haupt-Navigations-Pfade
• Mobile vs. Desktop Layout-Unterschiede

3. Content-Planung:
• Home: Hero-Section, Über-Bereich, USPs, CTA
• Über uns: Team, Geschichte, Qualitäten, Werte
• Dienstleistungen/Produkte: Kategorien, Beschreibungen, Icons
• Galerie: Fotos (Interior, Produkte, Team, Events)
• Kontakt: Öffnungszeiten, Karte, Formular, Social Media

4. Design-Elemente:
• Farbschema (primär, sekundär, Akzente) aus Brand-Analyse
• Typografie (Schriften für Headlines, Body, Navigation)
• Button-Stile, Icons, Grafik-Stil
• Hero-Bild-Platzierungen & Galerie-Layouts

5. Funktionalität & CTAs:
• Primäre CTAs: Reservierung, Angebot anfordern, Anruf, Kontakt
• Secondary CTAs: Social Media, Newsletter, Bewertung
• Formulare: Welche Felder erforderlich?

6. Besonderheiten:
• Branche-spezifische Features (z.B. Öffnungszeiten, Tische, Menü)
• Bewertungen/Social Proof Integration
• SEO-Keywords (Titel, Meta, H1)
💼 Marketing & Sales-Konzept:

🎯 Verkaufsargumente (Warum unsere Lösung?):
• Professionelle moderne Website vs. alte/keine Website
• Lokale SEO → höhere Sichtbarkeit in Suchmaschinen
• Mobile-optimiert → 70%+ Nutzer kommen mobil
• Automatisierte Terminbuchung / Online-Reservierung
• 24/7 erreichbar für Kunden (auch nachts)
• Lokale Kartendarstellung (Google Maps Integration)
• Social Media Links → zusätzliche Kanäle
• Vertrauensfaktor: Professionelle Präsenz = Seriösität

🏆 Alleinstellungsmerkmale (unsere USPs):
• Schnelle Erstellung: Von Discovery zu Website in 4-6 Wochen
• KI-gestützte Erstellung: Kosteneffizient, konsistent
• Bereits angepasst an Branche: Best-Practices für [Branche]
• Lokale Anpassung: Sprache, Kultur, Lokal-SEO
• Wartung & Support inkludiert
• Klare Preisgestaltung vs. Agentur-Chaos

⚖️ Rechtliche & Compliance-Risiken:
DSGVO: Datenschutzerklärung, Cookie-Banner, Impressum
AGB: Allgemeine Geschäftsbedingungen erforderlich
Impressum: Vollständiges, aktuelles Impressum (Name, Adresse, USt-ID)
Bildrechte: Alle Bilder lizensiert/erlaubt
Haftung: Haftungsausschluss für externe Links
Barrierefreiheit: WCAG 2.1 Richtlinien
Kontakt-Daten: Korrekt & aktuell (Vertrauen!)

❌ Konsequenzen bei nicht-Compliance:
• DSGVO-Verstöße: Geldstrafen bis 20 Mio. € oder 4% Umsatz
• Abmahnungen: Wettbewerb, Konkurrenz nutzen Fehler
• Google-Ranking: Nicht HTTPS/DSGVO → schlechteres Ranking
• Vertrauensverlust: Kunden sehen Fehler = unprofessionell
• Sperrung: Website kann vom Provider abgeschaltet werden
📋 updateDescription(conceptData) → DAHN tickets
📄 Dokumentation: Website-Konzept [S1f] in Ticket-Description

## Website-Konzept

### Zielgruppe & USPs
- Zielgruppe: [Demografie, Bedürfnisse]
- Haupt-Botschaft: [Value Prop]
- Unterschied zu Konkurrenz: [USPs]

### Site-Struktur (Navigation)
[ASCII-Sitemap/Hierarchie-Diagramm]
- Home
- Über uns
- Leistungen
- Galerie
- Kontakt

### Design-Elemente
- Farben: [Primär #xxx, Sekundär #xxx, Akzente #xxx]
- Fonts: [Headlines: XYZ, Body: ABC]
- Style: [Modernes/Klassisches/Minimalist Design]

### Content-Planung (Seite für Seite)
**Home:** Hero + USPs + Social Proof + CTA
**Über uns:** Team + Geschichte + Werte + Bilder
**Leistungen:** [Kategorien] mit Icons + Descriptions
**Galerie:** [Interior/Produkte/Team/Events mit 3-5 Bildern je Kategorie]
**Kontakt:** Öffnungszeiten + Karte + Formular + Social

### CTAs & Funktionalität
- Primäre CTAs: [Reservierung/Angebot/Anruf/Kontakt]
- Secondary CTAs: [Social/Newsletter/Review]

### Rechtliche Compliance
- DSGVO: ✅ Datenschutzerklärung, Cookies, Impressum
- AGB: ✅ [Link]
- Bildrechte: ✅ Alle Bilder lizensiert

### Marketing-Punkte (Sales-Pitch)
- Vorteil 1: [z.B. lokale SEO, mobile-optimiert]
- Vorteil 2: [z.B. 24/7 erreichbar]
- Vorteil 3: [z.B. professionelle Präsenz = Vertrauen]
[S1f-Check] Konzept erstellt?
CHECK: concept-done Label gesetzt
✅ JA
[S1f-1a]
WEITER
zu [S1g]
❌ NEIN
[S1f-1b]
ZURÜCK zu [S1e-Decision]
Analyse & Konzept updaten
Loop [S1f-Check] → [S1e-Decision] → [S1e-Check] → [S1e] → [S1e-Decision] → [S1f-Decision] → [S1f] → [S1f-Check]
Wenn `concept-done` Label entfernt: Potential aktualisieren + Konzept neu erstellen
[S1g]

🎨 Creative Design Review

🤖 Agent: Design (@MiniconDesignBot) | Cron: alle 6h | Prompt
creativeReview(concept, analysis, assets) → Unique Design Direction
🎯 Ziel: Jede Website bekommt ein einzigartiges Design — KEIN Template-Look!
🔍 Design-Inspiration sammeln:
→ Konkurrenz-Websites (aus S1e) via FireCrawl scrapen → Layout, Farben, was ist generisch?
→ Award-winning Websites der Branche suchen (Awwwards, CSS Design Awards)
→ Top 2-3 Inspiration-Websites via FireCrawl analysieren
→ Anti-Template-Check: Alle bisherigen DAHN-Websites vergleichen → Duplikat vermeiden!
🎨 3 Design-Varianten erstellen:

Für jede Variante definieren:
Name & Stimmung: z.B. "Elegant Modern", "Verspielt Warm", "Minimalist Bold"
Farbpalette: Primär #xxx, Sekundär #xxx, Akzent #xxx, BG #xxx (konkrete Hex-Codes!)
Typografie: Headlines + Body Fonts (Google Fonts)
Layout-Stil: Asymmetrisch, Full-width Hero, Card-Grid, Split-Screen etc.
Inspiration: URL + was davon übernommen wird

Empfehlung: Beste Variante mit Begründung (Marke, Konkurrenz-Abgrenzung, Umsetzbarkeit)
⭐ Signature-Element (PFLICHT — 1 pro Website):
Jede Website bekommt EIN einzigartiges Feature:

• Interaktive Speisekarte/Produktkatalog
• Parallax-Scrolling Hero mit Tiefeneffekt
• Animierte Statistiken/Zahlen beim Scrollen
• Hover-Effekte auf Galerie-Bildern (Zoom, Overlay, Flip)
• Scroll-triggered Animationen (Fade-in Sektionen)
• Testimonial-Karussell mit Sternebewertungen
• Interaktive Google Maps mit Custom Marker
• Floating Action Button (Anrufen/WhatsApp)
• Before/After Slider • Team-Galerie mit Hover-Bio
• Animated Logo/Brand-Element • Split-Screen Layout
• ODER: Neues branchenspezifisches Element erfinden!

⚠️ DARF NICHT bei einer anderen DAHN-Website bereits verwendet sein!
📋 Output: Build-Checkliste für S2
→ Style-Name + Farb-Hex-Codes + Google Font Names
→ Layout-Beschreibung + Signature-Element mit CSS/JS Hinweisen
→ Must-Haves + Don'ts
→ Anti-Template-Check Ergebnis
📋 addComment(creativeReview) → DAHN ticket
[S1g-Check] Creative Review abgeschlossen?
CHECK: creative-reviewed Label existiert
✅ JA
[S1g-1a]
WEITER
zu [S1h]
⚠️ NEIN
retryCount < 3
[S1g-1b]
RETRY [S1g]
Versuch 1-3
❌ FEHLER
retryCount >= 3
[S1g-1c]
ESKALATION
Ticket flaggen + Alert
[S1h]

✅ Markiere discovery-done

🤖 Agent: Builder | Cron: alle 6h | Prompt
📋 updateLabel(ticketIds[10]) → discovery-new → discovery-done
🎯 Bereit für [S2] BUILD:
Alle Tickets mit Daten, Assets, Konzept, Potential-Analyse & Creative Design Direction
discovery_new discovery_done
🏷️ Label-Progression (im Detail):

[S1c] Ticket erstellen:
→ Label: discovery-new

[S1d] Datensammlung:
→ Label bleibt: discovery-new
→ Label HINZUFÜGEN (am Ende): data-collected
→ (Assets attached, Bestandsanalyse in Description)

[S1e] Potential-Analyse:
→ Label bleibt: discovery-new + data-collected
→ Label HINZUFÜGEN: potential-{level} (niedrig/mittel/hoch/sehrhoch)

[S1f] Webseiten-Konzept (CONDITIONAL):
→ ❓ IF concept-done Label EXISTS → SKIP zu [S1g]
→ ❓ IF concept-done Label NOT EXISTS → START [S1f]
IF START [S1f]:
→ Label bleibt: discovery-new + data-collected + potential-{level}
→ Label HINZUFÜGEN: concept-done (Konzept fertig & dokumentiert)

[S1g] Creative Design Review:
→ Label bleibt: discovery-new + data-collected + potential-{level} + concept-done
→ Label HINZUFÜGEN: creative-reviewed
→ (3 Design-Varianten, Signature-Element, Anti-Template-Check in Kommentar)

[S1h] Mark Done:
→ Label ENTFERNEN: discovery-new
→ Label HINZUFÜGEN: discovery-done
→ Labels final: discovery-done, data-collected, potential-{level}, concept-done, creative-reviewed, region-{location}, siteid-{slug}
build-done (Website gebaut)
qa-passed (QA bestanden)
review-done (Design Review)
approved (Live)
[S2] BUILD — Repository & Deployment
[S2a]

📖 Lese Ticket-Informationen & erstelle Implementierungs-Prompts

🤖 Agent: QA | Cron: alle 6h | Prompt
📋 readTicketData(ticketId) → DAHN [S1d-S1g]
📄 Aus Jira-Ticket extrahieren:

Von [S1d] Bestandsanalyse:
• Google Maps, Facebook, Website, TripAdvisor, Lieferando, LinkedIn, Instagram Links + Findings
• Öffnungszeiten, Kontaktdaten, Telefon, Email
• Bestehende Website-Struktur (falls vorhanden)
• Assets: Logo, Hero-Bilder, Galerie

Von [S1e] Potenzial-Analyse:
• Zielgruppe & Demografie
• Market Position & Konkurrenzvergleich
• potential-{level}: [niedrig/mittel/hoch/sehrhoch]

Von [S1f] Website-Konzept:
• Zielgruppe & Messaging (USPs, Value Prop)
• Site-Struktur & Navigation
• Content-Planung (Seite für Seite)
• Design-Elemente (Farben, Fonts, Style)
• CTAs & Funktionalität
• Marketing-Punkte (für Sales-Pitch)
• Rechtliche Compliance (DSGVO, AGB, Impressum)

Von [S1g] Creative Design Review:
• Empfohlene Design-Variante (Farb-Hex-Codes, Fonts, Layout)
• Signature-Element (mit CSS/JS Umsetzungshinweisen)
• Anti-Template-Check Ergebnis
• Must-Haves & Don'ts
🎯 Generiere Implementierungs-Prompts:

Für Claude-Implementierung werden strukturierte Prompts generiert:

1. Design-Prompt:
Du bist ein Website-Designer. Basierend auf:
- Brand: [Firmenname, Branche]
- Zielgruppe: [Demografie]
- Farben: [Primär, Sekundär, Akzente]
- Fonts: [Headlines, Body]
- Style: [Modern/Klassisch/etc]
- Content: [Home, Über uns, Services, etc]

Erstelle Tailwind-Config mit Design-System.


2. Content-Prompt:
Du schreibst Marketing-Content. Basierend auf:
- Zielgruppe: [Demo]
- USPs: [xyz]
- Tone of Voice: [Professional/Friendly/etc]

Schreibe überzeugenden Content für:
- Home Hero-Section
- Über-uns Seite
- Services Beschreibungen
- CTAs


3. Component-Prompt:
Du bist ein React-Developer. Erstelle Next.js Components:
- Hero-Section mit [Assets]
- Service-Cards für [Services]
- Contact-Form mit [Felder]
- Gallery-Component mit [Bilder]
- Navigation mit [Struktur]

Nutze Tailwind CSS & TypeScript.


4. SEO/Technical-Prompt:
Konfiguriere SEO & Technisches:
- Title: [Keyword-optimiert]
- Meta-Description: [90 chars]
- Schema.org: [LocalBusiness/Restaurant/etc]
- Sitemap: [Auto-generate]
- Robots.txt, DSGVO-Links: [Impressum, Privacy]
🐙 gh repo create Minicon-eG/website-{siteid} --private --template Minicon-eG/website-template
📂 Repository-Struktur:
• Next.js 15+ mit TypeScript
• Tailwind CSS Styling
• App Router (nicht Pages)
• Components: Hero, Services, Gallery, Contact, Footer
• Public: Assets (Logos, Images, Favicon)
• SEO: sitemap.xml, robots.txt, metadata.ts
• Compliance: privacy-policy.tsx, impressum.tsx, terms.tsx
• Config: tailwind.config.ts mit Design-System
prompts_generated repository_ready
[S2a-2]

☁️ Cloudflare & Portal Setup NEU v11

🤖 Agent: Builder | Automatisch im Build-Step
3️⃣c CF Pages Projekt anlegen:
POST /accounts/{accountId}/pages/projects
→ Name: website-{siteid}
→ Production Branch: master
→ Prüfe zuerst ob Projekt existiert (GET), erstelle nur wenn nicht vorhanden
→ Token: CLOUDFLARE_PAGES_TOKEN (Org-Secret)

3️⃣d CF Custom Domain setzen:
POST /accounts/{accountId}/pages/projects/website-{siteid}/domains
→ Domain: {siteid}.minicon.eu
→ Setzt Custom Domain auf das Pages Projekt
→ Fehler ignorieren (z.B. Domain bereits gesetzt)

3️⃣e Kunde im Portal + individueller Support-Bot:
POST https://api.minicon.eu/api/admin/customers
→ Kompletter Kunden-Eintrag mit individuellem Support-Agenten:
{
  _id: "{siteid}",
  company: "{firmenname}",
  siteUrl: "https://{siteid}.minicon.eu",
  email: "info@{siteid}.minicon.eu",
  industry: "{branche aus S1d}",
  notes: "Adresse, Tel, Öffnungszeiten aus S1d",
  status: "onboarding",
  subscription: { plan: "starter", status: "trial", paidUntil: +30d },
  supportChannel: { type: "email", contactInfo: "...", verified: false },
  botPersona: {
    name: "branchenspezifisch",
    greeting: "Willkommen bei {firma}! Ich bin {name}...",
    personality: "Freundlich, kennt sich mit {branche} aus",
    industry: "{branche}",
    knowledge: "echte Firmendaten aus S1d",
    tone: "freundlich|professionell",
    enabled: true
  }
}
Bot-Namen nach Branche: Lisa/Marco (Gastro), Thomas/Stefan (Handwerk), Sophie/Laura (Retail), Julia/Anna (Dienstleistung), Max/Lena (Verein)
knowledge enthält echte Firmendaten: Adresse, Öffnungszeiten, Services, Spezialitäten aus S1d
✅ Nach diesem Schritt:
• GitHub Repo ✓ (privat, aus Template)
• DNS A-Records ✓ (Cloudflare, proxied)
• CF Pages Projekt ✓ (für CDN Fallback)
• Custom Domain ✓ (auf Pages Projekt)
• Portal-Eintrag ✓ (Kunde + individueller Support-Agent)
repository_ready infra_ready
[S2b]

✏️ Content generieren

🤖 Agent: Akquise (@MiniconAquiseBot) | Cron: 3x täglich | Prompt
generateContent() → Hero, About, Services, Contact, Gallery Components
DALL-E 3 generiert Hero-Images falls nicht vorhanden
components_generated
[S2c]

🎨 Styling & Brand-Anpassung

🤖 Agent: Akquise (@MiniconAquiseBot)
applyBranding() → Brand-Colors, Fonts, Theme-Config
Tailwind config.js → color palette aus Daten
styled
[S2d] Build & Deploy Loop (GitHub Actions)
[S2d]

🚀 Build & Deploy zu Cloudflare

⚙️ GitHub Actions Workflow
npm run build → Next.js Compilation → out/
wrangler publish → Cloudflare Pages Deploy
🐙 gh issue comment --body "✅ Deployed: {live_url}"

Live URL: https://{domain}.minicon.eu

⏳ Falls Build fehlschlägt (Retry Max 2x):
1. Auto-Fix versuchen
2. Bei zweiter Fehlschlag → build_failed + Alert
built deployed_preview
[S3] QA REVIEW — Qualitätsprüfung
[S3a]

✅ QA Review Agent startet

🤖 Agent: CR-Worker | Cron: alle 5 Min | Prompt
startQAReview() → runChecklist(previewUrl, 35-items)
🐙 gh issue comment --body "🔍 QA Review started"

35 QA Checks in 6 Kategorien:

qa_running
[S3b] Alle 35 Checks bestanden?
🤖 Claude QA Agent
✅ Ja (35/35)
→ Weiter zu [S4a] Design
❌ Nein
[S3c]

Auto-Fix versuchen

🤖 Claude QA Bot
autoFix(failedChecks) → Create Commit → Push to main
🐙 gh issue comment --body "⚠️ {N} Issues gefunden — Auto-Fix läuft"
Bei Erfolg: Weiter zu [S4a]
Nach 2x fehl: escalated + Telegram-Alert → Manuelle Review nötig
qa_fixing
[S4] DESIGN REVIEW — Visuelle Validierung
[S4a]

🎨 Design Review Agent

🤖 Agent: CR-Worker
reviewDesign() → checkBrandConsistency(), checkLayout(), checkResponsive()
🐙 gh issue comment --body "🎨 Design Review in progress"

Prüfungen:

design_review
[S4b] Design OK?
🤖 Claude Design Agent
✅ Ja
→ Weiter zu [S5a] Freigabe
❌ Nein
[S4c]

Design-Feedback umsetzen

🤖 Claude
applyDesignFeedback() → Update Styles → Deploy
🐙 gh issue comment --body "🔄 Design-Anpassung läuft"
Loop zurück zu [S4a] bis Design OK
[S5] FREIGABE — Manual Approval & Go-Live
[S5a]

👤 Manual Freigabe Check

👤 Michael (Manual)
🐙 gh issue comment --body "🔍 Awaiting manual approval from {approver}"

Checkliste:

awaiting_approval
[S5b] Freigegeben?
👤 Approver (Michael)
✅ Ja
[S5c]

✅ Deployment → Production Go-Live

⚙️ GitHub Actions + Admin (Manual DNS)
10-Step Production Deployment:

1️⃣ BUILD PRODUCTION
npm run build:prod --siteid={siteid}
→ Output: /dist (HTML/CSS/JS statisch)
→ Cloudflare Workers AI Optimization

2️⃣ DNS PREPARATION
→ Jira-Call: getDNSConfig(siteid)
→ Cloudflare Zone: minicon.eu
→ OPTION A: website-{siteid}.minicon.eu (subdomain)
→ OPTION B: {customer-domain}.de (custom domain)
→ Health-Check: DNS Propagation (< 5 min)

3️⃣ CLOUDFLARE DEPLOYMENT
→ Deploy zu: Cloudflare Pages
→ Project: minicon-websites, Branch: main
→ Auto-HTTPS, HTTP/2, Gzip enabled
→ Cache Rules: Static=1y, HTML=1h, API=no-cache
→ WAF: Rate Limiting, Bot Management (optional)

4️⃣ ROUTING CONFIGURATION
→ Subdomain: DNS CNAME → pages.cloudflare.net
→ Custom Domain: Customer NS → Cloudflare
→ SSL: Universal (auto) oder Wildcard
→ Traefik Update (falls nötig): routes.yml

5️⃣ UPTIME MONITORING AKTIVIEREN
→ Jira-Call: addMonitor(siteid, prod_url)
→ Uptime-Kuma: Keyword-Check
→ Pattern: <!--minicon:{siteid}-->
→ Interval: 5 min, Tag: production
→ Alert: Telegram (Michael)

6️⃣ HEALTH CHECKS
✓ Status 200 OK
✓ Title Tag korrekt
✓ minicon:{siteid} Marker vorhanden
✓ Meta Tags (viewport, charset)
✓ Lighthouse Score > 80
✓ FCP < 2s, CLS < 0.1
✓ CSP Headers, HTTPS enforced

7️⃣ CUSTOMER NOTIFICATION
→ Email an {customer-email}
→ Subject: "✅ {company-name} Website ist LIVE"
→ Body: Production URL, Support Email, CR-Form Link
→ SMS (optional): Short-Link

8️⃣ JIRA STATUS UPDATE
→ Label: approvedlive
→ Comment: 🚀 Website LIVE
→ Include: URL, Deployment Time, Monitoring Link
→ Close Issue: "Completed"

9️⃣ ROLLBACK PLAN (Falls Error)
→ IF Production Error:
    • git revert {commit-hash}
    • Cloudflare: Redeploy Previous Version
    • DNS: Roll back to Backup Domain
    • Alert: Telegram + Jira
→ IF Partial Issue:
    • Hot-Fix: Fast-track durch [S2]-[S3]-[S5]

🔟 DOCUMENTATION
→ Jira: Final Cost, Deployment Date, Git Commit
→ Confluence: Deployment Log Entry
→ GitHub: Release Tag (v1.0.0-website-{siteid})
📊 POST-GO-LIVE MONITORING

Hour 1-4 (Critical):
• Uptime-Kuma: Check alle 5 min
• Performance: LCP, FCP, CLS
• Error Logs: 4xx/5xx Monitor
• Customer Feedback

Day 1-7 (Important):
• SEO: Google Search Console
• Analytics: Bounce Rate, Sessions
• Forms: Contact Form Tests
• Mobile: Manual Device Tests

Week 1-4 (Regular):
• Weekly Status Report
• Performance Optimization
• Content Updates (Kundenwünsche)
⚠️ FAILURE SCENARIOS

❌ DNS doesn't resolve:
→ Rollback zu Last Working Build
→ Jira-Label: escalated → Cloudflare Support

❌ Uptime-Kuma marker missing:
→ Website läuft, aber HTML-Marker fehlt
→ Jira-Label: qa-failed → Zurück [S3]

❌ Performance < 80 Lighthouse:
→ Jira-Label: review-rework → [S4] Optimize

❌ Customer domain HTTPS fails:
→ Point zu *.minicon.eu subdomain
→ Customer reconfigures DNS später
approved live
❌ Nein
[S5d]

❌ Rework — Feedback für Überarbeitungen

👤 Approver (Michael)
🐙 gh issue comment DAHN-{id} --body "❌ Feedback für Rework:\n{review_notes}\n→ Bitte überarbeiten und neu einreichen"
📋 setLabel(ticketId) → in-rework
Label-Progression: approved → in-rework
Nächste Schritte: Developer überarbeitet basierend auf Feedback → [S2] Build oder [S4] Design Review → zurück zu [S5b]
Loop: Wiederholt bis Freigabe erfolgt
in-rework

✅ Status & Änderungen v11

✅ BEHOBEN: Build & QA Cron Jobs
Stage: [S2] + [S3]
Lösung: Dedizierte Agents (builder, qa) mit eigenen Telegram-Bots + Cron-Jobs
Status: Aktiv seit 28.03.2026
✅ BEHOBEN: Cloudflare Pages Deployment
Stage: [S2d] / Shared Workflow
Lösung: apiToken als wrangler-action Input (statt env var) + continue-on-error
Server-Deploy = primär, CF Pages = CDN Fallback
✅ NEU: CF Pages + Portal + Support-Bot automatisiert
Stage: [S2a-2]
CF Pages Projekt, Custom Domain, Portal-Registrierung UND individueller Support-Agent (Name, Greeting, Knowledge, Industry, Tone) laufen automatisch im Builder-Bot
⚠️ Offen: S1g + S4 Telegram-Bots
Stage: [S1g] Design + [S4] Design Review
Status: Laufen temporär über Atlas-Agent, eigene Bots geplant
Impact: Funktional OK, nur keine isolierte Telegram-Benachrichtigung
⚠️ Offen: Self-Hosted Runner (1x)
Alle Repos nutzen einen einzigen Self-Hosted Runner (GitHub Free Plan)
Impact: Bei vielen gleichzeitigen Deploys entsteht Queue-Stau
Constraint: Max 1 Website-Build gleichzeitig