Add institutional compliance hub section to corporate landing page.
Surfaces legal tracks A/B, onboarding journey, jurisdiction matrices, and portal links from proxmox institutional-ux manifest sync. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -14,6 +14,7 @@ import {
|
||||
SovereignBackdrop,
|
||||
TrustComplianceGraphic,
|
||||
} from '@/components/corporate/graphics';
|
||||
import { InstitutionalComplianceHub } from '@/components/corporate/InstitutionalComplianceHub';
|
||||
import { InstitutionalGradeSection } from '@/components/corporate/InstitutionalGradeSection';
|
||||
import {
|
||||
ECOSYSTEM_SIGN_IN_PATH,
|
||||
@@ -286,6 +287,8 @@ export function CorporateLandingPage() {
|
||||
|
||||
<InstitutionalGradeSection />
|
||||
|
||||
<InstitutionalComplianceHub />
|
||||
|
||||
{/* Resources / trust */}
|
||||
<section id="resources" className="relative scroll-mt-20 border-t border-sovereign-bronze/20 bg-sovereign-midnight/30 py-20">
|
||||
<SovereignBackdrop variant="mesh" className="opacity-50" />
|
||||
|
||||
166
portal/src/components/corporate/InstitutionalComplianceHub.tsx
Normal file
166
portal/src/components/corporate/InstitutionalComplianceHub.tsx
Normal file
@@ -0,0 +1,166 @@
|
||||
import { ArrowRight, Building2, Globe2, Scale, ShieldAlert } from 'lucide-react';
|
||||
import Link from 'next/link';
|
||||
|
||||
import {
|
||||
institutionalUx,
|
||||
jurisdictionStatusClass,
|
||||
type JurisdictionCard,
|
||||
type LegalTrack,
|
||||
type OnboardingStep,
|
||||
} from '@/lib/institutional-ux-data';
|
||||
|
||||
export function InstitutionalComplianceHub() {
|
||||
const { disclaimer, legalTracks, onboardingJourney, jurisdictionCards, portals, prohibitedClaimsPreview } =
|
||||
institutionalUx;
|
||||
|
||||
return (
|
||||
<section
|
||||
id="institutional-compliance"
|
||||
className="relative scroll-mt-20 border-y border-sovereign-bronze/20 bg-sovereign-midnight/40 py-20"
|
||||
>
|
||||
<div className="relative mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
|
||||
<div className="max-w-3xl">
|
||||
<div className="mb-3 inline-flex items-center gap-2 rounded-full border border-sovereign-bronze/40 bg-sovereign-bronze/10 px-3 py-1 text-xs font-semibold uppercase tracking-wider text-sovereign-gold">
|
||||
<Scale className="h-3.5 w-3.5" aria-hidden />
|
||||
Institutional compliance
|
||||
</div>
|
||||
<h2 className="text-3xl font-bold tracking-tight text-sovereign-ivory sm:text-4xl">
|
||||
Onboarding, legal tracks & jurisdiction matrices
|
||||
</h2>
|
||||
<p className="mt-4 text-lg leading-relaxed text-sovereign-ivory/70">
|
||||
Sovereign and regulated institutions follow a defined path: charter acknowledgment, compliance
|
||||
intake, per-jurisdiction matrices, and production gates — with separate legal tracks for Order
|
||||
capacity and operational transactability.
|
||||
</p>
|
||||
<p className="mt-3 text-xs leading-relaxed text-sovereign-ivory/45">{disclaimer}</p>
|
||||
</div>
|
||||
|
||||
{/* Two legal tracks */}
|
||||
<div className="mt-12 grid gap-4 lg:grid-cols-2">
|
||||
{legalTracks.map((track) => (
|
||||
<LegalTrackCard key={track.id} track={track} />
|
||||
))}
|
||||
</div>
|
||||
|
||||
{/* Onboarding journey */}
|
||||
<div className="mt-14">
|
||||
<h3 className="text-lg font-semibold text-sovereign-ivory">Institution onboarding journey</h3>
|
||||
<ol className="mt-6 grid gap-4 sm:grid-cols-2 lg:grid-cols-5">
|
||||
{onboardingJourney.map((step) => (
|
||||
<JourneyStepCard key={step.step} step={step} />
|
||||
))}
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
{/* Jurisdiction cards */}
|
||||
<div className="mt-14">
|
||||
<h3 className="text-lg font-semibold text-sovereign-ivory">Active jurisdiction matrices</h3>
|
||||
<div className="mt-6 grid gap-4 md:grid-cols-3">
|
||||
{jurisdictionCards.map((j) => (
|
||||
<JurisdictionCardView key={j.id} card={j} />
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Prohibited claims */}
|
||||
{prohibitedClaimsPreview.length > 0 ? (
|
||||
<div className="mt-12 rounded-xl border border-amber-500/25 bg-amber-500/5 p-5">
|
||||
<div className="flex items-start gap-3">
|
||||
<ShieldAlert className="mt-0.5 h-5 w-5 shrink-0 text-amber-400" aria-hidden />
|
||||
<div>
|
||||
<p className="text-sm font-semibold text-amber-200">Prohibited external claims</p>
|
||||
<ul className="mt-2 space-y-1 text-sm text-sovereign-ivory/65">
|
||||
{prohibitedClaimsPreview.map((c) => (
|
||||
<li key={c}>· {c}</li>
|
||||
))}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
) : null}
|
||||
|
||||
{/* Portal links */}
|
||||
<div className="mt-10 flex flex-wrap gap-3">
|
||||
{portals.map((p) => (
|
||||
<Link
|
||||
key={p.id}
|
||||
href={p.href}
|
||||
className="inline-flex items-center gap-1.5 rounded-lg border border-gray-700 bg-gray-900/50 px-4 py-2 text-sm font-medium text-orange-300 no-underline transition hover:border-orange-500/40 hover:text-orange-200"
|
||||
>
|
||||
{p.id.includes('onboard') ? (
|
||||
<Building2 className="h-4 w-4" aria-hidden />
|
||||
) : (
|
||||
<Globe2 className="h-4 w-4" aria-hidden />
|
||||
)}
|
||||
{p.label}
|
||||
<ArrowRight className="h-3.5 w-3.5" aria-hidden />
|
||||
</Link>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
);
|
||||
}
|
||||
|
||||
function LegalTrackCard({ track }: { track: LegalTrack }) {
|
||||
return (
|
||||
<Link
|
||||
href={track.href}
|
||||
className="group block rounded-2xl border border-gray-800 bg-gray-900/40 p-6 no-underline transition hover:border-orange-500/35"
|
||||
>
|
||||
<div className="flex items-start justify-between gap-3">
|
||||
<p className="text-xs font-bold uppercase tracking-wider text-orange-400">Track {track.id}</p>
|
||||
<span className="rounded-full bg-gray-800 px-2 py-0.5 text-xs text-gray-400">{track.statusLabel}</span>
|
||||
</div>
|
||||
<h4 className="mt-2 text-lg font-semibold text-white group-hover:text-orange-100">{track.label}</h4>
|
||||
<p className="mt-2 text-sm italic text-gray-500">{track.question}</p>
|
||||
<p className="mt-3 text-sm leading-relaxed text-gray-400">{track.summary}</p>
|
||||
<span className="mt-4 inline-flex items-center gap-1 text-xs font-medium text-orange-400 group-hover:text-orange-300">
|
||||
View counsel corpus
|
||||
<ArrowRight className="h-3 w-3" aria-hidden />
|
||||
</span>
|
||||
</Link>
|
||||
);
|
||||
}
|
||||
|
||||
function JourneyStepCard({ step }: { step: OnboardingStep }) {
|
||||
return (
|
||||
<li className="flex flex-col rounded-xl border border-gray-800 bg-gray-900/30 p-4">
|
||||
<span className="text-xs font-mono text-gray-500">Step {step.step}</span>
|
||||
<p className="mt-2 text-sm font-semibold text-white">{step.title}</p>
|
||||
<p className="mt-2 flex-1 text-xs leading-relaxed text-gray-500">{step.description}</p>
|
||||
<Link
|
||||
href={step.href}
|
||||
className="mt-3 text-xs font-medium text-orange-400 no-underline hover:text-orange-300"
|
||||
>
|
||||
{step.cta} →
|
||||
</Link>
|
||||
</li>
|
||||
);
|
||||
}
|
||||
|
||||
function JurisdictionCardView({ card }: { card: JurisdictionCard }) {
|
||||
return (
|
||||
<article className="rounded-xl border border-gray-800 bg-gray-900/30 p-5">
|
||||
<div className="flex items-start justify-between gap-2">
|
||||
<h4 className="text-sm font-semibold text-white">{card.label}</h4>
|
||||
<span
|
||||
className={`shrink-0 rounded-md px-2 py-0.5 text-xs font-medium ring-1 ${jurisdictionStatusClass(card.status)}`}
|
||||
>
|
||||
{card.statusLabel}
|
||||
</span>
|
||||
</div>
|
||||
<p className="mt-3 text-xs leading-relaxed text-gray-500">{card.posture}</p>
|
||||
<div className="mt-4 flex flex-col gap-2 text-xs">
|
||||
<a href={card.matrixHref} className="text-orange-400 hover:text-orange-300">
|
||||
Banking matrix →
|
||||
</a>
|
||||
{card.perimeterHref ? (
|
||||
<a href={card.perimeterHref} className="text-orange-400 hover:text-orange-300">
|
||||
Regulatory perimeter →
|
||||
</a>
|
||||
) : null}
|
||||
</div>
|
||||
</article>
|
||||
);
|
||||
}
|
||||
@@ -106,6 +106,16 @@ export function InstitutionalGradeSection() {
|
||||
<span className="text-gray-600" aria-hidden>
|
||||
·
|
||||
</span>
|
||||
<Link
|
||||
href="https://chain138-onboard.d-bis.org/institutional"
|
||||
className="inline-flex items-center gap-1.5 font-medium text-orange-300 no-underline hover:text-orange-200"
|
||||
>
|
||||
Chain 138 institutional hub
|
||||
<ArrowRight className="h-4 w-4" aria-hidden />
|
||||
</Link>
|
||||
<span className="text-gray-600" aria-hidden>
|
||||
·
|
||||
</span>
|
||||
<Link
|
||||
href="https://docs.d-bis.org"
|
||||
className="inline-flex items-center gap-1.5 font-medium text-orange-300 no-underline hover:text-orange-200"
|
||||
|
||||
120
portal/src/data/institutional-ux.generated.json
Normal file
120
portal/src/data/institutional-ux.generated.json
Normal file
@@ -0,0 +1,120 @@
|
||||
{
|
||||
"generatedAt": "2026-06-15T18:39:58.714Z",
|
||||
"source": "config/institutional-ux-ui.v1.json",
|
||||
"disclaimer": "Informational engineering readiness only — not legal advice, a regulatory determination, or an audit certificate. Counsel owns statutory interpretation.",
|
||||
"legalTracks": [
|
||||
{
|
||||
"id": "A",
|
||||
"label": "Track A — Order capacity",
|
||||
"question": "Does SMOM have capacity to charter under Order law?",
|
||||
"summary": "International legal personality, GUOSMM Tier 1 acts, prohibited-claims register.",
|
||||
"href": "https://gitea.d-bis.org/HOSPITALLERS/legal/src/branch/main/docs/SMOM_LEGAL_BASIS_EXECUTIVE_SUMMARY.md",
|
||||
"status": "counsel_sent",
|
||||
"statusLabel": "Counsel kickoff sent"
|
||||
},
|
||||
{
|
||||
"id": "B",
|
||||
"label": "Track B — Operational transactability",
|
||||
"question": "Can entities operate and settle in external jurisdictions?",
|
||||
"summary": "Banking, AML, correspondent, Indonesia perimeter, US-CO-OMNL matrices.",
|
||||
"href": "https://gitea.d-bis.org/HOSPITALLERS/legal/src/branch/main/docs/OPERATIONAL_TRANSACTABILITY_LEGAL_OVERVIEW.md",
|
||||
"status": "wp_sent",
|
||||
"statusLabel": "WP-1–4 sent to counsel"
|
||||
}
|
||||
],
|
||||
"onboardingJourney": [
|
||||
{
|
||||
"step": 1,
|
||||
"title": "Acknowledge charter",
|
||||
"description": "Institution onboarding charter, RACI, and in-scope jurisdictions.",
|
||||
"href": "https://gitea.d-bis.org/d-bis/proxmox/src/branch/master/docs/04-configuration/compliance-matrices/INSTITUTION_ONBOARDING_CHARTER.md",
|
||||
"cta": "Read charter"
|
||||
},
|
||||
{
|
||||
"step": 2,
|
||||
"title": "Legal & compliance intake",
|
||||
"description": "Entity profile, regulators, licensed activities — counsel-owned law inventory.",
|
||||
"href": "https://chain138-onboard.d-bis.org/onboard",
|
||||
"cta": "Start screening"
|
||||
},
|
||||
{
|
||||
"step": 3,
|
||||
"title": "Jurisdiction matrices",
|
||||
"description": "Per-jurisdiction obligation → control → evidence mapping.",
|
||||
"href": "https://gitea.d-bis.org/d-bis/proxmox/src/branch/master/docs/04-configuration/compliance-matrices/",
|
||||
"cta": "View matrices"
|
||||
},
|
||||
{
|
||||
"step": 4,
|
||||
"title": "Policy profiles & URA",
|
||||
"description": "Register policyProfileId, manifest resources, RTGS evidence.",
|
||||
"href": "https://gitea.d-bis.org/d-bis/proxmox/src/branch/master/docs/04-configuration/universal-resource-activation/UNIVERSAL_RESOURCE_POLICY_PROFILES.md",
|
||||
"cta": "URA profiles"
|
||||
},
|
||||
{
|
||||
"step": 5,
|
||||
"title": "Production gate",
|
||||
"description": "Matrix sign-off, evidence packages, settlement verify.",
|
||||
"href": "https://gitea.d-bis.org/d-bis/proxmox/src/branch/master/docs/03-deployment/SETTLEMENT_FLOWS_VERIFICATION_CHECKLIST.md",
|
||||
"cta": "Settlement verify"
|
||||
}
|
||||
],
|
||||
"jurisdictionCards": [
|
||||
{
|
||||
"id": "ID",
|
||||
"label": "Indonesia",
|
||||
"status": "pilot_ready",
|
||||
"statusLabel": "Pilot ready",
|
||||
"posture": "Model A — technology provider + licensed partners",
|
||||
"matrixHref": "https://gitea.d-bis.org/d-bis/proxmox/src/branch/master/docs/04-configuration/compliance-matrices/ID-INDONESIA/banking_v1.md",
|
||||
"perimeterHref": "https://gitea.d-bis.org/d-bis/proxmox/src/branch/master/docs/04-configuration/compliance-matrices/ID-INDONESIA/REGULATORY_PERIMETER_AND_CAPABILITY_MATRIX.md"
|
||||
},
|
||||
{
|
||||
"id": "US-CO-OMNL",
|
||||
"label": "US Colorado — OMNL head office",
|
||||
"status": "draft_started",
|
||||
"statusLabel": "Draft — counsel review",
|
||||
"posture": "MSB/MTL memo and correspondent checklist pending",
|
||||
"matrixHref": "https://gitea.d-bis.org/d-bis/proxmox/src/branch/master/docs/04-configuration/compliance-matrices/US-CO-OMNL/banking_v1.md"
|
||||
},
|
||||
{
|
||||
"id": "US-CO-UCC",
|
||||
"label": "US Colorado — UCC Article 9",
|
||||
"status": "pilot_ready",
|
||||
"statusLabel": "Pilot ready",
|
||||
"posture": "Secured-transactions filing evidence lane",
|
||||
"matrixHref": "https://gitea.d-bis.org/d-bis/proxmox/src/branch/master/docs/04-configuration/compliance-matrices/US-CO-UCC/banking_v1.md"
|
||||
}
|
||||
],
|
||||
"portals": [
|
||||
{
|
||||
"id": "sankofa-corporate",
|
||||
"label": "Sankofa corporate",
|
||||
"href": "https://sankofa.nexus/#institutional-grade",
|
||||
"audience": "sovereign"
|
||||
},
|
||||
{
|
||||
"id": "chain138-onboard",
|
||||
"label": "Chain 138 participant onboarding",
|
||||
"href": "https://chain138-onboard.d-bis.org",
|
||||
"audience": "regulated"
|
||||
},
|
||||
{
|
||||
"id": "reserve-institutional",
|
||||
"label": "OMNL reserve transparency",
|
||||
"href": "https://explorer.d-bis.org/reserve/institutional",
|
||||
"audience": "sovereign"
|
||||
},
|
||||
{
|
||||
"id": "legal-index",
|
||||
"label": "Legal document index",
|
||||
"href": "https://gitea.d-bis.org/HOSPITALLERS/legal/src/branch/main/docs/INDEX.md",
|
||||
"audience": "counsel"
|
||||
}
|
||||
],
|
||||
"prohibitedClaimsPreview": [
|
||||
"No automatic national license equivalence",
|
||||
"No compelled SWIFT / Fedwire / BIS access from personality alone",
|
||||
"No BIS replacement or supranational regulatory authority claims"
|
||||
]
|
||||
}
|
||||
@@ -54,6 +54,7 @@ export const corporateNav: CorporateNavItem[] = [
|
||||
{ label: 'Services', href: '#services' },
|
||||
{ label: 'Solutions', href: '#solutions' },
|
||||
{ label: 'Institutional grade', href: '#institutional-grade' },
|
||||
{ label: 'Compliance', href: '#institutional-compliance' },
|
||||
{ label: 'Resources', href: '#resources' },
|
||||
];
|
||||
|
||||
|
||||
68
portal/src/lib/institutional-ux-data.ts
Normal file
68
portal/src/lib/institutional-ux-data.ts
Normal file
@@ -0,0 +1,68 @@
|
||||
import generated from '@/data/institutional-ux.generated.json';
|
||||
|
||||
export interface LegalTrack {
|
||||
id: string;
|
||||
label: string;
|
||||
question: string;
|
||||
summary: string;
|
||||
href: string;
|
||||
status: string;
|
||||
statusLabel: string;
|
||||
}
|
||||
|
||||
export interface OnboardingStep {
|
||||
step: number;
|
||||
title: string;
|
||||
description: string;
|
||||
href: string;
|
||||
cta: string;
|
||||
}
|
||||
|
||||
export interface JurisdictionCard {
|
||||
id: string;
|
||||
label: string;
|
||||
status: string;
|
||||
statusLabel: string;
|
||||
posture: string;
|
||||
matrixHref: string;
|
||||
perimeterHref?: string;
|
||||
}
|
||||
|
||||
export interface InstitutionalPortal {
|
||||
id: string;
|
||||
label: string;
|
||||
href: string;
|
||||
audience: string;
|
||||
}
|
||||
|
||||
export interface InstitutionalUxData {
|
||||
generatedAt: string;
|
||||
disclaimer: string;
|
||||
legalTracks: LegalTrack[];
|
||||
onboardingJourney: OnboardingStep[];
|
||||
jurisdictionCards: JurisdictionCard[];
|
||||
portals: InstitutionalPortal[];
|
||||
prohibitedClaimsPreview: string[];
|
||||
}
|
||||
|
||||
const FALLBACK: InstitutionalUxData = {
|
||||
generatedAt: '2026-06-14',
|
||||
disclaimer:
|
||||
'Informational engineering readiness only — not legal advice, a regulatory determination, or an audit certificate.',
|
||||
legalTracks: [],
|
||||
onboardingJourney: [],
|
||||
jurisdictionCards: [],
|
||||
portals: [],
|
||||
prohibitedClaimsPreview: [],
|
||||
};
|
||||
|
||||
export const institutionalUx: InstitutionalUxData =
|
||||
generated && typeof generated === 'object' && 'legalTracks' in generated
|
||||
? (generated as InstitutionalUxData)
|
||||
: FALLBACK;
|
||||
|
||||
export function jurisdictionStatusClass(status: string): string {
|
||||
if (status === 'pilot_ready') return 'bg-emerald-500/15 text-emerald-300 ring-emerald-500/30';
|
||||
if (status === 'draft_started' || status === 'draft') return 'bg-amber-500/15 text-amber-300 ring-amber-500/30';
|
||||
return 'bg-gray-500/15 text-gray-300 ring-gray-500/30';
|
||||
}
|
||||
Reference in New Issue
Block a user