Commit Graph

78 Commits

Author SHA1 Message Date
Benjamin Admin
c157e9cbca fix(pitch-deck): TTS language detection, technical FAQ, proper German umlauts + abbreviations
Some checks failed
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 34s
CI / test-python-voice (push) Successful in 33s
CI / test-bqas (push) Has been cancelled
TTS Language Bug:
- ChatFAB: detect response language from text content instead of UI language
- German text with umlauts/ß triggers German TTS even when UI is in English

Presenter Script (German TTS pronunciation):
- Add proper umlauts (ä/ö/ü) throughout German text
- Expand abbreviations for clear pronunciation:
  DSGVO → Datenschutz-Grundverordnung
  SAST → Static Application Security Testing
  DAST → Dynamic Application Security Testing
  SBOM → Software Bill of Materials
  VVT → Verarbeitungsverzeichnis
  TOMs → technisch-organisatorische Maßnahmen
  BSI → Bundesamt für Sicherheit in der Informationstechnik
  KMU → kleine und mittlere Unternehmen, etc.

Technical FAQ (12 new entries):
- BGE-M3, RAG, Qdrant, Cross-Encoder, Hybrid Search
- SAST/DAST, SBOM, BSI, Cloud Providers (SysEleven/Hetzner)
- Controls/Prüfaspekte, Policy Engine, VVT/TOMs/DSFA

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-17 01:18:03 +02:00
Benjamin Admin
9005a05bd7 fix(pitch-deck): version-aware financial model + layout fix + COMPLAI spelling
All checks were successful
Build pitch-deck / build-push-deploy (push) Successful in 1m2s
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 26s
CI / test-python-voice (push) Successful in 25s
CI / test-bqas (push) Successful in 26s
Critical fix: All financial slides now use the version's preferred scenario
instead of always defaulting to Base Case (1M). This ensures the
Wandeldarlehen version shows its own lean financial plan.

- useFinancialModel: add preferredScenarioId parameter
- PitchDeck: extract default scenario from previewData.fm_scenarios
- Pass preferredScenarioId to all 5 financial slides
- FinancialsSlide layout: remove empty right column, full-width charts
- Remove ScenarioSwitcher + unused slider from FinancialsSlide
- Fix COMPLEI → COMPLAI in presenter script (only TTS pronunciation differs)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-17 01:02:57 +02:00
Benjamin Admin
c99e35438c feat(pitch-deck): rewrite presenter script — emotional tone, correct numbers, all slides
All checks were successful
Build pitch-deck / build-push-deploy (push) Successful in 1m13s
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 32s
CI / test-bqas (push) Successful in 33s
- Fix "110 Gesetze" → "380+ Regularien" (all occurrences)
- Fix savings: 30k/20k → 13k/9k matching SavingsSlide KMU (55k total, 3.7x ROI)
- Fix "COMPLAI" → "COMPLEI" (pronunciation: like Ei, not AI)
- Remove "Frankreich/France" references
- Remove hardcoded financial projections (now reference computed data)
- Add missing slide scripts: usp, cap-table, customer-savings, annex-strategy,
  annex-finanzplan, annex-glossary, legal-disclaimer
- More emotional, positive, investor-focused tone throughout
- Fix "38 Verordnungen" → "380+ Regularien" in AI pipeline
- Fix module count: "12" → "65 Compliance-Module"

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-17 00:43:30 +02:00
Sharang Parnerkar
71040dcd33 revert: remove <en> tag mixed-language approach from presenter scripts
All checks were successful
Build pitch-deck / build-push-deploy (push) Successful in 13s
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 35s
CI / test-bqas (push) Successful in 33s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-16 22:37:23 +02:00
Sharang Parnerkar
0923d9b051 fix(presenter): strip <en> tags from displayed subtitle text
All checks were successful
Build pitch-deck / build-push-deploy (push) Successful in 1m5s
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 38s
CI / test-bqas (push) Successful in 29s
Tags are TTS-only markers; display should show plain text.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-16 22:32:02 +02:00
Sharang Parnerkar
909301a4de feat(pitch-deck): wrap English words with <en> tags for correct TTS pronunciation
All checks were successful
Build pitch-deck / build-push-deploy (push) Successful in 1m17s
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 34s
CI / test-bqas (push) Successful in 33s
DevSecOps, Onepager, SaaS, deployed, TypeScript, RegTech, OpenAI,
PostgreSQL, NVIDIA, GitLab, Full Compliance GPT, ERPNext — all marked
for English voice synthesis in German presenter script and FAQ.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-16 22:24:26 +02:00
Sharang Parnerkar
d548ce4199 fix(pitch-deck): refresh expired JWT from live DB session on cookie read
All checks were successful
Build pitch-deck / build-push-deploy (push) Successful in 1m13s
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 36s
CI / test-bqas (push) Successful in 34s
When jwtVerify fails (JWT expired), decode the token without expiry check
to recover sessionId, validate it against the DB, and reissue a fresh 24h
JWT. Fixes investors with old 1h JWTs being locked out on magic link re-click.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-16 22:18:52 +02:00
Sharang Parnerkar
0188a46afb fix(pitch-deck): fix TTS pronunciation of 25.000+ in presenter scripts
All checks were successful
Build pitch-deck / build-push-deploy (push) Successful in 1m10s
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 38s
CI / test-python-voice (push) Successful in 38s
CI / test-bqas (push) Successful in 34s
Replace '25.000+' with 'über 25 Tausend' in DE text so Edge TTS speaks
it correctly instead of 'fünfundzwanzig Punkt null null null plus'.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-16 22:14:57 +02:00
Sharang Parnerkar
d6be61cdcf fix(pitch-deck): align JWT expiry with session lifetime (24h)
All checks were successful
Build pitch-deck / build-push-deploy (push) Successful in 1m10s
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 32s
CI / test-bqas (push) Successful in 37s
JWT was set to 1h while the session cookie lived 24h. After 1 hour the
cookie persisted but jwtVerify failed, making /api/auth/me return 401
and the re-click redirect fall through to the already-used token error.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-16 22:09:12 +02:00
Sharang Parnerkar
d35e3f4705 fix(pitch-deck): split email.ts to fix client bundle including nodemailer
All checks were successful
Build pitch-deck / build-push-deploy (push) Successful in 1m40s
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 31s
CI / test-bqas (push) Successful in 43s
Client component (investors/new page) imported DEFAULT_MESSAGE etc. from
lib/email.ts which also top-level initialises nodemailer — webpack tried
to bundle fs/net/dns into the client chunk and failed.

Extract the pure constants + getDefaultGreeting into lib/email-templates.ts
(client-safe), keep nodemailer in lib/email.ts (server-only), update the
page to import from email-templates.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-16 20:56:36 +02:00
Benjamin Admin
06f868abeb fix(pitch-deck): replace all hardcoded financial numbers with computed values
Some checks failed
Build pitch-deck / build-push-deploy (push) Failing after 40s
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 36s
CI / test-bqas (push) Successful in 33s
All financial data now flows from the same compute engine (useFinancialModel).
No more hardcoded numbers in any slide — all values are derived from the
finanzplan database, ensuring consistency across all pitch deck versions.

- FinanzplanSlide: KPI table + charts now use computeAnnualKPIs() from FMResult[]
- BusinessModelSlide: bottom-up calc (customers × ACV = ARR) from compute engine
- AssumptionsSlide: Base case from compute, Bear/Bull scaled from Base
- New helper: lib/finanzplan/annual-kpis.ts for 60-month → 5-year aggregation
- PitchDeck: passes investorId to all financial slides for version-aware data

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-16 08:48:37 +02:00
Benjamin Admin
aed428312f feat(pitch-deck): bilingual email template + invite page with live preview
Some checks failed
Build pitch-deck / build-push-deploy (push) Failing after 1m6s
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 48s
CI / test-python-voice (push) Successful in 39s
CI / test-bqas (push) Successful in 40s
Email template (email.ts):
- Bilingual: German body + DE/EN legal footer
- Customizable greeting, message body, and closing
- Magic Link explanation box (hardcoded)
- Confidentiality & Disclaimer footer (hardcoded, bilingual)

Invite page (investors/new):
- Name is now required, Company is optional
- Editable fields: greeting, message, closing (with defaults)
- Live email preview panel (right side)
- Shows full email content before sending
- German UI labels

API (invite/route.ts):
- Passes greeting, message, closing to email function

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-16 08:34:23 +02:00
Benjamin Admin
32851ca9fb feat(pitch-deck): add confidentiality & disclaimer to magic link email
All checks were successful
Build pitch-deck / build-push-deploy (push) Successful in 1m16s
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 36s
CI / test-python-voice (push) Successful in 36s
CI / test-bqas (push) Successful in 33s
Adds legal footer to the investor invite email with:
- Confidentiality obligation (3 years, purpose limitation)
- Disclaimer (not an offer, projections only, risk of total loss)
- Jurisdiction: Konstanz, German law

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-16 08:23:05 +02:00
Benjamin Admin
cbee0b534f feat(pitch-deck): TheAsk — 40k/160k/200k tiles, BAFA+L-Bank hint, FAQ, skip CapTable for Wandeldarlehen
Some checks failed
Build pitch-deck / build-push-deploy (push) Successful in 1m8s
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 36s
CI / test-python-voice (push) Successful in 37s
CI / test-bqas (push) Has been cancelled
- Funding tiles: 40k investor (ab 20%) + 160k L-Bank = 200k, optional 400k row
- Remove Cap Table "Beispielrechnung" from TheAsk slide
- BAFA INVEST title: add hint that L-Bank+BAFA combination must be verified
- Skip CapTable slide entirely for Wandeldarlehen versions (useEffect auto-advance)
- FAQ: add Wandeldarlehen/Pre-Seed BW entry + BAFA+Pre-Seed compatibility entry
- FAQ: fix outdated BAFA INVEST percentage (20% → 15%) in investment-captable entry

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-16 08:20:29 +02:00
Sharang Parnerkar
032df7f401 fix(pitch-deck): coerce pg NUMERIC to Number globally — fixes Finanzen crash
All checks were successful
Build pitch-deck / build-push-deploy (push) Successful in 1m14s
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 38s
CI / test-bqas (push) Successful in 29s
The Finanzen slide crashed on mount with "a.toFixed is not a function".
Traced to UnitEconomicsCards.tsx:59 calling ltvCacRatio.toFixed(1),
where ltvCacRatio arrives as a string.

Root cause: the cached path in /api/financial-model/compute returns raw
rows from pitch_fm_results. node-postgres returns NUMERIC / DECIMAL
columns as strings by default, so lastResult.ltv_cac_ratio (and every
other *_eur / *_pct / *_ratio field) flows through the app as a string.
Arithmetic-heavy code paths survived on accidental string-coerce (`-`,
`/`, `*`), but direct method calls like .toFixed() don't coerce, which
is why Unit Economics was the visible crash site.

Fix at the boundary: register a single types.setTypeParser(NUMERIC, …)
on the pg Pool so every query returns real numbers. All our NUMERIC
values fit well inside Number.MAX_SAFE_INTEGER, so parseFloat is safe.

One-line change, no component-level defensive coercions needed.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-15 22:19:57 +02:00
Benjamin Admin
dc27fc5500 feat(pitch-deck): regulatory landscape based on real rag-documents.json
All checks were successful
Build pitch-deck / build-push-deploy (push) Successful in 1m10s
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 36s
CI / test-bqas (push) Successful in 37s
Complete rewrite of Slide 7:
- 10 real VDMA/VDA/BDI industry sectors (was 11 mixed categories)
- 7 key EU regulations as columns (DSGVO, AI Act, NIS2, CRA,
  Maschinenverordnung, Data Act, Batterieverordnung)
- Actual document counts per industry (244 horizontal + sector-specific)
- Last column: total applicable documents (not regulation count)
- KPIs: 320 docs, 244 horizontal, 65 sector-specific, 10 sectors
- Footer explains horizontal vs sector-specific logic
- Subtitle: 320 Dokumente im RAG — 10 Industriesektoren

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-15 19:21:07 +02:00
Benjamin Admin
9736476a0c feat(pitch-deck): legal disclaimer slide + projection footer on financial slides
New DisclaimerSlide (last slide):
- Full liability disclaimer (German/English)
- Confidentiality clause (purpose limitation, 3yr duration, Konstanz jurisdiction)
- Status as private individual in founding preparation

ProjectionFooter component on 4 financial slides:
- FinancialsSlide, TheAskSlide, FinanzplanSlide, CapTableSlide
- "Alle Finanzdaten sind Planzahlen" disclaimer

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-15 18:00:08 +02:00
Benjamin Admin
6b52719079 feat(pitch-deck): rename Traction → Meilensteine, update milestones data
All checks were successful
Build pitch-deck / build-push-deploy (push) Successful in 1m10s
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 36s
CI / test-bqas (push) Successful in 36s
- i18n: Traction & Meilensteine → Meilensteine / Milestones
- slideNames updated (DE + EN)
- Chat display name updated
- Milestones data replaced via MCP (both versions):
  13 milestones chronologically: domains, DPMA, IHK, prototype,
  pilot customers, RAG pipeline, EUIPO, L-Bank, Gründerzuschuss,
  GmbH founding, onboarding, App Store, distribution
- Metrics updated: 385 docs, 25k controls, 12 modules, etc.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-15 16:20:47 +02:00
Benjamin Admin
d359b7b734 fix(pitch-deck): HowItWorks line behind icons, remove France refs, SOM label
All checks were successful
Build pitch-deck / build-push-deploy (push) Successful in 1m6s
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 30s
CI / test-bqas (push) Successful in 30s
- Connection line: starts/ends between icons, opaque icon background
- Remove all "oder Frankreich/or France/oder FR/or FR" references
- Market subtitle: remove "Der Maschinenbau"
- SOM label: add "(nur Maschinen- und Anlagenbauer als Kernmarkt)"

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-15 13:46:21 +02:00
Benjamin Admin
adf3bf8301 feat(pitch-deck): USP slide redesign + add to sidebar
Some checks failed
Build pitch-deck / build-push-deploy (push) Failing after 20s
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 32s
CI / test-bqas (push) Successful in 33s
- USP added to slideNames (DE+EN) and chat display names
- Circular layout: BreakPilot hub center, rotating ring,
  Compliance & Code sections inside circle
- 4 capability cards in corners connected by dashed lines
- Removed variant toggle (kept variant A design)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-15 13:04:06 +02:00
Benjamin Admin
1b5ccd4dec feat(pitch-deck): solution text fixes + USP bridge 3 variants
All checks were successful
Build pitch-deck / build-push-deploy (push) Successful in 1m5s
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 36s
CI / test-python-voice (push) Successful in 38s
CI / test-bqas (push) Successful in 32s
- Solution: 30k → 15k+ EUR per year per application
- Solution: DE oder FR → Deutschland
- USP title: Unser USP → USP
- USP bridge: 3 switchable variants (A: circular loop,
  B: infinity loop, C: hexagonal hub) with toggle buttons

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-15 12:57:30 +02:00
Benjamin Admin
b5d8f9aed3 feat(pitch-deck): add USP slide + update cover and problem texts
All checks were successful
Build pitch-deck / build-push-deploy (push) Successful in 1m8s
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 28s
- Cover: remove "für den Maschinenbau" from tagline
- Problem subtitle: Maschinenbauer → Deutsche und europäische Unternehmen
- New USP slide after Solution: bridge between compliance docs/audits
  and actual code implementation — RFQ verification, bidirectional sync,
  automated process compliance, continuous instead of annual checks

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-15 12:44:32 +02:00
Benjamin Admin
93e319e9fb feat(pitch-deck): rewrite Problem slide cards for investors
Some checks failed
Build pitch-deck / build-push-deploy (push) Failing after 8s
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) Failing after 8s
CI / test-python-voice (push) Failing after 5s
CI / test-bqas (push) Failing after 5s
- Card 1 (KI-Dilemma): clearer framing of sovereignty vs competitiveness
- Card 2: Patriots Act → Patriot Act + FISA 702, Schrems II reference
- Card 3: 50.000+ EUR → Nicht tragbar / Unsustainable, focus on
  AI Act, NIS2, CRA since 2024, competitive disadvantage vs US/Asia,
  supply chain costs, geopolitical pressure
- Quote updated: Maschinenbauer → Produzierende Unternehmen

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-15 07:59:59 +02:00
Benjamin Admin
e5d0386cfb feat(pitch-deck): add FISA 702 FAQ entries for investor agent
All checks were successful
Build pitch-deck / build-push-deploy (push) Successful in 1m1s
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 32s
CI / test-bqas (push) Successful in 26s
5 new FAQ entries covering:
- FISA 702 basics (PRISM, Upstream, Schrems II)
- EU cloud region myth (extraterritorial US law)
- DSFA contradiction (risk acceptance vs risk elimination)
- Market opportunity (structural independence)
- BreakPilot architecture (BSI, SysEleven, Hetzner)

Also: middleware fix to allow admin sessions on investor routes
(enables chat in preview mode)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-15 00:27:47 +02:00
Sharang Parnerkar
8b2e9ac328 content(pitch-deck): tidy slide text — remove OVH, generalize issue tracker, add live support, Mac Studio option
All checks were successful
Build pitch-deck / build-push-deploy (push) Successful in 1m4s
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 34s
CI / test-bqas (push) Successful in 32s
Solution slide:
- Continuous Code Security: "Jira tickets" -> "tickets in the issue tracker of your choice"
- German Cloud / Full Integration: removed OVH (now "BSI cloud DE or FR"),
  removed "AI task creation from audio", added "Live support via Jitsi (video) and Matrix (chat)",
  "Mac Mini" -> "Mac Mini/Studio"

Products / Modular toolkit slide:
- Regional bubble: "OVH FR" -> "FR"

How It Works:
- Cloud step: removed OVH and "pre-configured Mac Mini" mentions

Engineering deep dive:
- "Docker Containers" stat -> "Services"; "Coolify -> Hetzner" -> "orca -> Hetzner"
- "Dockerfiles / Fully containerized" stat -> "Infra Components / orca (Rust) + infisical + pg + qdrant"
- devopsStack: Coolify -> orca (Rust), Docker Compose -> Private Registry (registry.meghsakha.com),
  HashiCorp Vault -> Infisical, EU-Cloud list drops OVH
- Service Architecture Infrastructure section: add orca (Rust), Infisical, Private Registry
- Footer note drops OVH

Chat / Presenter (consistency):
- chat/route.ts system prompt: OVH removed, Jira-Integration -> Issue-Tracker-Integration
- presenter-faq.ts + presenter-script.ts: OVH references removed across all answers,
  Jira mentioned alongside GitLab/Linear/Gitea as examples, Mac Mini -> Mac Mini/Studio

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 16:14:40 +02:00
Benjamin Admin
512088ab93 feat(pitch-deck): HTTPS via Nginx reverse proxy on port 3012
Some checks failed
Build pitch-deck / build-and-push (push) Failing after 56s
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 33s
CI / Deploy (push) Failing after 4s
- Add Nginx SSL server block for pitch-deck on port 3012
- Route through Nginx instead of direct container port
- Restore secure cookie flag (requires HTTPS)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 17:13:52 +02:00
Benjamin Admin
32b5e0223d fix(pitch-deck): use explicit PITCH_SECURE_COOKIE flag for cookie security
HTTP access on local network was blocked by secure cookie flag when
NODE_ENV=production. Now requires explicit opt-in via env var.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 17:11:36 +02:00
1c3cec2c06 feat(pitch-deck): full pitch versioning with git-style history (#4)
Some checks failed
Build pitch-deck / build-and-push (push) Failing after 1m8s
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 32s
CI / Deploy (push) Failing after 4s
Full pitch versioning: 12 data tables versioned as JSONB snapshots,
git-style parent chain (draft→commit→fork), per-investor assignment,
side-by-side diff engine, version-aware /api/data + /api/financial-model.

Bug fixes: FM editor [object Object] for JSONB arrays, admin scroll.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-10 07:37:33 +00:00
Benjamin Admin
ee5241a7bc merge: gitea/main — resolve pitch-deck conflicts (accept theirs)
Some checks failed
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 37s
CI / test-bqas (push) Successful in 34s
CI / Deploy (push) Failing after 5s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-09 14:43:32 +02:00
c7ab569b2b feat(pitch-deck): admin UI for investor + financial-model management (#3)
All checks were successful
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 30s
CI / test-bqas (push) Successful in 30s
CI / Deploy (push) Successful in 2s
Adds /pitch-admin dashboard with real bcrypt admin accounts and full
audit attribution for every state-changing action.

- pitch_admins + pitch_admin_sessions tables (migration 002)
- pitch_audit_logs.admin_id + target_investor_id columns
- lib/admin-auth.ts: bcryptjs, single-session, jose JWT with audience claim
- middleware.ts: two-cookie gating with bearer-secret CLI fallback
- 14 new API routes (admin-auth, dashboard, investor detail/edit/resend,
  admins CRUD, fm scenarios + assumptions PATCH)
- 9 admin pages: login, dashboard, investors list/new/[id], audit,
  financial-model list/[id], admins
- Bootstrap CLI: npm run admin:create
- 36 vitest tests covering auth, admin-auth, rate-limit primitives

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 10:36:16 +00:00
645973141c feat(pitch-deck): passwordless investor auth, audit logs, snapshots & PWA (#2)
All checks were successful
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 27s
CI / test-python-voice (push) Successful in 25s
CI / test-bqas (push) Successful in 27s
CI / Deploy (push) Successful in 6s
Adds investor-facing access controls, persistence, and PWA support to the pitch deck:

- Passwordless magic-link auth (jose JWT + nodemailer SMTP)
- Per-investor audit logging (logins, slide views, assumption changes, chat)
- Financial model snapshot persistence (auto-save/restore per investor)
- PWA support (manifest, service worker, offline caching, branded icons)
- Safeguards: email watermark overlay, security headers, content protection,
  rate limiting, IP/new-IP detection, single active session per investor
- Admin API: invite, list investors, revoke, query audit logs
- pitch-deck service added to docker-compose.coolify.yml

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 08:48:38 +00:00
Benjamin Admin
68692ade4e fix: DB Pool 5→20 + KPI/Charts Skip DB-Load
Pool-Size von 5 auf 20 erhöht (Connection-Exhaustion bei
parallelen Finanzplan-Queries + Compute + API-Calls)

KPIs/Charts Tabs laden keine DB-Daten (virtual tabs,
Daten sind hardcoded) → sofortiges Rendering

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 23:56:40 +01:00
Benjamin Admin
159d07efd5 feat: Glossar-Folie mit 27 Abkürzungen in 4 Kategorien
Letzte Folie "Glossar & Abkürzungen":
- Code Security & DevSecOps: SAST, DAST, SBOM, DevSecOps, SCA, CI/CD, AppSec
- Compliance & Datenschutz: DSGVO, VVT, TOMs, DSFA, DSR, DSB, ISMS
- EU-Regulierungen: AI Act, CRA, NIS2, MVO, TISAX
- Geschäftskennzahlen: ARR, MRR, CAC, LTV, ARPU, SaaS, ESOP, ROI

Jede Abkürzung mit ausgeschriebenem Namen + Kurzbeschreibung (DE+EN)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 23:03:27 +01:00
Benjamin Admin
06431be40d feat: Kundenersparnis-Folie + Savings FAQ
Neue Folie "Kundenersparnis" mit 3 Unternehmenstypen:
  KMU (25 MA): 97.750→44.530 = 53.220 EUR Ersparnis (ROI 9,1x)
  Mittelstand (100 MA): 419.500→193.880 = 225.620 EUR (ROI 12,6x)
  Konzern (500+ MA): 2.113.500→1.074.080 = 1.039.420 EUR (ROI 17,4x)

Detaillierte Aufschlüsselung pro Kostenposition:
  Pentests pro Anwendung, CE-SW-Risiko pro Produkt,
  Compliance-Team, Entwickler-Produktivität (IDC: 19% Zeitverlust),
  TISAX/ISO, CRA/NIS2, Incident Response

2 neue FAQs: savings-detail (Priority 10) + savings-pentest
System-Prompt angepasst mit konkreten Zahlen

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 22:54:07 +01:00
Benjamin Admin
a66b76001b fix: Sortierung Personalkosten + Umlaute DB + Summenzeilen
- Gründer immer sort_order 1+2, dann nach start_date
- Beide Gründer exakt gleiches Gehalt (7.000 EUR/Mo ab Jan 2027)
- Alle Pos-Namen durchnummeriert (Pos 3 bis Pos 35)

Umlaute in DB-Labels (Liquidität, GuV, Betriebliche):
  Umsatzerloese→Umsatzerlöse, UEBERSCHUSS→ÜBERSCHUSS,
  Koerperschaftsteuer→Körperschaftsteuer, etc.
Engine-Labels synchron aktualisiert.

Summenzeile (SUMME) als tfoot für:
  Personalkosten, Materialaufwand, Betriebliche Aufwendungen,
  Investitionen, Sonstige Erträge

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 21:22:45 +01:00
Benjamin Admin
3188054462 feat: Cap Table Folie + INVEST 20% + ESOP + Gründergehälter
Neue Folie "Investition & Cap Table" nach The Ask:
- Pie Chart: Gründer 75%, Investor 19,6%, ESOP 5,4%
- Pre-Seed Details: 4M Pre-Money, 975k Investment, 4,975M Post-Money
- Gründergehälter: 0 (2026) → 7k (2027) → 8k (2028) → 9,1k (2029+)
- Gewinnverwendung: 100% Reinvestition, kein Dividende bis Series A
- INVEST-Programm (BAFA): 20% Zuschuss = 195.000 EUR zurück
- ESOP: 5,4% für Schlüsselmitarbeiter, 4J Vesting, 1J Cliff
- Series A Ausblick: 15-25M Bewertung bei 3M+ ARR

Finanzplan: Gründer 7.000 EUR/Mo ab Jan 2027, 14% jährl. Erhöhung

FAQs: Cap Table + Gewinnverwendung als Fließtext

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 18:20:02 +01:00
Benjamin Admin
5fd65e8a38 feat: Steuerberechnung in GuV — KSt + GewSt + Verlustvortrag
Stockach 78333, Hebesatz 350%:
- Gewerbesteuer: 3,5% × 3,5 = 12,25%
- Körperschaftsteuer: 15% + 5,5% Soli = 15,825%
- Gesamt: ~28,08% auf den Gewinn

Verlustvortrag:
- Verluste werden kumuliert und mit künftigen Gewinnen verrechnet
- Bis 1 Mio EUR: 100% verrechenbar
- Über 1 Mio EUR: nur 60% (Mindestbesteuerung)

GuV-Zeilen: Gewerbesteuer, Körperschaftsteuer, Steuern gesamt,
Ergebnis nach Steuern, Jahresüberschuss

Liquidität: Steuern als monatliche Auszahlungen (1/12 des Jahres)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 17:07:09 +01:00
Benjamin Admin
34d2529e04 feat: Investor Agent — FAQ als LLM-Kontext statt Direkt-Streaming
Architektur-Umbau: FAQ-Antworten werden NICHT mehr direkt gestreamt.
Stattdessen werden die Top-3 relevanten FAQ-Einträge als Kontext
ans LLM übergeben. Das LLM interpretiert die Frage, kombiniert
mehrere FAQs bei komplexen Fragen und antwortet natürlich.

Vorher: Frage → Keyword-Match → FAQ direkt streamen (LLM umgangen)
Nachher: Frage → Top-3 FAQ-Matches → LLM-Prompt als Kontext → LLM antwortet

Neue Funktionen:
- matchFAQMultiple(): Top-N Matches statt nur bester
- buildFAQContext(): Baut Kontext-String für LLM-Injection
- faqContext statt faqAnswer im Request-Body
- System-Prompt Anweisung: "Kombiniere bei Bedarf, natürlicher Fließtext"

Behebt: Komplexe Fragen mit 2+ Themen werden jetzt korrekt beantwortet

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 10:57:47 +01:00
Benjamin Admin
928556aa89 feat: Bechtle/CANCOM Channel-Strategie detailliert auf Strategy-Folie + FAQ
Strategy-Folie: Neue Sektion "Zwei Wege zum Mittelstand"
- CANCOM Cloud Marketplace: TecDAX, ISV-Partnerprogramm, 3-6 Monate
  bis Listing, sofort national sichtbar, hunderte Vertriebsmitarbeiter
- Bechtle Systemhäuser: 15.000 MA, 85+ Standorte, 70.000 Kunden,
  regionaler Einstieg → lokaler Champion → nationale Listung (12-18 Mo)
- Quote: "Direktvertrieb skaliert linear — Channel exponentiell"

FAQ aktualisiert: Vollständige Bechtle/CANCOM-Erklärung als Fließtext
mit konkreten Zahlen und Timeline für Investoren

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 09:45:30 +01:00
Benjamin Admin
720493f26b feat: Firmenstrategie — neue Folie + Channel-first + 35 Rollen überarbeitet
Neue Folie "Anhang: Strategie":
- USP-Darstellung: Code Security vs Compliance vs BreakPilot (3 Kacheln)
- 4 Phasen: Foundation → Traction → Scale → Leadership
- Channel-first-Argument: Bechtle/CANCOM statt Sales-Army
- Firmenaufbau von 5 auf 35 mit ARR-Zielen pro Phase

35 Positionen (DB) neu strukturiert:
- Phase 1: Security Engineer + CE-Risikoingenieur (Produkt-Fokus)
- Phase 2: Channel Manager Bechtle (Monat 6!) + DevSecOps + KI
- Phase 3: Erster Direktvertrieb + Compliance-Jurist + Pentester
- Phase 4+5: VP Sales, Enterprise, EU-Expansion, Developer Relations

Neue FAQs:
- competitor-focus: Deutsche Wettbewerber + Source Code Security (Priority 10)
- strategy-channel-first: Bechtle/CANCOM Channel-Strategie
- team-hiring-order: Aktualisiert mit neuer Reihenfolge

Sharang Parnerkar korrigiert (DB).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 09:17:32 +01:00
Benjamin Admin
ab13254636 fix: Investor Agent — Fließtext statt Bulletlisten + deutsche Rollen
System-Prompt: "Antworte wie ein Mensch im Gespräch, keine Bulletlisten,
erkläre das WARUM, TTS-optimiert"

Alle 6 Team-FAQs + Module-FAQ als natürlicher Fließtext umgeschrieben:
- Deutsche Rollennamen (Vertriebsmitarbeiter, Kundenbetreuer, etc.)
- Begründungen eingebettet ("Der Grund ist...", "Das haben wir bewusst...")
- Übergangssätze für natürlichen Redefluss
- 3-5 Absätze pro Antwort statt Aufzählungen

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 08:44:06 +01:00
Benjamin Admin
104a506b6f feat: Investor Agent FAQ — Team-Aufbau + 12 Module + System-Prompt
6 neue FAQ-Einträge:
- team-structure: 35-MA Organigramm mit Departmentverteilung
- team-hiring-order: Einstellungsreihenfolge Year 1-5 mit Logik
- team-why-compliance-first: Warum DSB vor Engineers (DataGuard/heyData Muster)
- team-competitor-comparison: Vanta/Drata/DataGuard/heyData/Sprinto/Delve Teams
- team-engineering-ratio: 37% Engineering, warum nicht mehr
- modules-overview: Alle 12 Module einzeln aufgezählt

System-Prompt (Chat API) komplett aktualisiert:
- 12 Module statt 65+
- 110 Gesetze, 25.000 Prüfaspekte
- Strategisches Dilemma als Kernproblem
- Finanzplan-Zahlen: 1.200 Kunden, 10M ARR, Break-Even 2029
- Team-Aufbau als Kernbotschaft #8

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 08:28:00 +01:00
Benjamin Admin
b5d855d117 feat: Presenter Vor/Zurück-Spulen mit Folien-Sync
- prevSlide() in usePresenterMode: springt zur vorherigen Folie,
  stoppt aktuelle Audio, startet Präsentation der vorherigen Folie
- SkipBack Button in PresenterOverlay neben SkipForward
- Beide Buttons springen zur korrekten Folie UND starten die Audio

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 21:57:23 +01:00
Benjamin Admin
1bd57da627 feat: Presenter-Script aktualisiert + COMPLAI + Cookie-Generator (12 Module)
Presenter-Script komplett synchronisiert:
- COMPLAI statt ComplAI überall
- 12 Module aufgezählt (inkl. DSR, Consent, Notfallpläne, Cookie-Generator)
- 110 Gesetze statt 84
- 25.000 Prüfaspekte statt Controls
- SOM 24 Mio. statt 7,2 Mio.
- Gründung Jul/Aug 2026 statt Q4
- Umlaute korrigiert (standardmäßig, wählbar, Lücken, abschließen)

Folie 3 (Cover): COMPLAI groß über BrandName-Komponente
Folie 7: +Cookie-Generator als 12. Modul
Onepager: +Cookie-Generator
DB: Metrics auf 12 Module

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 21:46:06 +01:00
Benjamin Admin
f2b225106d fix: Umlaute überall korrekt + Meilenstein-Daten aktualisiert
Umlaute: ä, ö, ü in i18n.ts, presenter-script.ts, presenter-faq.ts
  (oe→ö, ae→ä, ue→ü, ~60 Ersetzungen gesamt)

Meilensteine (DB):
  - Plattform-Entwicklung: Januar 2026
  - Compliance SDK 8 Module: März 2026
  - RAG 110 Regularien: April 2026
  - 2 Pilottestkunden: Januar bis Juli 2026
  - GmbH-Gründung: Jul/Aug 2026

KI-Pipeline: 110+ Verordnungen, 25.000+ Prüfaspekte, 1.500+ Pflichten

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 19:33:47 +01:00
Benjamin Admin
11c0c1df38 fix: Liquidität — operativer Überschuss ohne Kapitaleinzahlungen
Überschuss = NUR operativer Cashflow:
  Einzahlungen: Umsatz + Sonst.Erträge + Anzahlungen (OHNE EK/FK)
  Auszahlungen: Material + Personal + Sonstige + Steuern (OHNE Kredit)
  = Operativer Überschuss

Kontostand = Vormonat + Operativer Überschuss + Finanzierung
  Finanzierung = EK + FK - Kreditrückzahlungen (separat)

So zeigt der Überschuss die echte operative Performance,
die Kapitaleinzahlung erscheint nur im Kontostand.

Marketing: 5.000€/Mo ab Jul 2027 (statt 20k)
Alle Werte Math.round() — ganzzahlig

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 17:40:50 +01:00
Benjamin Admin
f849fd729a fix: Liquidität Kontostand + ganzzahlig + Jahresspalte
- Kontostand/LIQUIDITAET: Jahresspalte zeigt Dez-Wert (nicht Summe)
- Alle Werte ganzzahlig (keine Nachkommastellen)
- Engine: Brutto, Sozial, AfA, Material alles Math.round()
- formatCell: immer maximumFractionDigits: 0
- GuV: Jahreswerte gerundet

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 17:26:30 +01:00
Benjamin Admin
c7236ef7e8 fix: Onepager Textänderungen + Prüfaspekte
- CE-SW-Risiko: "auf Code-Basis schon in der Entwicklung"
- "Compliance GPT" ohne "Echtzeit"
- Problem +Bullet: "EU-Regulierung unterscheidet nicht klein/groß"
- Sicherheitskontrollen → Prüfaspekte (Hero + KPI-Kachel)
- Pricing: "Startup" ohne "/ <10"
- Markt: SOM mit * "nur Anlagen- und Maschinenbau"

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 15:13:26 +01:00
Benjamin Admin
c43d39fd7f feat: Executive Summary komplett überarbeitet
- Problem: Strategisches Dilemma (KI vs. Datensouveränität, 30.000+ Unternehmen)
- Lösung: Kontinuierliche Compliance statt punktueller Prüfungen
- Roadmap: Go-to-Market Phasen 1-3 (statt Q-Kacheln), Gründung Jul/Aug 2026
- 8 Module als kompakte Baukasten-Leiste
- Wettbewerber-Kachel: 6 Wettbewerber mit Flagge + Bewertung
- Umlaute: ä, ö, ü statt ae, oe, ue in allen deutschen Texten
- COMPLAI statt ComplAI, AI farblich abgesetzt
- USP: "auf deutscher oder französischer Cloud"

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 12:05:36 +01:00
Benjamin Admin
8aca75118c fix: Zahlen und Texte korrigiert — Problem, USP, KPIs
Problem-Text: Neuer Wortlaut (US-KI-Anbieter, 30.000+ Unternehmen,
egal ob 10 oder 5.000 MA, Datenmissbrauch-Risiko)

USP: "auf deutscher oder franzoesischer Cloud"

KPI-Kacheln: 170+ Originaldokumente entfernt, 40.000→25.000+
Sicherheitskontrollen, 84→110 Gesetze & Regularien (nur EU+DACH),
761K→500K+ Lines of Code

Konsistent in: i18n (DE+EN), Executive Summary (Slide+PDF),
Competition, AI Pipeline, SDK Demo, Regulatory Landscape,
Presenter Script, FAQ

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 11:54:26 +01:00