feat: Upselling-Funnel Assessment → Compliance Optimizer
Some checks failed
Build + Deploy / build-admin-compliance (push) Successful in 2m17s
Build + Deploy / build-backend-compliance (push) Successful in 3m22s
Build + Deploy / build-ai-sdk (push) Successful in 1m1s
Build + Deploy / build-developer-portal (push) Successful in 1m21s
Build + Deploy / build-tts (push) Failing after 1m32s
Build + Deploy / build-document-crawler (push) Successful in 37s
Build + Deploy / build-dsms-gateway (push) Successful in 24s
CI / branch-name (push) Has been skipped
Build + Deploy / trigger-orca (push) Has been skipped
CI / guardrail-integrity (push) Has been skipped
CI / loc-budget (push) Failing after 17s
CI / secret-scan (push) Has been skipped
CI / go-lint (push) Has been skipped
CI / python-lint (push) Has been skipped
CI / nodejs-lint (push) Has been skipped
CI / nodejs-build (push) Successful in 2m55s
CI / dep-audit (push) Has been skipped
CI / sbom-scan (push) Has been skipped
CI / test-go (push) Failing after 59s
CI / test-python-backend (push) Successful in 42s
CI / test-python-document-crawler (push) Successful in 35s
CI / test-python-dsms-gateway (push) Successful in 26s
CI / validate-canonical-controls (push) Successful in 18s

Verbindet das kostenlose UCCA Assessment mit dem bezahlten
Compliance Optimizer durch gezielte CTAs:

- OptimizerUpsellCard: Kontextabhaengig (CONDITIONAL→prominent, YES→dezent)
- Assessment Detail: "Optimieren" Button + CTA-Block nach Ergebnis
- Advisory Board ResultView: CTA nach Wizard-Abschluss
- Optimizer "new": Auto-Submit bei ?from_assessment={id}
- Optimizer Liste + Detail: Links zum Quell-Assessment

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Benjamin Admin
2026-04-23 12:28:49 +02:00
parent f8fd329059
commit 5d53acf5dc
6 changed files with 148 additions and 3 deletions

View File

@@ -4,6 +4,7 @@ import React, { useState, useEffect } from 'react'
import { useParams, useRouter } from 'next/navigation'
import Link from 'next/link'
import { AssessmentResultCard } from '@/components/sdk/use-case-assessment/AssessmentResultCard'
import { OptimizerUpsellCard } from '@/components/sdk/compliance-optimizer/OptimizerUpsellCard'
interface TriggeredRule {
code: string
@@ -138,6 +139,18 @@ export default function AssessmentDetailPage() {
}
}
const [optimizing, setOptimizing] = useState(false)
const handleOptimize = async () => {
setOptimizing(true)
try {
const res = await fetch(`/api/sdk/v1/maximizer/optimize-from-assessment/${assessmentId}`, { method: 'POST' })
if (res.ok) {
const data = await res.json()
router.push(`/sdk/compliance-optimizer/${data.id}`)
}
} catch { /* silent */ } finally { setOptimizing(false) }
}
if (loading) {
return (
<div className="flex items-center justify-center h-64">
@@ -234,6 +247,13 @@ export default function AssessmentDetailPage() {
>
JSON
</a>
<button
onClick={handleOptimize}
disabled={optimizing}
className="px-4 py-2 text-sm bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-colors disabled:opacity-50"
>
{optimizing ? 'Optimiere...' : 'Optimieren'}
</button>
<Link
href={`/sdk/use-cases/new?edit=${assessmentId}`}
className="px-4 py-2 text-sm bg-purple-600 text-white rounded-lg hover:bg-purple-700 transition-colors"
@@ -273,6 +293,13 @@ export default function AssessmentDetailPage() {
{/* Result */}
<AssessmentResultCard result={resultForCard as Parameters<typeof AssessmentResultCard>[0]['result']} />
{/* Compliance Optimizer Upsell */}
<OptimizerUpsellCard
feasibility={assessment.feasibility}
assessmentId={assessmentId}
riskScore={assessment.risk_score}
/>
{/* KI-Erklärung */}
{assessment.explanation_text && (
<div className="bg-purple-50 border border-purple-200 rounded-xl p-6">