feat: Add DevSecOps tools, Woodpecker proxy, Vault persistent storage, pitch-deck annex slides
All checks were successful
CI / test-bqas (push) Successful in 32s
CI / go-lint (push) Has been skipped
CI / python-lint (push) Has been skipped
CI / nodejs-lint (push) Has been skipped
CI / test-go-consent (push) Successful in 46s
CI / test-python-voice (push) Successful in 38s

- Install Gitleaks, Trivy, Grype, Syft, Semgrep, Bandit in backend-core Dockerfile
- Add Woodpecker SQLite proxy API (fallback without API token)
- Mount woodpecker_data volume read-only to backend-core
- Add backend proxy fallback in admin-core Woodpecker route
- Add Vault file-based persistent storage (config.hcl, init-vault.sh)
- Auto-init, unseal and root-token persistence for Vault
- Add 6 pitch-deck annex slides (Assumptions, Architecture, GTM, Regulatory, Engineering, AI Pipeline)
- Dynamic margin/amortization KPIs in BusinessModelSlide
- Market sources modal with citations in MarketSlide
- Redesign nginx landing page to 3-column layout (Lehrer/Compliance/Core)
- Extend MkDocs nav with Services and SDK documentation sections
- Add SDK Protection architecture doc

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Benjamin Boenisch
2026-02-17 15:42:43 +01:00
parent eb43b40dd0
commit b7d21daa24
31 changed files with 3323 additions and 299 deletions

View File

@@ -34,6 +34,13 @@
--docs-core: #14b8a6;
--docs-lehrer: #0ea5e9;
--docs-compliance: #8b5cf6;
--pitch-500: #f59e0b;
--pitch-400: #fbbf24;
--pitch-600: #d97706;
--pitch-bg: rgba(245, 158, 11, 0.08);
--pitch-bg-hover: rgba(245, 158, 11, 0.14);
--pitch-border: rgba(245, 158, 11, 0.25);
}
/* ── Light Theme ── */
@@ -95,6 +102,9 @@
--core-bg: rgba(100, 116, 139, 0.1);
--core-bg-hover: rgba(100, 116, 139, 0.18);
--core-border: rgba(148, 163, 184, 0.15);
--pitch-bg: rgba(245, 158, 11, 0.1);
--pitch-bg-hover: rgba(245, 158, 11, 0.18);
--pitch-border: rgba(251, 191, 36, 0.2);
}
body {
@@ -176,6 +186,57 @@
margin: 0 auto 2.5rem;
}
.columns-layout {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
gap: 1.5rem;
max-width: 1100px;
margin: 0 auto 2.5rem;
}
.column {
display: flex;
flex-direction: column;
gap: 0.75rem;
}
.column-header {
font-size: 0.8rem;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.06em;
padding: 0.4rem 0.75rem;
border-radius: 8px;
display: flex;
align-items: center;
gap: 0.5rem;
}
.column-header-lehrer {
color: var(--lehrer-500);
background: var(--lehrer-bg);
}
.column-header-compliance {
color: var(--compliance-500);
background: var(--compliance-bg);
}
.column-header-core {
color: var(--core-400);
background: var(--core-bg);
}
.column .card {
width: 100%;
}
@media (max-width: 768px) {
.columns-layout {
grid-template-columns: 1fr;
}
}
/* ── Cards ── */
.card {
border-radius: 14px;
@@ -214,6 +275,12 @@
}
.card-core:hover { background: var(--core-bg-hover); }
.card-pitch {
border-color: var(--pitch-border);
background: var(--pitch-bg);
}
.card-pitch:hover { background: var(--pitch-bg-hover); }
.card-icon {
width: 44px;
height: 44px;
@@ -258,6 +325,7 @@
.stripe-docs-core { background: var(--docs-core); }
.stripe-docs-lehrer { background: var(--docs-lehrer); }
.stripe-docs-compliance { background: var(--docs-compliance); }
.stripe-pitch { background: var(--pitch-500); }
.divider {
max-width: 1100px;
@@ -555,116 +623,130 @@
<div style="max-width: 1100px; margin: 0 auto;">
<div class="section-title">Projekte</div>
</div>
<div class="grid">
<div class="columns-layout">
<a class="card card-core" href="https://macmini:3008/dashboard">
<div class="stripe stripe-core"></div>
<div class="card-body">
<h3>Admin Core</h3>
<p>Infrastruktur, Services, Monitoring</p>
<div class="url">macmini:3008/dashboard</div>
</div>
</a>
<!-- ── Lehrer (links) ── -->
<div class="column">
<div class="column-header column-header-lehrer">Lehrer</div>
<a class="card card-lehrer" href="https://macmini:3002/dashboard">
<div class="stripe stripe-lehrer"></div>
<div class="card-body">
<h3>Admin Lehrer</h3>
<p>Verwaltung, AI Tools, Klausuren</p>
<div class="url">macmini:3002</div>
</div>
</a>
<a class="card card-lehrer" href="https://macmini:3002/dashboard">
<div class="stripe stripe-lehrer"></div>
<div class="card-body">
<h3>Admin Lehrer</h3>
<p>Verwaltung, AI Tools, Klausuren</p>
<div class="url">macmini:3002</div>
</div>
</a>
<a class="card card-compliance" href="https://macmini:3007/sdk">
<div class="stripe stripe-compliance"></div>
<div class="card-body">
<h3>Compliance SDK</h3>
<p>DSGVO, Audit, GRC &mdash; Alle SDK-Module</p>
<div class="url">macmini:3007/sdk</div>
</div>
</a>
<a class="card card-lehrer" href="https://macmini">
<div class="stripe stripe-lehrer"></div>
<div class="card-body">
<h3>Studio v2</h3>
<p>Lehrer- und Schueler-Interface</p>
<div class="url">macmini</div>
</div>
</a>
<a class="card card-lehrer" href="https://macmini">
<div class="stripe stripe-lehrer"></div>
<div class="card-body">
<h3>Studio v2</h3>
<p>Lehrer- und Schueler-Interface</p>
<div class="url">macmini</div>
</div>
</a>
<a class="card card-lehrer" href="https://macmini:3000">
<div class="stripe stripe-lehrer"></div>
<div class="card-body">
<h3>Website</h3>
<p>Oeffentliche BreakPilot Website</p>
<div class="url">macmini:3000</div>
</div>
</a>
<a class="card card-compliance" href="https://macmini:3007/dashboard">
<div class="stripe stripe-compliance"></div>
<div class="card-body">
<h3>Compliance Dashboard</h3>
<p>Kataloge, Statistiken, Verwaltung</p>
<div class="url">macmini:3007/dashboard</div>
</div>
</a>
<a class="card card-lehrer" href="http://macmini:8010/">
<div class="stripe stripe-docs-lehrer"></div>
<div class="card-body">
<h3>Dokumentation</h3>
<p>Klausur, Voice, Agent-Core, Studio</p>
<div class="url">macmini:8010</div>
</div>
</a>
</div>
<a class="card card-lehrer" href="https://macmini:3000">
<div class="stripe stripe-lehrer"></div>
<div class="card-body">
<h3>Website</h3>
<p>Oeffentliche BreakPilot Website</p>
<div class="url">macmini:3000</div>
</div>
</a>
<!-- ── Compliance (mitte) ── -->
<div class="column">
<div class="column-header column-header-compliance">Compliance</div>
<a class="card card-compliance" href="https://macmini:3007/dashboard">
<div class="stripe stripe-compliance"></div>
<div class="card-body">
<h3>Katalogverwaltung</h3>
<p>SDK-Kataloge &amp; Auswahltabellen</p>
<div class="url">macmini:3007/dashboard</div>
</div>
</a>
<a class="card card-compliance" href="https://macmini:3007/sdk">
<div class="stripe stripe-compliance"></div>
<div class="card-body">
<h3>Compliance SDK</h3>
<p>DSGVO, Audit, GRC &mdash; Alle SDK-Module</p>
<div class="url">macmini:3007/sdk</div>
</div>
</a>
<a class="card card-compliance" href="https://macmini:3010/compliance-hub/">
<div class="stripe stripe-compliance"></div>
<div class="card-body">
<h3>Comply Website</h3>
<p>Marketing-Website fuer den KI Compliance Hub</p>
<div class="url">macmini:3010/compliance-hub</div>
</div>
</a>
<a class="card card-compliance" href="https://macmini:3007/dashboard">
<div class="stripe stripe-compliance"></div>
<div class="card-body">
<h3>Compliance Dashboard</h3>
<p>Kataloge, Statistiken, Verwaltung</p>
<div class="url">macmini:3007/dashboard</div>
</div>
</a>
</div>
<a class="card card-compliance" href="https://macmini:3007/dashboard">
<div class="stripe stripe-compliance"></div>
<div class="card-body">
<h3>Katalogverwaltung</h3>
<p>SDK-Kataloge &amp; Auswahltabellen</p>
<div class="url">macmini:3007/dashboard</div>
</div>
</a>
<hr class="divider">
<a class="card card-compliance" href="https://macmini:3010/compliance-hub/">
<div class="stripe stripe-compliance"></div>
<div class="card-body">
<h3>Comply Website</h3>
<p>Marketing-Website fuer den KI Compliance Hub</p>
<div class="url">macmini:3010/compliance-hub</div>
</div>
</a>
<!-- ── Dokumentation ── -->
<div style="max-width: 1100px; margin: 0 auto;">
<div class="section-title">Dokumentation</div>
</div>
<div class="grid">
<a class="card card-pitch" href="http://macmini:3012">
<div class="stripe stripe-pitch"></div>
<div class="card-body">
<h3>Pitch Deck</h3>
<p>Interaktives Investor Pitch Deck &mdash; ComplAI</p>
<div class="url">macmini:3012</div>
</div>
</a>
<a class="card card-core" href="http://macmini:8009/">
<div class="stripe stripe-docs-core"></div>
<div class="card-body">
<h3>Core Dokumentation</h3>
<p>Architektur, Auth, DevSecOps, RAG</p>
<div class="url">macmini:8009</div>
</div>
</a>
<a class="card card-compliance" href="http://macmini:8011/">
<div class="stripe stripe-docs-compliance"></div>
<div class="card-body">
<h3>Dokumentation</h3>
<p>AI-SDK, Auditor-Doku, SBOM</p>
<div class="url">macmini:8011</div>
</div>
</a>
</div>
<a class="card card-lehrer" href="http://macmini:8010/">
<div class="stripe stripe-docs-lehrer"></div>
<div class="card-body">
<h3>Lehrer Dokumentation</h3>
<p>Klausur, Voice, Agent-Core, Studio</p>
<div class="url">macmini:8010</div>
</div>
</a>
<!-- ── Core (rechts) ── -->
<div class="column">
<div class="column-header column-header-core">Core</div>
<a class="card card-compliance" href="http://macmini:8011/">
<div class="stripe stripe-docs-compliance"></div>
<div class="card-body">
<h3>Compliance Dokumentation</h3>
<p>AI-SDK, Auditor-Doku, SBOM</p>
<div class="url">macmini:8011</div>
</div>
</a>
<a class="card card-core" href="https://macmini:3008/dashboard">
<div class="stripe stripe-core"></div>
<div class="card-body">
<h3>Admin Core</h3>
<p>Infrastruktur, Services, Monitoring</p>
<div class="url">macmini:3008/dashboard</div>
</div>
</a>
<a class="card card-core" href="http://macmini:8009/">
<div class="stripe stripe-docs-core"></div>
<div class="card-body">
<h3>Dokumentation</h3>
<p>Architektur, Auth, DevSecOps, RAG</p>
<div class="url">macmini:8009</div>
</div>
</a>
</div>
</div>