Add prominent counsel-return CTA to institutional compliance hub.
Some checks failed
CD Pipeline / Deploy to Staging (push) Failing after 36s
CI Pipeline / Lint and Type Check (push) Failing after 30s
CI Pipeline / Build (push) Has been skipped
CI Pipeline / Test Backend (push) Failing after 1m37s
CI Pipeline / Test Frontend (push) Failing after 29s
CI Pipeline / Security Scan (push) Failing after 1m41s
Deploy to Staging / Deploy to Staging (push) Failing after 29s
Portal CI / Portal Lint (push) Failing after 20s
Portal CI / Portal Type Check (push) Failing after 20s
Portal CI / Portal Test (push) Failing after 21s
Portal CI / Portal Build (push) Failing after 20s
Test Suite / frontend-tests (push) Failing after 32s
Test Suite / api-tests (push) Failing after 57s
Test Suite / blockchain-tests (push) Failing after 30s
Type Check / type-check (map[directory:. name:root]) (push) Failing after 22s
Type Check / type-check (map[directory:api name:api]) (push) Failing after 21s
Type Check / type-check (map[directory:portal name:portal]) (push) Failing after 22s
CD Pipeline / Deploy to Production (push) Has been skipped

Splits counsel portals into a dedicated panel and syncs manifest with Gitea issue template URL.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
defiQUG
2026-06-15 17:13:39 -07:00
parent 26d4edc7c7
commit 477cf73005
2 changed files with 63 additions and 17 deletions

View File

@@ -1,9 +1,10 @@
import { ArrowRight, Building2, Globe2, Scale, ShieldAlert } from 'lucide-react';
import { ArrowRight, Building2, FileText, Globe2, Scale, ShieldAlert } from 'lucide-react';
import Link from 'next/link';
import {
institutionalUx,
jurisdictionStatusClass,
type InstitutionalPortal,
type JurisdictionCard,
type LegalTrack,
type OnboardingStep,
@@ -13,6 +14,9 @@ export function InstitutionalComplianceHub() {
const { disclaimer, legalTracks, onboardingJourney, jurisdictionCards, portals, prohibitedClaimsPreview } =
institutionalUx;
const counselPortals = portals.filter((p) => p.audience === 'counsel');
const institutionalPortals = portals.filter((p) => p.audience !== 'counsel');
return (
<section
id="institutional-compliance"
@@ -79,22 +83,33 @@ export function InstitutionalComplianceHub() {
</div>
) : null}
{/* Counsel return — external counsel */}
{counselPortals.length > 0 ? (
<div className="mt-12 rounded-xl border border-indigo-500/25 bg-indigo-500/5 p-6">
<div className="flex flex-col gap-5 lg:flex-row lg:items-center lg:justify-between">
<div className="max-w-xl">
<div className="inline-flex items-center gap-2 text-sm font-semibold text-indigo-200">
<FileText className="h-4 w-4" aria-hidden />
External counsel returns
</div>
<p className="mt-2 text-xs leading-relaxed text-sovereign-ivory/55">
Track A checklist and Track B WP-14 deliverables signed matrices, memoranda PDFs, and gap
register. Preferred channel: Gitea issue with the counsel-return template.
</p>
</div>
<div className="flex flex-wrap gap-3">
{counselPortals.map((p) => (
<CounselPortalButton key={p.id} portal={p} primary={p.id === 'legal-issues'} />
))}
</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>
{institutionalPortals.map((p) => (
<PortalLink key={p.id} portal={p} />
))}
</div>
</div>
@@ -102,6 +117,37 @@ export function InstitutionalComplianceHub() {
);
}
function CounselPortalButton({ portal, primary }: { portal: InstitutionalPortal; primary?: boolean }) {
const className = primary
? 'inline-flex items-center gap-1.5 rounded-lg border border-indigo-400/50 bg-indigo-500/20 px-4 py-2.5 text-sm font-semibold text-indigo-100 no-underline transition hover:border-indigo-300/60 hover:bg-indigo-500/30'
: 'inline-flex items-center gap-1.5 rounded-lg border border-gray-700 bg-gray-900/50 px-4 py-2.5 text-sm font-medium text-indigo-200 no-underline transition hover:border-indigo-500/40 hover:text-indigo-100';
return (
<Link href={portal.href} className={className}>
<FileText className="h-4 w-4" aria-hidden />
{portal.label}
<ArrowRight className="h-3.5 w-3.5" aria-hidden />
</Link>
);
}
function PortalLink({ portal }: { portal: InstitutionalPortal }) {
return (
<Link
href={portal.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"
>
{portal.id.includes('onboard') ? (
<Building2 className="h-4 w-4" aria-hidden />
) : (
<Globe2 className="h-4 w-4" aria-hidden />
)}
{portal.label}
<ArrowRight className="h-3.5 w-3.5" aria-hidden />
</Link>
);
}
function LegalTrackCard({ track }: { track: LegalTrack }) {
return (
<Link

View File

@@ -1,5 +1,5 @@
{
"generatedAt": "2026-06-15T19:09:04.567Z",
"generatedAt": "2026-06-15T20:07:36.006Z",
"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": [
@@ -114,7 +114,7 @@
{
"id": "legal-issues",
"label": "Open counsel return issue",
"href": "https://gitea.d-bis.org/HOSPITALLERS/legal/issues/new",
"href": "https://gitea.d-bis.org/HOSPITALLERS/legal/issues/new?template=counsel-wp-return",
"audience": "counsel"
}
],