main
698 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
ec3b0e26fd |
Merge branch 'chore/license-mapping-audit' — license mapping + audit script + DGUV + /staerken marketing page
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 37s
CI / test-python-voice (push) Successful in 31s
CI / test-bqas (push) Successful in 34s
|
||
|
|
19d1a56df4 |
feat(marketing): /staerken page with 7 USPs from IACE strategy — Task #19
Long-form differentiator page covering the seven sales arguments from project_marketing_website_3014_themes.md, all anchor-linkable for sales decks: #1 engine — Pattern-engine vs Excel-checklist #2 multi-markt — One risk assessment, all markets (CE+US+CN+JP) #3 folgegefahren — Operator-to-end-customer harm chain #4 public-domain — OSHA/NIST/EUR-Lex/BAuA as legal anchor #5 audit-suite — Engine self-introspection (cmd/iace-audit A-E) #6 made-in-germany — German export meets US Federal PD #7 tooling — LLM gap-review as co-pilot, not robo-lawyer Each section carries a "Belegt durch:" line pointing at the actual codebase artifact behind the claim, so the page reads as audit-friendly proof, not marketing fluff. Below the 7 differentiators a competitor comparison table (BreakPilot vs DesignSafe vs Pilz PASS vs Sick SD vs Sphera) and a closing block explaining the R1/R2/R3 license architecture with a pointer to /sdk/licenses. Navbar updated to surface the page between Plattform and CE-Prozess. This closes Task #19. With Task #29 + #7/#8 already in, the roadmap post-licence-classification work is fully landed. |
||
|
|
3934bdf814 |
docs(impressum): add Quellen & Lizenzen section with /sdk/licenses ref
Adds a "Quellen und Lizenzen der Compliance-Inhalte" section to the marketing-website Impressum naming the public sources the platform draws on (EUR-Lex, US Federal Code, ENISA/EDPB/BAuA, OWASP, OECD, eigene Texte) and pointing to /sdk/licenses for the full per-source breakdown. The Datenschutz and Impressum audit (Task #24 in breakpilot-compliance) confirmed no spurious license claims were buried in these pages. This change adds explicit transparency rather than removing anything, and is paired with the explicit disclaimer that the Pauschalvermerk does NOT replace work-level attribution — that is handled by the auto-footer in PDFs and the <SourceBadge> in the SDK frontend. |
||
|
|
dbd44ecc20 |
feat(licenses): postgres + qdrant license_rule backfill scripts
Two idempotent scripts that complete Task #22 (300k atomic_controls reclassification) across both Postgres DBs and all Qdrant collections on Mac Mini + Production. backfill_license_rule.py - iterative parent_control_uuid inheritance with cycle cap - dry-run + apply modes, per-iteration row counts - residual-orphan cluster report for manual review backfill_qdrant_license_payload.py - joins canonical_controls.id (or regulation_id) → license_rule - scrolls + grouped set_payload per rule (3 batches per collection) - supports both lookup tables (canonical_controls / regulation_registry) - supports managed Qdrant via --qdrant-api-key (Production) Backfill bilance: - Mac Mini canonical_controls: 0 NULL (was 279,384) across 314,811 rows - Mac Mini Qdrant atomic_controls_dedup: 44,987 points patched - Mac Mini bp_compliance_gesetze: 37,634 points patched - Mac Mini bp_compliance_datenschutz: 11,338 points patched - Production canonical_controls: 0 NULL (was 259,914) across 294,027 rows - Production Qdrant bp_compliance_gesetze: 55,836 patched - Production Qdrant bp_compliance_datenschutz: 18,980 patched - Production Qdrant bp_compliance_ce: 23,239 patched Schema migration 002_regulation_registry.sql + 252 registry rows were replicated to Production (was missing — only existed on Mac Mini). 20 BSI/DE-Gesetz entries added to registry to close Qdrant lookup gap. 100% deterministic classification achieved on both DBs via: - parent_control_uuid inheritance (94% coverage) - control_parent_links.source_regulation → regulation_registry - source_citation->>'source' → regulation_registry - canonical_processed_chunks ground truth (chunk-validated) - ungrouped LLM-aggregate Vorfahren → own works (Rule 3) [migration-approved] |
||
|
|
93687a32fe |
docs(licenses): freeze 3-rule license mapping + audit script
Defines the authoritative mapping from license_type to license_rule in docs/LICENSE_RULES.md, and adds scripts/audit_license_classification.py to surface classification gaps in registry/canonical_controls/Qdrant. Key finding from first audit run against bp-core-postgres + Qdrant: - regulation_registry: 232 rows, 224 rule=1, 8 rule=2, 0 rule=3; 36 rows without license_type (need backfill) - canonical_controls: 314,811 rows, 279,384 (89%) have NULL license_rule (target of Task #22 reclassification) - Qdrant atomic_controls_dedup: 100% of sampled points lack both license and license_rule payload fields - Qdrant bp_compliance_gesetze: 80.6% lack both fields - Qdrant bp_compliance_ce + bp_compliance: nearly clean Rule definitions clarified (was loosely remembered as "law / cite / rewrite"): - Rule 1 = verbatim, sovereign law (EU/DE/AT/CH/US, TRBS/TRGS/ASR, OSHA, NIST, EU guidelines, DGUV UVV) - Rule 2 = verbatim with attribution (CC-BY, Apache, OWASP, OECD AI Principles, ENISA) - Rule 3 = identifier citation only, no full text (DIN/EN/ISO, ANSI/UL/IEC, DGUV Regeln/Informationen/Grundsaetze, BSI, proprietary standards). Pipeline drops chunk_text when rule=3 in pipeline_adapter.py:147. The 4th category I had proposed ("R1-A") turned out to be already implemented as rule=2; the mapping doc reflects the actual code behaviour rather than the original 3-name verbal model. No schema change. No data migration in this commit — reclassification of the 279k controls is staged as Task #22 and will be cluster-based by source/regulation_id. |
||
|
|
2d9fec3a6d |
feat(pitch-print): 10 slide redesigns from parallel agent review
Build pitch-deck / build-push-deploy (push) Successful in 1m53s
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 34s
CI / test-python-voice (push) Successful in 36s
CI / test-bqas (push) Successful in 36s
Per the user's batch review of the rendered PDF. Five subagents ran in parallel, each owning a different slide file; this is the merged result. Slide 10 — Regulatory Landscape (PrintProductSlides) 8 regulatory categories now render as a 2×4 icon-tile grid (was a DataTable): Lock / Shield / Brain / Globe / ShieldCheck / Banknote / Heart / Users. 10 industry profiles now each show an icon next to the name (Factory for Maschinenbau Kernfokus, plus Heart, Banknote, ShoppingCart, Cpu, Wifi, Brain, ShieldCheck, BookOpen, Landmark, Building2). Slide 12 — How It Works (PrintProductSlides) Step rail and day timeline pulled together (was a big empty middle). Added a "Was Sie wann bekommen" 4-column benefit block in the bottom third (Shield/FileText/CheckCircle2/Zap), with mid-page "Median 14 Tage" callout. Slide 13 — Market TAM / SAM / SOM (PrintMarketSlides) Dropped MarketFunnel primitive. Left column: SVG nested concentric circles (TAM r=60 violet, SAM r=36 violet, SOM r=14 amber as Kernmarkt). Right column: three stacked TAM/SAM/SOM info cards with mono kicker, big EUR value, growth rate, one-line description; SOM card carries amber accent + "← unser Kernmarkt". Slide 14 — Pricing green box (PrintProductSlides) Net-effect callout expanded from 2 lines to a full breakdown: Pentests +€13k / CE-Risiko +€9k / Compliance-Zeit (−60%) +€15k / Audit-Vorber. (auto) +€9k / Legal-Stunden (−40%) +€5k / Schulungen +€4k. Italic footnote: "Plus Vermeidung von Bußgeldern und gewonnene RFQs." Slide 17 — Competition AppSec title (PrintCompetitionSlides) Title rewritten to investor-friendly framing — "Cyber-Security: BreakPilot ersetzt das ganze AppSec-Stack" (was SAST + DAST + SCA + Pentesting). Slide 18 — Team founder bios (PrintMarketSlides) Prose paragraphs replaced with 5 icon-bulleted skill/achievement lines per founder. Benjamin gets violet-50 tiles (Briefcase, RefreshCw, Handshake, Scale, Lightbulb). Sharang gets amber-50 tiles (Code, TrendingUp, CreditCard, ShieldCheck, Cpu). Photo + name + role + equity header preserved. Slide 23 — KPIs trajectory (PrintNewSlides) Each of the 8 KPI tiles now has a 15mm × 8mm SVG sparkline at the bottom showing the 5-year progression. Stroke color adapts per metric (violet default, emerald for cash/margin, red→emerald for EBIT/net-income across break-even). All-zero series fall back to em-dash. Awkward "0 → 0" prefix suppressed on missing-data tiles. Slide 28 — Regulatory Pillars (PrintAnnexSlides) Rebuilt as 4 actual vertical pillars (was 2×2 box grid). Each pillar has: capital (top, gradient tint, mono kicker + 01-04 number), shaft (white card with title + description + 2mm colored left border), base (bottom, darker tint, mono law citations). A shared horizontal "ground line" below all four pillars completes the architectural reference. Slide 29 — Architecture 3D (PrintDiagrams) Faked 3D depth via staggered right indent (0/2/4mm), inset top highlight and bottom seam shadows, per-layer drop-shadow with rising opacity. Layer 03 reads as the foundation; layer 01 floats on top. PlaneConnector chevrons replace the simple SVG down-arrows between tiers. Text stays horizontal. Slide 31 — Tech Stack (PrintNewSlides) Cards now have 14mm violet-gradient icon tiles (was 8mm flat), mono kicker number, 12pt category name, italic one-line blurb, and the techs as rounded chip tags (violet-50 / violet-200, mono 7.5pt) instead of a flat mono list. Title cleaned: "100 % " → "100%". All files under 500 LOC except PrintIntroSlides (515, preexisting issue). TypeScript clean, next build green, all 38 routes compile. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> |
||
|
|
a6f4ca88a4 |
fix(pitch-print): ComplAI brand, em-dash centering, fund fallback 400k
Build pitch-deck / build-push-deploy (push) Successful in 2m47s
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 43s
CI / test-python-voice (push) Successful in 36s
CI / test-bqas (push) Successful in 35s
Three universal fixes before per-slide redesigns: 1. Brand: new <ComplAI /> JSX component renders the product name correctly — 'Compl' in inherited text color, 'AI' in violet (#7c3aed), no slashes. Replaces the previous 'BreakPilot COMPL/AI/' literal in the Executive Summary p1 title. Page primitive's title prop now accepts ReactNode so JSX brand wordmarks work anywhere a title would. 2. Em-dash centering: Bullets primitive previously placed each em-dash marker via absolute positioning with a hardcoded 'top: 4pt', which drifted relative to font-size and looked off-center in the rendered PDF. Now uses display:flex on the <li> with a fixed-width column that vertically centers the 0.5pt rule on the first line height of the text. 3. Funding fallback: cover + The Ask now default to 400_000 (was 1_000_000) when no funding amount is in the data. New base case is a €400k Wandeldarlehen, not €1M equity. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> |
||
|
|
297eff949e |
Merge branch 'main' of ssh://gitea.meghsakha.com:22222/Benjamin_Boenisch/breakpilot-core
Build pitch-deck / build-push-deploy (push) Successful in 2m3s
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 40s
CI / test-python-voice (push) Successful in 38s
CI / test-bqas (push) Successful in 35s
|
||
|
|
01e2e0fc4b |
feat(pitch-deck): Finanzplan-Tooling + formel-getriebene Versionen Base/Bull/Bear
8 neue Skripte erweitern die Excel-Finanzpläne deutlich: - add-kunden-formulas: Neukunden-Lookup + kumulativer Churn (SUMPRODUCT-basiert) - add-price-formulas: jährliche Preiserhöhung Jan via Treiber - add-inflation-formulas: Inflation auf Betriebskosten + Büromiete-Logik - add-tantieme-and-explanations: Gründer-Tantieme 2028-2030 + Erläuterungen in Cohort-Analyse + Sensitivity-Sheets - apply-bueromiete: 1000€/Monat ab Sep 2026 mit Inflation - apply-number-formatting: Euro / Count / Percent per Label-Klassifikation - cleanup-finanzplan-labels: 'kategorie — '-Präfix entfernt - copy-extra-sheets: Charts/Cohort/Sensitivity/Hiring-Plan von Series-A auf 400k Base/Bull/Bear übertragen (inkl. 12 Chart-Objekten) Neue Excel-Dateien (für L-Bank Wandeldarlehen 400k Pitch): - Finanzplan-Wandeldarlehen-400k.xlsx (Base) - Finanzplan-Wandeldarlehen-400k-Bull.xlsx - Finanzplan-Wandeldarlehen-400k-Bear.xlsx - Finanzplan-Series-A-Ambitioniert.xlsx (Series-A Variante) Inhaltliche Anpassungen (400k Base/Bull/Bear): - Channel-Provision Bechtle/Cancom → Channel-Partner Provision, Format Euro - GuV: 'Steuerbares Einkommen' → 'Zu versteuerndes Einkommen (nach Verlustvortrag)', Formel um Zinserträge/-aufwand erweitert - IT-Recht/Datenschutzjurist auf 100% (6666 € statt 3333 €) - Series-A-Investor in WD-Sheet auf 0 € (nicht eingeplant in 400k Variante) - Mitarbeiter +1 Monat verschoben (außer Gründer = Okt 2026) - 3 Enterprise-Neukunden zusätzlich (Apr 2027, Jun 2027, Okt 2029) - Marketing-Agentur Cut ~33% pro Szenario (Base 4%, Bull 5%, Bear 2%) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> |
||
|
|
b4043b20b2 |
feat(pitch-print): TL;DR + Differentiators + KPIs + Tech Stack + P&L promoted
Build pitch-deck / build-push-deploy (push) Successful in 1m43s
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 33s
CI / test-python-voice (push) Successful in 31s
CI / test-bqas (push) Successful in 32s
Adds the 5 slides flagged as missing vs Claude Design (30 slides). Standard
PDF now matches Claude's slide count and structure.
New slides (PrintNewSlides.tsx):
- TL;DR / 30 SEKUNDEN — 4 quad cards (Scale / Sovereignty / Bidirectional /
Speed) with mono kicker, hero stat, body and ticker line. Slot 3, after the
exec summary.
- Differentiators — 4 under-the-hood cards (Traceability / Engine / Optimizer
/ EU-Trust-Stack) extracted from USP p2. Slot 9, after USP. Each card has
the lucide icon in a violet/amber tile, full body + bullets, and the mono
ticker line.
- KPIs (Trajektorie 2026 → 2030) — 8 hero tiles showing year-1 → year-5
transitions (ARR, customers, ARPU, employees, gross margin, EBIT, net
income, cash). Derived live from computeAnnualKPIs(fmResults). Slot 23.
- Tech Stack — 8-category grid (Frontend / Backend / Storage / AI-RAG /
Code-Scanning / Auth / Comms / DevOps), each with lucide icon tile +
category label + monospaced tech list. Slot 31, after Engineering.
USP p2 redesigned: now hero-sized closing loop only (the 4 cards moved to
Differentiators). Bigger LoopDiagram in a violet-tinted hero panel, 12mm
inner padding, more room for the hub body + bullets.
P&L Detail (PrintFinancialsPage) promoted from financial-only to standard
PDF. Kicker now 21 (was '17b'), subtitle rewritten ('Annualisierte GuV',
no longer 'Investor-only'). Empty-data fallback added so it doesn't crash
if fmResults isn't populated.
Anhang divider moved from PrintAnnexSlides.tsx to PrintNewSlides.tsx (was
pushing PrintAnnexSlides over the 500-LOC cap). Section list inside the
divider updated for the new numbering — now 12 sections from #18 GTM down
to #29 Glossary.
PrintDeck.tsx: BASE_PAGES bumped 30 → 35. Render order updated; hasFinancialDetail
flag removed (P&L always rendered); cap-table is the only remaining
financial-only conditional and stays suppressed for Wandeldarlehen.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
||
|
|
ad61fd3779 |
feat(pitch-print): add Anhang divider slide before appendix block
Build pitch-deck / build-push-deploy (push) Successful in 2m5s
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 35s
CI / test-python-voice (push) Successful in 35s
CI / test-bqas (push) Successful in 31s
Investors arriving at slide 16 (Customer Savings) currently jump straight into annex-strategy without any chapter break — they don't know the main pitch has ended and the appendix has started. Adds PrintAnnexDividerPage that sits between customer-savings and annex-strategy. Layout: Part II · Anhang BreakPilot · ComplAI ───────────────────────────────────────────────────────── 16 · Kapitelwechsel Anhang. (giant violet-dotted title, 74pt) ──────── Detail & Belege. (15pt lead) Auf den folgenden Seiten 17 GTM Strategie 20 Reg. Details 23 KI-Pipeline 18 Finanzplan 21 Architektur 24 Risiken 19 Treibervariablen 22 Engineering 25 Glossar ───────────────────────────────────────────────────────── BREAKPILOT · COMPLAI WANDELDARLEHEN 16 / 30 Uses .print-page-bg so the violet-tinted dotted background reads as the same chapter as the rest of the deck. Footer matches the standard Page primitive. BASE_PAGES bumped 29 → 30. Bilingual (DE/EN). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> |
||
|
|
d1b55cd65b |
feat(pitch-print): redesign Pricing slide as 3 distinct product cards
Build pitch-deck / build-push-deploy (push) Successful in 2m3s
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 42s
CI / test-python-voice (push) Successful in 35s
CI / test-bqas (push) Successful in 33s
The pricing slide previously rendered as a 4-column DataTable buried below
unit economics — the 3 tiers were hard to find. Rebuilt as the Claude Design
PREISE pattern: three prominent product cards side by side.
Each card:
- Mono tier label kicker (STARTER / PROFESSIONAL / ENTERPRISE) at top
- Target audience line ("<25 Mitarbeiter · Basis-Module" etc.)
- Hero price (€3.600 / €18.000 / ab €50.000) + /Jahr unit
- 4–5 feature checkmarks (green ✓)
- Tinted background per tier: violet-50 for Starter, white-gradient for
featured Professional, amber-50 for Enterprise
Professional card carries:
- 2px violet border (vs 1px on others)
- Drop shadow
- "BELIEBT" / "POPULAR" pill badge floating above its top edge in violet
Below the 3 cards, a compact 2-col footer:
- left: 4 Unit Economics tiles (~70% gross margin, ~3.5× LTV/CAC, etc.)
- right: emerald net-effect callout (+€30k per SME / yr)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
||
|
|
cb46372e52 |
fix(pitch-print): architecture diagram overflow — compact ServiceNode
Build pitch-deck / build-push-deploy (push) Successful in 2m1s
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 41s
CI / test-python-voice (push) Successful in 36s
CI / test-bqas (push) Successful in 34s
Infrastructure layer was being cut off (only the chip showed; the 3 inference service cards never rendered). Root cause: each tier was double-wrapped — an outer tinted layer card AND inner bordered FlowNode cards — which inflated the total height past A4 landscape. Replaces inner FlowNode (border + padding + footer rule) with a new flat ServiceNode used only inside the tinted layer wrappers: - no own border / no own padding - title 11pt → 10pt, kicker 7pt → 6pt - caps inner items to 4 max - mono tech footer in 6pt with hairline separator Also tightened the connectors between tiers: was a 12mm row of three VArrow SVGs each with its own padding, now a 5mm row of three compact down-arrow SVGs. Saves ~14mm of vertical space. Layer chip sizing reduced (7.5pt → 7pt, padding 1.5mm → 1mm) so each chip takes less of its layer card. Result: all three layers fit on one A4 landscape page with the LLM Inference / Embeddings / AI Tools cards visible. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> |
||
|
|
f1814fe8ec |
fix(pitch-print): USP overflow, How It Works rail, Assumptions, Architecture layer cards
Build pitch-deck / build-push-deploy (push) Successful in 2m4s
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 40s
CI / test-python-voice (push) Successful in 35s
CI / test-bqas (push) Successful in 30s
Five fixes per user review:
1. USP p1 overflow (stats were getting clipped). Tightened card spacing:
- icon tile 12mm → 9mm, moved inline next to title
- mono kicker for "SÄULE · COMPLIANCE" tags
- reduced paddings, title 13pt → 12pt, body 8.5pt → 8pt
- violet replaces indigo (already by alias, but explicit here)
2. USP p2 closing loop: was a plain tinted callout, now a 2-col hero panel
- left: violet circle around ∞, mono "DIE SCHLEIFE · ALWAYS IN SYNC",
bold headline (14pt), body
- right: white card containing the LoopDiagram with violet outline
- gradient violet→white→violet background for the panel
3. How It Works: replaced the floating-arrow StepStrip with a real
horizontal-rail timeline:
- Violet gradient connector line behind 4 numbered circles
- Each circle is a 14mm violet disc with the step number
- Title + body below each circle
Replaced the Time-to-Value callout with a dotted-rail timeline:
- 5 day markers (Tag 0/3/7/14/30) as violet pill chips on a dashed rail
- Stop label below each
- Mono header reads "Time-to-Value · Median 14 Tage · Worst Case 28 Tage"
4. Assumptions slide:
- "Skalare Annahmen" → "Treibervariablen des Finanzplans" (plain language)
- subtitle rewritten to explain the three-scenario sensitivity setup
instead of referencing internal fp_assumptions tables
- each category now a violet-bordered card with mono kicker + variable
count, italic instead of bare table
- sensitivity callout expanded with concrete runway impact numbers
5. Architecture diagram: layer chips per Claude Design pattern.
- Each tier wrapped in a tinted rounded card (violet for product +
inference, amber for gateway)
- "01 · APPLICATION LAYER" mono pill with italic sub-label
("User-facing services") next to it
- Gateway layer carries the LiteLLM Proxy title inline with subtitle
- Connector arrows kept between layers
Also fixes "Kleinstunternehmen" → "Kleinunternehmen" typo in solution
pillar 03 and the product pricing-logic callout.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
||
|
|
12a9fe1810 |
fix(pitch-print): drop Standort/HQ from cover key terms
Build pitch-deck / build-push-deploy (push) Successful in 1m51s
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 54s
CI / test-python-voice (push) Successful in 43s
CI / test-bqas (push) Successful in 38s
3-column grid now: Funding · Pre-Money/Maturity · Instrument. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> |
||
|
|
8b5b9905a7 |
fix(pitch-print): port Claude Design tokens — violet, Inter+JBMono, dotted bg
Build pitch-deck / build-push-deploy (push) Successful in 1m50s
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 33s
CI / test-python-voice (push) Successful in 30s
CI / test-bqas (push) Successful in 27s
Adapts the visual language from the Claude Design reference (light theme) while
preserving our left-rule Page header and split-block cover.
Color palette: indigo (#4f46e5) → violet (#7c3aed) as primary accent across all
slides. COLORS.indigo* aliases kept so the existing 9 slide files inherit the
new palette without edits. New explicit COLORS.violet50..900 names available
for future code.
Body text shifted from pure slate to deep purple-tinted (#1a0f34) per Claude
tokens.fg.
Typography:
- Body / headings: Inter (was Plus Jakarta Sans)
- Mono utility: JetBrains Mono — applied to kicker tags, page numbers, footer,
the "At a glance" stat block on the cover, and the cover key-term labels
- Mono class .print-mono added to print.css
Background:
- New .print-page-bg utility paints a violet-tinted radial gradient
(white → #f5efff → #ebdfff) with a subtle 24px dotted grid SVG overlay
- Applied to every Page and the cover's right pane
Page chrome:
- Kicker label switched to JetBrains Mono with wider letter-spacing (0.18em)
- Right-of-kicker rule fades violet→transparent (was flat slate)
- New 2px violet gradient bar (700→400→700) below the title/subtitle —
the Claude Design "purple bar" accent, scaled down for print
- Footer restyled: mono caps "BREAKPILOT · COMPLAI" left, version (violet) middle,
page number right
Cover:
- Left block now a violet vertical gradient (was flat indigo)
- All small labels ("Investor Brief", "Auf einen Blick", "Confidential",
"Key Terms", and the term labels) restyled to JetBrains Mono with wider tracking
- Right pane carries the violet-tinted dotted bg, matching the rest of the deck
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
||
|
|
cd23ebc3ba |
fix(pitch-print): density on Problem/Solution/Strategy, Ask reconciliation
Build pitch-deck / build-push-deploy (push) Successful in 1m42s
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 31s
CI / test-python-voice (push) Successful in 33s
CI / test-bqas (push) Successful in 34s
Per user review of the rendered PDF.
Problem: empty bottom-third on each card → added a bottom stat block per
column showing 3 pulled-out data points (e.g. "64% · 70% · 83%") with red
hero numerals. Description text trimmed since the stats now carry the punch.
Solution: pillar bodies were short, leaving large gaps between description
and the green stat at the bottom. Added 5 detail bullets per pillar (specific
tools, frameworks, behaviours) in the previously empty middle. Stat at the
bottom now reads as a real KPI tile, not a floating value.
Strategy: phase KPI was a tiny corner tag. Promoted it to a bottom
"Outcome" block with side-by-side 14pt numerals matching the phase tone
(2 Kunden / ARR €40k etc.). The bullets get more breathing room above.
The Ask reconciliation (was showing nonsense €4M pre / €5M post / 20%
investor share for a €200k Wandeldarlehen): detect convertible/SAFE/
Wandeldarlehen and swap the tiles to Funding / Discount / Maturity /
INVEST-grant. Equity rounds compute Pre/Post from amount × 20% assumed
investor share. Same conditional applied to the cover key-terms grid.
Pricing label "Was der Kunde zahlt vs. spart (KMU 50 MA, Jahr 1)" was
wrapping "1)" onto its own line — switched to a slash-separated form
("Kunde zahlt vs. spart · KMU 50 MA · Jahr 1") that fits on one line.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
||
|
|
f30ac73b79 |
fix(pitch-print): cover layout, Finanzplan data source, target_date
Build pitch-deck / build-push-deploy (push) Successful in 1m34s
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 30s
CI / test-python-voice (push) Successful in 30s
CI / test-bqas (push) Successful in 28s
Three critical fixes after reviewing the rendered PDF: Cover (was: indigo block collapsed to top, white content stacked below): - The .print-page class in print.css forces flex-direction: column !important, which broke the horizontal split. Wrap the cover content in a single grid container — the column-flex parent then has only one child so direction is irrelevant. Indigo block now runs full-height on the left. - Title reduced 88pt -> 60pt so "BreakPilot ComplAI." fits without wrapping. - Funding amount formatter now handles sub-€1M cases (€200k vs €0.2M). Finanzplan (was: "nicht verfügbar" on both pages 20-21): - page.tsx was querying the legacy pitch_fm_results table which isn't populated by the current pipeline. The interactive deck reads from fp_* tables. - Wire in lib/finanzplan/adapter.ts (finanzplanToFMResults) which bridges the live fp_* tables to FMResult[] — same source the interactive deck uses. - Fall back to live default fp_scenario if the version snapshot's fm_scenarios is empty. - adapter.ts: populate total_customers + new_customers from fp_kunden_summary (was hardcoded 0). The Ask: - target_date was rendering as raw ISO timestamp "2026-08-01T00:00:00.000Z"; now formatted as "Aug 2026" (locale-aware). - Hero funding amount uses same sub-€1M formatter. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> |
||
|
|
bb85ee2e27 |
fix(pitch-print): page count, Finanzplan loading, visual energy
Build pitch-deck / build-push-deploy (push) Successful in 1m59s
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 52s
CI / test-python-voice (push) Successful in 37s
CI / test-bqas (push) Successful in 36s
Two bug fixes plus the requested visual rework — the deck now looks like a pitch deck, not a research paper. Bugs: - BASE_PAGES corrected from 28 to 29; disclaimer no longer shows "29/28" - fmResults + fmAssumptions now load for the standard PDF, not only when financial=true; Finanzplan annex + KPI dashboard now render Visual rework (per user: "graphic elements, not just text"): - Cover: split layout — indigo block left (tagline + hero stats + version meta), white block right with oversized title and key terms - Modules: 12 lucide icons in indigo-50 tiles (ScanLine, ShieldCheck, FileText, ClipboardCheck, Users, UserCheck, AlertTriangle, Brain, Target, GraduationCap, TrendingUp, MessageSquare) - USP cards: icon-led card heads with FileSearch/ArrowLeftRight/Repeat/Layers/etc.; LoopDiagram SVG on the closing "Compliance ↔ Code" hub - How It Works: StepStrip primitive with visible right-arrows between steps - Market: nested-rectangle MarketFunnel (TAM > SAM > SOM) replaces three stacked boxes - Customer Savings: 4 hero KPIs + ComparisonBars (today vs. with BP) per cost item - The Ask: DonutChart for use-of-funds - Cap Table: DonutChart for equity distribution - Finanzplan p2: 2×2 chart grid — Revenue (bars), EBIT (bars, tone by sign), Cash balance (line+area), Headcount (bars) - Architecture: ArchitectureDiagram primitive (3 tiers, vertical arrows between tiers) - AI Pipeline: PipelineFlow primitive (4 stages, horizontal arrows) - Team: founder photos (32×32mm) added; falls back to initials if photo_url missing New primitives: - PrintCharts.tsx — BarChart, LineChart, ComparisonBars, DonutChart, ProgressBar, MarketFunnel - PrintDiagrams.tsx — FlowNode, VArrow, HArrow, StepStrip, ArchitectureDiagram, LoopDiagram, PipelineFlow All files under 500 LOC cap. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> |
||
|
|
0d5ebcd27a |
feat(pitch-print): redesign PDF investor brief from scratch
Build pitch-deck / build-push-deploy (push) Successful in 2m19s
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 35s
CI / test-bqas (push) Successful in 34s
Throws away the screen-deck-derived print system. Builds a new institutional-research aesthetic: - 12-col grid on A4 landscape, hairline rules, no colored bars, no icons - 3-color discipline: indigo (structural), emerald (positive), red (problem) - Plus Jakarta Sans 800 for hero numerals + titles; tabular numerals everywhere - 1-to-1 content parity with the interactive deck: full USP (8 cards), full competition matrix (45 features, 12 AppSec features, 8+6 competitor profiles), Finanzplan P&L grid + KPI dashboard, full glossary - 2-page slides where content demands (Exec Summary, USP, Competition, Finanzplan) - 28 base pages; +1 for Financial detail; +1 for Cap Table (suppressed on Wandeldarlehen) Files: - New: PrintIntroSlides, PrintProductSlides, PrintMarketSlides, PrintCompetitionSlides - Rewritten: PrintLayout (new primitives Page/KpiRow/TwoCol/ThreeCol/DataTable/MatrixGlyph/Callout), PrintAnnexSlides, PrintFinancialSlides, PrintDeck - Removed: PrintCoreSlides.tsx, PrintExtraSlides.tsx (obsolete) - print.css now sets Plus Jakarta Sans as the print font family - All files under 500 LOC cap Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> |
||
|
|
7d721a6787 |
feat(control-pipeline): BSI QUAIDAL Clean-Room ingestion (AI Act Art. 10)
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 40s
CI / test-python-voice (push) Successful in 36s
CI / test-bqas (push) Successful in 33s
Clean-Room derivation of 195 controls from BSI QUAIDAL (10 criteria + 15 building blocks + 30 measures + 140 metrics) for EU AI Act Art. 10 training-data quality compliance. - ingest_bsi_quaidal.py parses YAML frontmatter into a structural index (no protected prose stored on disk). - derive_quaidal_mcs.py rewrites each entry via local LLM (qwen3.5:35b-a3b) with a hard 4-gram plagiarism gate < 20%; achieved mean overlap 0.5%. - Migration 011 adds compliance.derived_controls table with full source provenance (framework, section, url, commit SHA, license note). - apply_quaidal_to_db.py UPSERTs YAML into DB. - Source repo (legal-sources/bsi-quaidal/) gitignored. Same pattern as IACE module DIN-reference handling: name the norm and section, never quote. Backed by BSI license clarification 2026-05: § 5 UrhG anwendbar, share:true im Frontmatter; Clean-Room derivation is the safe path. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> |
||
|
|
9a1ad87acd |
feat(marketing): savings-scan form -> compliance backend (real submit + polling)
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 39s
CI / test-python-voice (push) Successful in 31s
CI / test-bqas (push) Successful in 32s
- POST /api/scan/start: server-proxy zu api-dev.breakpilot.ai/saving-scan/start (kein CORS-Bypass, env-konfigurierbar via COMPLIANCE_BACKEND_URL) - GET /api/scan/status/<checkId>: server-proxy fuer Status-Polling - savings-scan/page.tsx: echte Submission + 5s-Polling + Progress-Bar + Consent- Checkbox + Error-Branch (skipped_tdm, failed) - Datenschutzhinweis im Disclaimer ergaenzt (§ 44b UrhG TDM-Respekt) Backend-Endpoint in breakpilot-compliance@6c223c7. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> |
||
|
|
911697bab4 |
feat(marketing): Saving-Section + Landingpages + Pipeline Lessons-Learned [split-required]
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 35s
CI / test-python-voice (push) Successful in 33s
CI / test-bqas (push) Successful in 35s
Marketing-Website - Neue SavingsSection auf Homepage: "Compliance entdeckt sechsstellige Einsparungen". Pitch-Position der Cookie-Audit-Cost-Optimization-Story fuer DAX-Konzern-Sales (BMW-Case-Style: 90 Vendors -> 25 nach Konsolidierung, EUR 500k-3M / Jahr). - /savings-scan: Kostenloser 5-Min-Saving-Scan-Form (URL + E-Mail). Form-Submit ist Placeholder, soll an Compliance-Backend gehaengt werden. - /savings-methodik: 4-Stufen-Erklaerung der Cookie-Tier-Inferenz + ehrliche Caveats (Listpreise != Vertragspreise, Media-Spend nicht enthalten) + Datenquellen. - Content-de + Content-en in content.ts beide um savings-Block ergaenzt und Section-Numerierung angepasst (03=Savings, 04=Deterministic). - LOC-Split: savings-Inhalte (DE+EN, ~100 LOC) in content.savings.ts ausgelagert damit content.ts unter 500-LOC-Hard-Cap bleibt. Control-Pipeline - LESSONS-LEARNED-mc-check-types.md fuer die parallele CRA-MC-Generation. Erklaert die TEXT/PROCESS/REVIEW-Klassifikation die im Compliance-Repo retrofitted wurde. Verhindert dass CRA-MCs denselben Defekt bekommen. Mapping-Heuristik fuer verification_method -> check_type, plus Backfill-Workflow fuer ~62 ambiguous Eintraege. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> |
||
|
|
9783657da3 |
feat(control-pipeline): incremental dedup + ENISA CRA ingestion
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 43s
CI / test-python-voice (push) Successful in 33s
CI / test-bqas (push) Successful in 37s
BatchDedup since-Parameter (services/batch_dedup_runner.py + api): - Neuer 'since: datetime' Param scoped Phase 1 + Phase 2 SQL auf created_at >= since. - Phase 2 checkpoint wird beim scoped Lauf geloescht (verhindert Skip neuer Atomics deren control_id alphabetisch unter dem stale last_id liegt). - 6-13x schneller fuer nachgeschobene Dokumente (19k statt 172k Atomics). - Doku: control-pipeline/docs/incremental-dedup.md. Neue Scripts: - gpre1_object_groups_incremental.py: Append neuer Objects an object_groups via bge-m3 nearest-neighbor (threshold default 0.85, empfehlbar 0.78 fuer breiteres Synonym-Matching). Pure INSERT/UPDATE, kein DELETE. - gpre2_master_controls_incremental.py: Non-destructive Master-Controls-Update. Existing MCs unangetastet (UUIDs + master_control_id bleiben), nur neue Members appended + neue MCs fuer Object-Groups die jetzt min-phases erreichen. - ingest_enisa_cra.py: Ingestion der 8 CRA-relevanten ENISA-Dokumente (Standards Mapping, EUCC-Implementation, NIS2 TIG, SRP FAQ, EUCC Eval Methodology, CVD Policies, Threat Landscape 2025). chunk_strategy=legal, requirement_strength=guidance|consultation_draft|evidentiary. Quelldaten: legal-sources/enisa/enisa_cra_single_reporting_platform_faq.html (PDFs sind .gitignore-gefiltert). Ergebnis dieser Pipeline-Iteration: - 1.296 neue CRA-Controls + 19.652 atomare Children - +362 neue Master-Controls, 10.017 existing erweitert - Total: 13.950 MCs, 620 CRA-MCs (vorher 566), 1.304 CRA-Atomics (vorher 841) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> |
||
|
|
47d7beeb52 |
Merge branch 'main' of ssh://gitea.meghsakha.com:22222/Benjamin_Boenisch/breakpilot-core
# Conflicts: # .gitignore |
||
|
|
63b195c0aa |
chore: ignore controls_backup_*.dump files
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> |
||
|
|
77993d0ea0 |
feat(pitch-deck): Finanzplan-Export nach Excel mit Live-Formeln und Charts
Build pitch-deck / build-push-deploy (push) Failing after 24s
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 5m28s
CI / test-python-voice (push) Successful in 4m0s
CI / test-bqas (push) Successful in 32s
Generiert pro Szenario (Wandeldarlehen 200k/Bear/Bull, 1 Mio Base/Bear/Bull) ein .xlsx mit 10 Tabs (Dashboard, Kunden, Umsatzerlöse, Personalkosten, Investitionen, Materialaufwand, Betriebliche Aufwendungen, Liquidität, GuV, Formelübersicht). Editierbare Eingaben bleiben rohe Werte; abgeleitete Zellen werden zu echten Excel-Formeln über Tabs hinweg, sodass das Bearbeiten von Inputs Personal/Opex/Liquidität/GuV neu berechnet. Dashboard-Tab fasst Jahres-KPIs zusammen und enthält fünf Charts (Umsatz/Material/Personal/EBIT YoY, Jahresüberschuss YoY, Liquidität, Headcount, Personalkosten monatlich). Run: PG_CONN=... pitch-deck/scripts/export-finanzplan.sh Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> |
||
|
|
9382d2a7a4 |
chore: bump next 15.1.0 → 15.5.16 across all apps (CVE-2026-44578)
Build pitch-deck / build-push-deploy (push) Failing after 23s
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 1m29s
CI / test-python-voice (push) Successful in 1m35s
CI / test-bqas (push) Successful in 1m26s
Patches unauthenticated SSRF in WebSocket upgrade handler. Applies to admin-core, pitch-deck, levis-holzbau, marketing-website. GHSA-c4j6-fc7j-m34r. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> |
||
|
|
b727f14011 |
Merge branch 'main' of ssh://gitea.meghsakha.com:22222/Benjamin_Boenisch/breakpilot-core
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 5m34s
CI / test-python-voice (push) Successful in 5m22s
CI / test-bqas (push) Successful in 28s
|
||
|
|
084beed348 |
feat(pitch-print): port remaining 15 slides for 1-to-1 PDF parity with deck
Build pitch-deck / build-push-deploy (push) Successful in 1m58s
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 34s
CI / test-python-voice (push) Successful in 31s
CI / test-bqas (push) Successful in 28s
Adds print versions for executive-summary, usp, regulatory-landscape, how-it-works, business-model, competition, customer-savings, annex-strategy, annex-finanzplan, annex-regulatory, annex-architecture, annex-engineering, annex-aipipeline, risks, annex-glossary across two new files. PrintDeck.tsx now renders slides in SLIDE_ORDER (minus 3 interactive-only slides: intro-presenter, ai-qa, annex-sdk-demo). Standard PDF: 25 pages. Financial PDF: 27 pages (or 26 for Wandeldarlehen, no cap-table). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> |
||
|
|
5510689710 |
fix(print): override globals.css body overflow:hidden and dark background
Build pitch-deck / build-push-deploy (push) Successful in 1m57s
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 34s
CI / test-python-voice (push) Successful in 33s
CI / test-bqas (push) Successful in 30s
globals.css sets html,body { height:100%; overflow:hidden; background:#0a0a1a }
with no media query. In print mode this clips all slides to one viewport
height (explaining the 2-page limit) and renders a black background.
Override with height:auto, overflow:visible, background:white in @media print.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
||
|
|
49e594bf38 |
fix(print): set height:210mm on block wrapper, not flex container
Build pitch-deck / build-push-deploy (push) Successful in 1m39s
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 32s
CI / test-python-voice (push) Successful in 30s
CI / test-bqas (push) Successful in 29s
Firefox doesn't honor height on flex containers in print mode — the container collapses to content height, causing all slides to fit on 2 pages. Moved the authoritative height to the display:block wrapper (.print-page-break) and changed .print-page to height:100% so it fills its reliably-sized block parent. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> |
||
|
|
583e54fabc |
fix(print): use CSS named pages + break-before for reliable Firefox pagination
Build pitch-deck / build-push-deploy (push) Successful in 1m30s
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 32s
CI / test-python-voice (push) Successful in 33s
CI / test-bqas (push) Successful in 30s
page: slide-page on each block wrapper forces Firefox to allocate a new physical page per slide — the spec-correct approach. break-before: page is belt-and-suspenders. Switched from break-after to break-before via adjacent sibling selector to avoid a blank trailing page. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> |
||
|
|
7f4b7da098 |
fix(print): add Firefox print-color-adjust prefix for background colors
Build pitch-deck / build-push-deploy (push) Successful in 1m34s
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 32s
CI / test-python-voice (push) Successful in 32s
CI / test-bqas (push) Successful in 40s
-moz-print-color-adjust: exact ensures Firefox doesn't strip background colors from headers, badges, and accent elements when printing. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> |
||
|
|
f3e54180f0 |
fix(print): wrap flex pages in block container to fix Chrome page breaks
Build pitch-deck / build-push-deploy (push) Successful in 1m38s
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 31s
CI / test-python-voice (push) Successful in 31s
CI / test-bqas (push) Successful in 32s
Chrome's print engine silently ignores break-after/page-break-after on flex containers. Wrapping each .print-page (flex) in a plain block .print-page-break element gives Chrome a reliable page break anchor. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> |
||
|
|
ae937a35d7 |
feat(cmp): Phase 3 — backend consent withdrawal + consent_id tracking
- ConsentBanner: save consent_id to localStorage after successful POST
- Footer: DELETE /api/consent/{id} on consent re-open (Art. 17 DSGVO)
- New proxy route: DELETE /api/consent/[id] → backend withdrawal endpoint
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
||
|
|
edac3aca6c |
Merge branch 'main' of ssh://coolify.meghsakha.com:22222/Benjamin_Boenisch/breakpilot-core
Build pitch-deck / build-push-deploy (push) Successful in 1m48s
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 30s
CI / test-python-voice (push) Successful in 29s
CI / test-bqas (push) Successful in 29s
|
||
|
|
fc4d5d8c56 |
fix(pitch-deck): use imported CSS for print styles instead of inline style tag
Inline <style> tags in React body are unreliable for @media print in Chrome. Move all print CSS to app/pitch-print/print.css imported via a layout.tsx — Next.js injects this as a proper <link> in <head>, which is guaranteed to be applied before print rendering. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> |
||
|
|
f5d4e3bd95 |
feat(cmp): active script blocking + DSE Interessenabwaegung
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 30s
CI / test-python-voice (push) Successful in 31s
CI / test-bqas (push) Successful in 31s
ScriptManager: two blocking mechanisms — injection of CONSENT_SCRIPTS after consent + activation of type="text/plain" data-consent scripts. Standard CMP blocking pattern ready for third-party analytics/marketing. DSE: add Interessenabwaegung (balancing test) for Art. 6(1)(f) DSGVO processing: Hosting and Server-Logfiles sections now document why legitimate interest outweighs data subject rights. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> |
||
|
|
9e3604fe31 |
Merge branch 'main' of ssh://gitea.meghsakha.com:22222/Benjamin_Boenisch/breakpilot-core
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 39s
CI / test-python-voice (push) Successful in 28s
CI / test-bqas (push) Successful in 31s
|
||
|
|
0c09b960b9 |
feat(cmp): Phase 2 complete — self-hosted fonts, ScriptManager, GeoIP, vendor UI
- Session ID via sessionStorage UUID - Self-host Google Fonts (Inter, Plus Jakarta Sans, JetBrains Mono) — eliminates third-party transfer to Google, no more DSGVO violation - ScriptManager component: consent-change listener for future analytics/marketing scripts - GeoIP via browser timezone (Intl.DateTimeFormat) + IP injection in proxy - Vendor-level consent UI: loads vendor config from backend, shows per-vendor toggles under each category, sends vendor_consents dict - DSE updated: Google Fonts section now says "lokal gehostet" - Config proxy route: GET /api/consent/config Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> |
||
|
|
cf18b1074a |
fix(pitch-deck): PDF print layout — fill page height, fix page breaks
Build pitch-deck / build-push-deploy (push) Successful in 2m2s
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 44s
CI / test-python-voice (push) Successful in 32s
CI / test-bqas (push) Successful in 33s
- Switch from inline pageBreakAfter to CSS class `.print-page` with explicit `page-break-after: always !important` so Chrome print preview creates a new page per slide (was collapsing to 2 pages) - Remove margin/box-shadow in @media print so A4 boundaries align - Content areas now use flex:1 so cards/pillars stretch to fill the full page height (no more blank void below content) - Remove conditional rendering on data-dependent slides — always render all 9 core pages - Larger font sizes throughout (11px body, 13px card titles) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> |
||
|
|
2e8cbfff3f |
feat(pitch-deck): add per-version PDF export (standard + financial)
Build pitch-deck / build-push-deploy (push) Successful in 1m49s
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 40s
CI / test-python-voice (push) Successful in 29s
CI / test-bqas (push) Successful in 29s
Adds /pitch-print/[versionId] — a server-rendered, print-CSS-optimized page that generates investor-ready PDFs via the browser's native print dialog (Save as PDF). Two variants per version: - Standard PDF (9 pages): Cover, Problem, Solution, Products, Market, Team, Milestones, The Ask - Financial PDF (+4 pages): adds Financials P&L table (aggregated from pitch_fm_results), Assumptions, Cap Table, Legal Disclaimer White background with indigo accents, A4 landscape via @page CSS, all color-rendered in print via print-color-adjust: exact. Auto-triggers window.print() 900ms after load. Admin toolbar visible on screen only. Export buttons added to /pitch-admin/versions/[id] detail page. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> |
||
|
|
f6489e7748 |
feat(cmp): Phase 2 — send scripts_blocked, scripts_released, cookies_set
ConsentBanner detects loaded scripts (analytics/marketing) and cookies after consent, sends them to the CMP backend for transparency tracking. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> |
||
|
|
519cc274bb |
docs: session handover — MC Quality + Gap Engine + RAG Ingestion (5 Tage)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> |
||
|
|
79810f4eb8 |
feat(cmp): GDPR-compliant DSE + consent re-open button
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 41s
CI / test-python-voice (push) Successful in 31s
CI / test-bqas (push) Successful in 29s
- Rewrite Datenschutzerklaerung: cookie section with bp_consent table, legal basis (Art. 6(1)(a) + §25 TDDDG), DPO, Hetzner hosting, Google Fonts DPF, retention periods, all data subject rights (Art. 15-21), supervisory authority (LfD Niedersachsen) - Add "Cookie-Einstellungen" re-open button in footer (Art. 7(3) DSGVO) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> |
||
|
|
5f193c8a72 |
feat(cmp): send extended consent data from ConsentBanner
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 35s
CI / test-python-voice (push) Successful in 34s
CI / test-bqas (push) Successful in 33s
Send consent_method, page_url, referrer, device_type, browser, os, screen_resolution and consent_scope with each consent record for vendor-agnostic compliance tracking. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> |
||
|
|
d13f4511cb |
feat(marketing-website): add BreakPilot marketing website with CMP integration
Multi-page marketing website positioned as "Deterministic Regulatory Engineering Platform": - 7 pages: Home, Plattform, CE-Prozess, Product Compliance, Architektur, Team, Preise - Platform Bridge animation (adapted from pitch-deck USP slide) - Cookie-Banner with consent-service integration (breakpilot-marketing site) - DE/EN language toggle + Dark/Light theme - Docker service on port 3014 [guardrail-change] PlatformBridgeSection.tsx added to loc-exceptions (816 LOC, SVG animation) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> |
||
|
|
937eca6b77 |
test(pipeline): Phase 6 — Golden Dataset + MC Quality Tests
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 35s
CI / test-python-voice (push) Successful in 35s
CI / test-bqas (push) Successful in 34s
- 20 manually verified golden controls with expected MC topics - Structural quality tests: min 10K MCs, max 300/MC, no orphans - Doc-check controls tests: 8 doc types covered, no empty questions - Quality thresholds: 90% accuracy, enforced by regression tests Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> |
||
|
|
0c1561d6cc |
feat(pipeline): derive 1,874 doc_check_controls from Master Controls
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 45s
CI / test-python-voice (push) Successful in 44s
CI / test-bqas (push) Successful in 40s
8 document types: DSE (571), Cookie (381), Löschkonzept (309), Widerrufsbelehrung (153), DSFA (147), AVV (125), AGB (113), Impressum (75). Each control has binary check_question + pass_criteria + fail_criteria. Derived via Claude Haiku from existing MCs filtered by regulation source. Table: compliance.doc_check_controls (local + production synced) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> |