← Übersicht
Akquise Pipeline
CR Workflow
🤖 Website-Generierungs-Pipeline — Programmablaufplan
5-Stage Autonomous Workflow · Detailliert mit Agents · 2026-03-28
Prozess-Schritt
◆ Entscheidung
🔄 Loop
✅ Live
❌ Fehler
Kontrollen:
Alle Aufklappen
Alle Zuklappen
[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)
⚠️ 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-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]
↓
[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
📊 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
🎯 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
❌ 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
🎯 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
⚠️ 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
🎯 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:
🎯 Accessibility: WCAG 2.1 AA, Alt-Texte, Keyboard-Navigation (5 items)
📱 Display: Responsive Design, Font-Größen, Spacing (8 items)
📝 Text: Rechtschreibung, Brand Voice, Content-Längen (6 items)
⚖️ Legal: Impressum, Datenschutz, AGB-Links (4 items)
⚡ Functionality: Forms, Links, Load-Time < 3s (7 items)
🎯 Minicon Standard: Banner, Tracking, Meta-Tags, Sitemap (5 items)
qa_running
↓
[S3b]
Alle 35 Checks bestanden?
🤖 Claude QA Agent
❌ 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:
🎨 Brand Consistency — Farben, Logos, Typografie
📐 Layout Harmonie — Grid, Spacing, Alignment
📱 Mobile-First — Responsive auf allen Geräten
⚡ Performance — Image-Optimierung, Load-Time
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:
✅ QA: Alle 35 Checks bestanden?
✅ Design: Visuell korrekt?
✅ Content: Richtig & aktuell?
✅ Performance: Live-Test OK?
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: approved → live
→ 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