Migrate all repos into monorepo context folders

Bahn: aisupport, Analyse-O2C-C2S, awesome-bahn-mcp-servers, beam-mcp,
      Confluence_Bot, db-planet-mcp-server, O2C-Harness, project-audit,
      Projekt-KIQ-HP, teamlandkarte-mcp
Dhive: Jury-Voting
Privat: CV, NoteGraph (NOTE: NoteGraph needs complete redo after consolidation)
Shared: AI-Orchestrator, OrgMyLife, power_skills_and_more
Shared/references: symphony (read-only)

Bahn repos remain available as independent remotes - this monorepo
pulls them in via subtree, the originals are untouched.
This commit is contained in:
2026-06-30 20:39:52 +02:00
parent 2f2b295531
commit a5f8fb49ab
1717 changed files with 447332 additions and 0 deletions
+318
View File
@@ -0,0 +1,318 @@
import os
from fpdf import FPDF
from fpdf.enums import XPos, YPos
# Path configuration for assets
BASE_PATH = "src/assets"
BG_MAIN = f"{BASE_PATH}/pdf_assets/pitch_deck_bg.png"
IMG_USE_CASE = f"{BASE_PATH}/pdf_assets/use_case_ai.png"
# USP Images
USP_DEV = f"{BASE_PATH}/usp/developer.png"
USP_BIZ = f"{BASE_PATH}/usp/business.png"
USP_SOV = f"{BASE_PATH}/usp/sovereignty.png"
# Style configuration
COLOR_BG = (10, 10, 10)
COLOR_ACCENT = (0, 255, 0)
COLOR_TEXT = (250, 250, 250)
COLOR_SECONDARY = (180, 180, 180)
class Fancy_KIQ_Deck(FPDF):
def add_fancy_bg(self):
if os.path.exists(BG_MAIN):
self.image(BG_MAIN, x=0, y=0, w=self.w, h=self.h)
else:
self.set_fill_color(*COLOR_BG)
self.rect(0, 0, self.w, self.h, "F")
def draw_glass_card(self, x, y, w, h, border=True):
# Semi-transparent background
with self.local_context(fill_opacity=0.4):
self.set_fill_color(20, 20, 20)
self.rect(x, y, w, h, "FD" if border else "F", round_corners=True, corner_radius=5)
if border:
self.set_draw_color(*COLOR_ACCENT)
self.set_line_width(0.3)
# Subtle glow effect border
with self.local_context(stroke_opacity=0.3):
self.rect(x-0.5, y-0.5, w+1, h+1, "D", round_corners=True, corner_radius=5)
def header(self):
if self.page_no() > 1:
self.set_font("Helvetica", "B", 8)
self.set_text_color(*COLOR_ACCENT)
self.set_xy(0, 5)
self.cell(287, 8, "PROJEKT-KIQ CONFIDENTIAL", align="R", new_x=XPos.LMARGIN, new_y=YPos.NEXT)
def clean_text(text):
return (text.replace("\u2014", "-").replace("\u2013", "-")
.replace("\u20AC", "EUR").replace("\u2026", "...")
.replace("\u00fc", "ue").replace("\u00e4", "ae").replace("\u00f6", "oe")
.replace("\u00dc", "Ue").replace("\u00c4", "Ae").replace("\u00d6", "Oe"))
def generate_fancy_pdf():
# 16:9 format
pdf = Fancy_KIQ_Deck(orientation="L", unit="mm", format=(167, 297))
pdf.set_auto_page_break(auto=True, margin=15)
# --- PAGE 1: COVER ---
pdf.add_page()
pdf.add_fancy_bg()
pdf.set_y(65)
pdf.set_font("Helvetica", "B", 54)
pdf.set_text_color(*COLOR_TEXT)
pdf.cell(0, 20, "PROJEKT-KIQ", align="C", new_x=XPos.LMARGIN, new_y=YPos.NEXT)
pdf.set_font("Helvetica", "B", 20)
pdf.set_text_color(*COLOR_ACCENT)
pdf.cell(0, 15, clean_text("Das souveraene KI-Betriebssystem fuer den Mittelstand"), align="C", new_x=XPos.LMARGIN, new_y=YPos.NEXT)
pdf.set_y(150)
pdf.set_font("Helvetica", "", 10)
pdf.set_text_color(*COLOR_SECONDARY)
pdf.cell(0, 10, "APRIL 2026 | VERSION 1.3 | CONFIDENTIAL PITCH DECK", align="C")
# --- PAGE 2: VISION ---
pdf.add_page()
pdf.add_fancy_bg()
pdf.set_font("Helvetica", "B", 28)
pdf.set_text_color(*COLOR_TEXT)
pdf.set_xy(10, 10)
pdf.cell(0, 20, "Die Plattform-Vision", align="L", new_x=XPos.LMARGIN, new_y=YPos.NEXT)
# Vision Cards
y_cards = 40
card_w = 88
card_h = 100
usps = [
{"title": "Entwickler", "img": USP_DEV, "text": "Speed & Participation\nShared Benefit Model\nDeutsche KI-Exzellenz"},
{"title": "Unternehmen", "img": USP_BIZ, "text": "Time-to-Value\nKein IT-Overhead\nHigh-End KI ready-to-use"},
{"title": "Souveraenitaet", "img": USP_SOV, "text": "100% Made in Germany\nKeine Hyperscaler-Abh.\nDSGVO-Sicherer Hafen"}
]
for i, usp in enumerate(usps):
x = 10 + (95 * i)
pdf.draw_glass_card(x, y_cards, card_w, card_h)
# Image in card
if os.path.exists(usp["img"]):
pdf.image(usp["img"], x+5, y_cards+5, w=card_w-10, h=40)
pdf.set_xy(x+5, y_cards+50)
pdf.set_font("Helvetica", "B", 16)
pdf.set_text_color(*COLOR_ACCENT)
pdf.cell(card_w-10, 10, clean_text(usp["title"]), align="C", new_x=XPos.LMARGIN, new_y=YPos.NEXT)
pdf.set_font("Helvetica", "", 12)
pdf.set_text_color(*COLOR_TEXT)
pdf.set_x(x+5)
pdf.multi_cell(card_w-10, 8, clean_text(usp["text"]), align="C")
# --- PAGE 3: USE CASES I ---
pdf.add_page()
pdf.add_fancy_bg()
if os.path.exists(IMG_USE_CASE):
pdf.image(IMG_USE_CASE, x=160, y=20, h=130)
pdf.set_font("Helvetica", "B", 28)
pdf.set_text_color(*COLOR_TEXT)
pdf.set_xy(10, 10)
pdf.cell(0, 20, "KI-Anwendungsfaelle I", align="L", new_x=XPos.LMARGIN, new_y=YPos.NEXT)
cases1 = [
("Teileerkennung", "Auto-Identifikation per Foto. Sekunden statt Minuten Suchzeit."),
("Pruefprotokolle", "QS-Doku aus Auftraegen. Stunden Zeitersparnis pro Auftrag."),
("Marktanalyse", "KI-Monitoring fuer Wettbewerb. Wochenarbeit in Minuten.")
]
y_start = 45
for title, desc in cases1:
pdf.draw_glass_card(10, y_start, 140, 30)
pdf.set_xy(15, y_start+5)
pdf.set_font("Helvetica", "B", 14)
pdf.set_text_color(*COLOR_ACCENT)
pdf.cell(0, 8, clean_text(title), new_x=XPos.LMARGIN, new_y=YPos.NEXT)
pdf.set_font("Helvetica", "", 11)
pdf.set_text_color(*COLOR_TEXT)
pdf.set_x(15)
pdf.multi_cell(130, 6, clean_text(desc))
y_start += 35
# --- PAGE 4: USE CASES II ---
pdf.add_page()
pdf.add_fancy_bg()
pdf.set_font("Helvetica", "B", 28)
pdf.set_text_color(*COLOR_TEXT)
pdf.set_xy(10, 10)
pdf.cell(0, 20, "KI-Anwendungsfaelle II", align="L", new_x=XPos.LMARGIN, new_y=YPos.NEXT)
cases2 = [
("Angebotsunterstuetzung", "Komplexe Angebote in Minuten. Hoehere Kapazitaet ohne Personal."),
("Berichtserzeugung", "Automatisierte Reportings. Von 1 Woche auf 30 Minuten."),
("RAG-Chatbot", "Know-how-Chat mit Firmendaten. 100% souveraen und sicher.")
]
y_start = 45
for title, desc in cases2:
pdf.draw_glass_card(10, y_start, 277, 30)
pdf.set_xy(15, y_start+5)
pdf.set_font("Helvetica", "B", 14)
pdf.set_text_color(*COLOR_ACCENT)
pdf.cell(0, 8, clean_text(title), new_x=XPos.LMARGIN, new_y=YPos.NEXT)
pdf.set_font("Helvetica", "", 11)
pdf.set_text_color(*COLOR_TEXT)
pdf.set_x(15)
pdf.multi_cell(260, 6, clean_text(desc))
y_start += 35
# --- PAGE 5: TRACTION & METRICS ---
pdf.add_page()
pdf.add_fancy_bg()
pdf.set_font("Helvetica", "B", 28)
pdf.set_text_color(*COLOR_TEXT)
pdf.set_xy(10, 10)
pdf.cell(0, 20, "Traction & Impact", align="L", new_x=XPos.LMARGIN, new_y=YPos.NEXT)
metrics = [
("6", "Zahlende Pilotkunden"),
("60k EUR", "Initialumsatz PoC"),
("12+", "Aktive Use Cases"),
("M15", "Break-Even Prognose")
]
for i, (val, label) in enumerate(metrics):
x = 10 + (72 * i)
pdf.draw_glass_card(x, 60, 65, 50)
pdf.set_xy(x, 70)
pdf.set_font("Helvetica", "B", 24)
pdf.set_text_color(*COLOR_ACCENT)
pdf.cell(65, 15, val, align="C", new_x=XPos.LMARGIN, new_y=YPos.NEXT)
pdf.set_font("Helvetica", "B", 10)
pdf.set_text_color(*COLOR_TEXT)
pdf.set_x(x)
pdf.cell(65, 10, clean_text(label), align="C")
# --- PAGE 6: REVENUE MODELS ---
pdf.add_page()
pdf.add_fancy_bg()
pdf.set_font("Helvetica", "B", 28)
pdf.set_text_color(*COLOR_TEXT)
pdf.set_xy(10, 10)
pdf.cell(0, 20, "Geschaeftsmodell", align="L", new_x=XPos.LMARGIN, new_y=YPos.NEXT)
models = [
("Setup-Fee", "~2.500 EUR", "Initiales Onboarding & Integration."),
("Token-Marge", "20-50% MRR", "Nutzungsbasierte Skalierung."),
("Plattform 80/20", "20% Cut", "Dauerhafte Refinanzierung.")
]
for i, (t, s, d) in enumerate(models):
pdf.draw_glass_card(10, 45 + (i*35), 200, 30)
pdf.set_xy(20, 50 + (i*35))
pdf.set_font("Helvetica", "B", 18)
pdf.set_text_color(*COLOR_ACCENT)
pdf.cell(80, 10, clean_text(t))
pdf.set_font("Helvetica", "B", 18)
pdf.set_text_color(*COLOR_TEXT)
pdf.cell(80, 10, clean_text(s), new_x=XPos.LMARGIN, new_y=YPos.NEXT)
pdf.set_font("Helvetica", "", 11)
pdf.set_x(20)
pdf.cell(0, 8, clean_text(d))
# --- PAGE 7: THE ASK (KAPITALBEDARF) ---
pdf.add_page()
pdf.add_fancy_bg()
pdf.set_font("Helvetica", "B", 28)
pdf.set_text_color(*COLOR_TEXT)
pdf.set_xy(10, 10)
pdf.cell(0, 20, "The Ask: Kapitalbedarf Tranche 1", align="L", new_x=XPos.LMARGIN, new_y=YPos.NEXT)
pdf.draw_glass_card(10, 45, 277, 100)
pdf.set_xy(20, 55)
pdf.set_font("Helvetica", "B", 22)
pdf.set_text_color(*COLOR_ACCENT)
pdf.cell(0, 15, "150.000 EUR Stille Beteiligung", align="L", new_x=XPos.LMARGIN, new_y=YPos.NEXT)
allocs = [
("Runway & Liquiditaetspuffer", "70.000 EUR", 47),
("Go-to-Market (Sales/Marketing)", "50.000 EUR", 33),
("Legal & Zertifizierungen (ISO 27001)", "30.000 EUR", 20)
]
y = 75
for label, amount, pct in allocs:
pdf.set_xy(20, y)
pdf.set_font("Helvetica", "B", 12)
pdf.set_text_color(*COLOR_TEXT)
pdf.cell(150, 8, clean_text(label))
pdf.set_text_color(*COLOR_ACCENT)
pdf.cell(50, 8, amount, align="R", new_x=XPos.LMARGIN, new_y=YPos.NEXT)
# Progress Bar simulation
pdf.set_draw_color(*COLOR_SECONDARY)
pdf.set_fill_color(30, 30, 30)
pdf.rect(20, y+8, 250, 3, "F")
pdf.set_fill_color(*COLOR_ACCENT)
pdf.rect(20, y+8, 250 * (pct/100), 3, "F")
y += 18
# --- PAGE 8: TEAM ---
pdf.add_page()
pdf.add_fancy_bg()
pdf.set_font("Helvetica", "B", 28)
pdf.set_text_color(*COLOR_TEXT)
pdf.set_xy(10, 10)
pdf.cell(0, 20, "Das Gruenderteam", align="L", new_x=XPos.LMARGIN, new_y=YPos.NEXT)
pdf.draw_glass_card(10, 45, 135, 90)
pdf.set_xy(15, 50)
pdf.set_font("Helvetica", "B", 18)
pdf.set_text_color(*COLOR_ACCENT)
pdf.cell(0, 10, "Dr. Andre Knie", new_x=XPos.LMARGIN, new_y=YPos.NEXT)
pdf.set_font("Helvetica", "I", 12)
pdf.set_text_color(*COLOR_TEXT)
pdf.set_x(15)
pdf.multi_cell(120, 8, clean_text("Physiker & Leadership-Experte.\nFokus: Mensch-Maschine-Moderation & Strategischer Change."))
pdf.draw_glass_card(152, 45, 135, 90)
pdf.set_xy(157, 50)
pdf.set_font("Helvetica", "B", 18)
pdf.set_text_color(*COLOR_ACCENT)
pdf.cell(0, 10, "Dr.-Ing. Alexander Schrodt", new_x=XPos.LMARGIN, new_y=YPos.NEXT)
pdf.set_font("Helvetica", "I", 12)
pdf.set_text_color(*COLOR_TEXT)
pdf.set_x(157)
pdf.multi_cell(120, 8, clean_text("Regelungstechniker & Architekt.\nFokus: Mess- und Automatisierungssystemeb & Technische KI-Integration."))
# --- FINAL: CONTACT ---
pdf.add_page()
pdf.add_fancy_bg()
pdf.set_y(60)
pdf.set_font("Helvetica", "B", 42)
pdf.set_text_color(*COLOR_ACCENT)
pdf.cell(0, 30, clean_text("INTERESSE AN PROJEKT-KIQ?"), align="C", new_x=XPos.LMARGIN, new_y=YPos.NEXT)
pdf.set_font("Helvetica", "", 18)
pdf.set_text_color(*COLOR_TEXT)
pdf.cell(0, 15, "Kontakt: KIQ@d-hive.de", align="C", new_x=XPos.LMARGIN, new_y=YPos.NEXT)
pdf.cell(0, 15, "www.projekt-kiq.de", align="C")
# Output
output_path = "docs/Project-KIQ-Pitch-Deck.pdf"
if not os.path.exists("docs"): os.makedirs("docs")
pdf.output(output_path)
return output_path
if __name__ == "__main__":
path = generate_fancy_pdf()
print(f"COMPLETE FANCY PDF generated: {path}")