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

@@ -12,6 +12,7 @@ interface OptimizationSummary {
created_at: string
zone_map: Record<string, { zone: 'FORBIDDEN' | 'RESTRICTED' | 'SAFE' }>
max_safe_config?: { safety_score: number; utility_score: number }
assessment_id?: string
}
function countZones(zoneMap: Record<string, { zone: string }>) {
@@ -83,6 +84,7 @@ export default function ComplianceOptimizerPage() {
<th className="px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase">Titel</th>
<th className="px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase">Status</th>
<th className="px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase">Zonen</th>
<th className="px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase">Quelle</th>
<th className="px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase">Datum</th>
</tr>
</thead>
@@ -104,6 +106,15 @@ export default function ComplianceOptimizerPage() {
{zones.restricted > 0 && <span className="text-yellow-600 mr-2">{zones.restricted} eingeschraenkt</span>}
<span className="text-green-600">{zones.safe} erlaubt</span>
</td>
<td className="px-4 py-3 text-sm">
{o.assessment_id ? (
<Link href={`/sdk/use-cases/${o.assessment_id}`} className="text-purple-600 hover:underline text-xs">
Assessment
</Link>
) : (
<span className="text-gray-400 text-xs">Manuell</span>
)}
</td>
<td className="px-4 py-3 text-sm text-gray-500">
{new Date(o.created_at).toLocaleDateString('de-DE')}
</td>