Polish GFTD marketplace access copy
This commit is contained in:
@@ -186,9 +186,7 @@ export default function MarketplaceEntitlementPage() {
|
||||
|
||||
<div className="mt-6 grid gap-4 md:grid-cols-2">
|
||||
<article className="rounded-lg border border-white/10 bg-black/20 p-4">
|
||||
<h3 className="text-sm font-semibold uppercase tracking-wide text-teal-300">
|
||||
Subscription tiers
|
||||
</h3>
|
||||
<h3 className="text-sm font-semibold uppercase tracking-wide text-teal-300">Access tiers</h3>
|
||||
<div className="mt-4 space-y-3">
|
||||
{gftdMarketplaceSubscriptionTiers.map((tier) => (
|
||||
<div key={tier.name} className="rounded-md border border-white/5 bg-white/5 p-3">
|
||||
@@ -203,9 +201,7 @@ export default function MarketplaceEntitlementPage() {
|
||||
</article>
|
||||
|
||||
<article className="rounded-lg border border-white/10 bg-black/20 p-4">
|
||||
<h3 className="text-sm font-semibold uppercase tracking-wide text-teal-300">
|
||||
User needs by persona
|
||||
</h3>
|
||||
<h3 className="text-sm font-semibold uppercase tracking-wide text-teal-300">Persona needs</h3>
|
||||
<ul className="mt-4 space-y-2 text-sm text-sovereign-silver">
|
||||
{gftdMarketplacePersonaNeeds.map((item) => (
|
||||
<li key={item} className="rounded-md border border-white/5 bg-white/5 px-3 py-2">
|
||||
@@ -253,14 +249,14 @@ export default function MarketplaceEntitlementPage() {
|
||||
onClick={() => signIn(undefined, { callbackUrl: `/marketplace/entitlements/${slug}` })}
|
||||
className="mt-6 rounded-lg bg-teal-600 px-5 py-2.5 text-sm font-medium text-white hover:bg-teal-500"
|
||||
>
|
||||
Sign in to subscribe
|
||||
Sign in to request access
|
||||
</button>
|
||||
) : hasActive ? (
|
||||
<p className="mt-6 text-emerald-400">Active entitlements: {activeKeys.join(', ')}</p>
|
||||
) : hasPending ? (
|
||||
<p className="mt-6 text-amber-300">
|
||||
Pending operator activation. Use the landing page to review the tier and guardrail summary
|
||||
before the workspace request is approved.
|
||||
Pending operator activation. Review the access tier and guardrail summary on the listing before the
|
||||
workspace request is approved.
|
||||
</p>
|
||||
) : (
|
||||
<button
|
||||
@@ -269,7 +265,7 @@ export default function MarketplaceEntitlementPage() {
|
||||
onClick={handleSubscribe}
|
||||
className="mt-6 rounded-lg bg-teal-600 px-5 py-2.5 text-sm font-medium text-white hover:bg-teal-500 disabled:opacity-60"
|
||||
>
|
||||
{submitting ? 'Submitting…' : isGftd ? 'Request GFTD access' : 'Request subscription'}
|
||||
{submitting ? 'Submitting…' : 'Request access'}
|
||||
</button>
|
||||
)}
|
||||
|
||||
@@ -289,7 +285,7 @@ export default function MarketplaceEntitlementPage() {
|
||||
) : null}
|
||||
|
||||
<p className="mt-8 text-xs text-sovereign-silver">
|
||||
Contract/PO-first billing — automated checkout is on the roadmap. Operator Keycloak grants run via{' '}
|
||||
Contract/PO-first billing remains in place; automated checkout is on the roadmap. Operator Keycloak grants run via{' '}
|
||||
<code className="rounded bg-black/30 px-1">grant-marketplace-entitlements-keycloak.sh</code>.
|
||||
</p>
|
||||
</main>
|
||||
|
||||
@@ -5,13 +5,14 @@ import { CorporateFooter } from '@/components/corporate/CorporateFooter';
|
||||
import { CorporateHeader } from '@/components/corporate/CorporateHeader';
|
||||
import {
|
||||
gftdMarketplaceGuardrails,
|
||||
gftdMarketplaceFaq,
|
||||
gftdMarketplacePersonaNeeds,
|
||||
gftdMarketplaceSubscriptionTiers,
|
||||
} from '@/lib/gftd-marketplace';
|
||||
|
||||
export const metadata = {
|
||||
title: 'GFTD Directory — Sankofa Marketplace',
|
||||
description: 'Rights-aware entity intelligence with live approved source lanes and public-safe redaction.',
|
||||
description: 'Institutional entity intelligence with approved live source lanes, public-safe redaction, and bounded access.',
|
||||
};
|
||||
|
||||
export default function GftdMarketplacePage() {
|
||||
@@ -24,26 +25,26 @@ export default function GftdMarketplacePage() {
|
||||
</p>
|
||||
<h1 className="mt-2 text-3xl font-bold tracking-tight sm:text-4xl">GFTD Directory</h1>
|
||||
<p className="mt-4 max-w-3xl text-lg text-sovereign-ivory/70">
|
||||
Rights-aware entity intelligence for approved live source lanes, redacted public-safe outputs,
|
||||
subscription tiers, and bounded observability.
|
||||
Institutional entity intelligence with approved live source lanes, public-safe redaction,
|
||||
access tiers, and bounded observability.
|
||||
</p>
|
||||
|
||||
<div className="mt-10 grid gap-4 md:grid-cols-3">
|
||||
{[
|
||||
{
|
||||
icon: ShieldCheck,
|
||||
title: 'Rights-aware by default',
|
||||
title: 'Rights-governed by design',
|
||||
text: 'Public-safe outputs stay redacted, with source-rights and publication boundaries preserved.',
|
||||
},
|
||||
{
|
||||
icon: BookOpen,
|
||||
title: 'Evidence-backed',
|
||||
text: 'Live source ingestion and observability stay tied to documented approval and review artifacts.',
|
||||
text: 'Live source ingestion and observability remain tied to documented approval and review artifacts.',
|
||||
},
|
||||
{
|
||||
icon: Users,
|
||||
title: 'Marketplace-ready',
|
||||
text: 'Subscription tiers and persona-based access are designed for institutional onboarding.',
|
||||
text: 'Access tiers and persona-based controls are designed for institutional onboarding.',
|
||||
},
|
||||
].map((item) => {
|
||||
const Icon = item.icon;
|
||||
@@ -61,7 +62,7 @@ export default function GftdMarketplacePage() {
|
||||
</div>
|
||||
|
||||
<section className="mt-10 rounded-lg border border-sovereign-bronze/25 bg-sovereign-midnight/30 p-6">
|
||||
<h2 className="text-xl font-semibold">Subscription tiers</h2>
|
||||
<h2 className="text-xl font-semibold">Access tiers</h2>
|
||||
<div className="mt-4 grid gap-3 md:grid-cols-2">
|
||||
{gftdMarketplaceSubscriptionTiers.map((tier) => (
|
||||
<div key={tier.name} className="rounded-md border border-white/10 bg-black/20 p-4">
|
||||
@@ -76,7 +77,7 @@ export default function GftdMarketplacePage() {
|
||||
</section>
|
||||
|
||||
<section className="mt-10 rounded-lg border border-sovereign-bronze/25 bg-sovereign-midnight/30 p-6">
|
||||
<h2 className="text-xl font-semibold">Who it serves</h2>
|
||||
<h2 className="text-xl font-semibold">Intended users</h2>
|
||||
<ul className="mt-4 grid gap-3 md:grid-cols-2">
|
||||
{gftdMarketplacePersonaNeeds.map((item) => (
|
||||
<li key={item} className="rounded-md border border-white/10 bg-black/20 px-4 py-3 text-sm text-sovereign-ivory/70">
|
||||
@@ -87,7 +88,7 @@ export default function GftdMarketplacePage() {
|
||||
</section>
|
||||
|
||||
<section className="mt-10 rounded-lg border border-sovereign-bronze/25 bg-sovereign-midnight/30 p-6">
|
||||
<h2 className="text-xl font-semibold">Guardrails</h2>
|
||||
<h2 className="text-xl font-semibold">Publication guardrails</h2>
|
||||
<ul className="mt-4 space-y-2 text-sm text-sovereign-ivory/70">
|
||||
{gftdMarketplaceGuardrails.map((item) => (
|
||||
<li key={item}>- {item}</li>
|
||||
@@ -95,18 +96,35 @@ export default function GftdMarketplacePage() {
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<section className="mt-10 rounded-lg border border-sovereign-bronze/25 bg-sovereign-midnight/30 p-6">
|
||||
<h2 className="text-xl font-semibold">Frequently asked questions</h2>
|
||||
<div className="mt-4 space-y-3">
|
||||
{gftdMarketplaceFaq.map((item) => (
|
||||
<details
|
||||
key={item.question}
|
||||
className="rounded-md border border-white/10 bg-black/20 px-4 py-3"
|
||||
>
|
||||
<summary className="cursor-pointer list-none text-sm font-semibold text-white">
|
||||
{item.question}
|
||||
</summary>
|
||||
<p className="mt-2 text-sm text-sovereign-ivory/70">{item.answer}</p>
|
||||
</details>
|
||||
))}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section className="mt-10 rounded-lg border border-sovereign-gold/30 bg-sovereign-midnight/40 p-6">
|
||||
<h2 className="text-xl font-semibold">Next step</h2>
|
||||
<p className="mt-2 max-w-3xl text-sm text-sovereign-ivory/65">
|
||||
Review the subscription tiers, then request access through the entitlement flow. The listing is
|
||||
designed to stay rights-aware and public-safe before any operator activation.
|
||||
Review the access tiers and frequently asked questions, then request access through the entitlement
|
||||
workflow. The listing remains rights-governed and public-safe before any operator activation.
|
||||
</p>
|
||||
<div className="mt-6 flex flex-col gap-3 sm:flex-row">
|
||||
<Link
|
||||
href="/marketplace/entitlements/phoenix-gftd-directory"
|
||||
className="inline-flex items-center gap-2 rounded-lg bg-sovereign-gold px-5 py-2.5 text-sm font-semibold text-sovereign-obsidian no-underline hover:bg-sovereign-ivory"
|
||||
>
|
||||
Request subscription <ArrowRight className="h-4 w-4" aria-hidden />
|
||||
Request access <ArrowRight className="h-4 w-4" aria-hidden />
|
||||
</Link>
|
||||
<Link
|
||||
href="https://gftd.d-bis.org/docs"
|
||||
@@ -114,7 +132,7 @@ export default function GftdMarketplacePage() {
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
View public docs
|
||||
Review public docs
|
||||
</Link>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
@@ -28,14 +28,14 @@ export default function MarketplacePage() {
|
||||
<p className="text-xs font-semibold uppercase tracking-wider text-sovereign-gold">Phoenix marketplace</p>
|
||||
<h1 className="mt-2 text-3xl font-bold tracking-tight sm:text-4xl">Sovereign platform catalog</h1>
|
||||
<p className="mt-4 text-lg text-sovereign-ivory/70">
|
||||
Subscribe to ledger, identity, registry, wallet, orchestration, and Chain 138 onboarding services.
|
||||
Sign in to manage entitlements and deployments.
|
||||
Request access to ledger, identity, registry, wallet, orchestration, and Chain 138 onboarding
|
||||
services. Sign in to manage entitlements and deployments.
|
||||
</p>
|
||||
<Link
|
||||
href={ECOSYSTEM_SIGN_IN_PATH}
|
||||
className="mt-8 inline-flex items-center gap-2 rounded-lg bg-sovereign-gold px-5 py-2.5 text-sm font-semibold text-sovereign-obsidian no-underline hover:bg-sovereign-ivory"
|
||||
>
|
||||
Sign in to subscribe
|
||||
Sign in to request access
|
||||
<ArrowRight className="h-4 w-4" aria-hidden />
|
||||
</Link>
|
||||
</div>
|
||||
@@ -111,14 +111,25 @@ export default function MarketplacePage() {
|
||||
<h3 className="mt-1 text-base font-semibold">{service.name}</h3>
|
||||
<p className="mt-2 text-sm text-sovereign-ivory/60">{service.description}</p>
|
||||
{service.href ? (
|
||||
<Link
|
||||
href={service.href}
|
||||
className="mt-4 inline-flex items-center gap-1 text-sm font-medium text-sovereign-gold no-underline hover:text-sovereign-ivory"
|
||||
{...(service.external ? { target: '_blank', rel: 'noopener noreferrer' } : {})}
|
||||
>
|
||||
View offering
|
||||
<ArrowRight className="h-3.5 w-3.5" aria-hidden />
|
||||
</Link>
|
||||
<div className="mt-4 flex flex-wrap gap-3">
|
||||
<Link
|
||||
href={service.href}
|
||||
className="inline-flex items-center gap-1 text-sm font-medium text-sovereign-gold no-underline hover:text-sovereign-ivory"
|
||||
{...(service.external ? { target: '_blank', rel: 'noopener noreferrer' } : {})}
|
||||
>
|
||||
View offering
|
||||
<ArrowRight className="h-3.5 w-3.5" aria-hidden />
|
||||
</Link>
|
||||
{service.name === 'GFTD Directory' ? (
|
||||
<Link
|
||||
href="/marketplace/entitlements/phoenix-gftd-directory"
|
||||
className="inline-flex items-center gap-1 text-sm font-medium text-sovereign-ivory no-underline hover:text-sovereign-gold"
|
||||
>
|
||||
Request access
|
||||
<ArrowRight className="h-3.5 w-3.5" aria-hidden />
|
||||
</Link>
|
||||
) : null}
|
||||
</div>
|
||||
) : null}
|
||||
</article>
|
||||
))}
|
||||
|
||||
@@ -7,31 +7,31 @@ export interface GftdMarketplaceService extends PartnerStackService {
|
||||
export const gftdMarketplaceSubscriptionTiers = [
|
||||
{
|
||||
name: 'Preview',
|
||||
description: 'Evaluators, partners, and early adopters with public-safe demo data only.',
|
||||
limits: 'No live restricted data, no authority claims, no production SLA.',
|
||||
description: 'Evaluators, partners, and early adopters using public-safe demonstration data only.',
|
||||
limits: 'No live restricted data, no authority claims, and no production SLA.',
|
||||
},
|
||||
{
|
||||
name: 'Professional',
|
||||
description: 'Operators, integrators, and compliance teams.',
|
||||
description: 'Operators, integrators, and compliance teams with approved access.',
|
||||
limits: 'Approved sources only, role-based access, bounded query depth, and rate limits.',
|
||||
},
|
||||
{
|
||||
name: 'Institutional',
|
||||
description: 'Regulated firms, marketplaces, and service providers.',
|
||||
description: 'Regulated firms, marketplaces, and service providers operating under review.',
|
||||
limits: 'Contractual use terms, approval gates, and stricter access control.',
|
||||
},
|
||||
{
|
||||
name: 'Enterprise',
|
||||
description: 'Market operators and platform teams.',
|
||||
description: 'Market operators and platform teams requiring tenant-specific governance.',
|
||||
limits: 'Custom SLAs, tenant-specific redaction policies, and governance reporting.',
|
||||
},
|
||||
];
|
||||
|
||||
export const gftdMarketplacePersonaNeeds = [
|
||||
'Compliance analyst: rights status, publication boundaries, and audit trails.',
|
||||
'Integration engineer: stable API, live adapters, and predictable responses.',
|
||||
'Integration engineer: stable APIs, live adapters, and predictable responses.',
|
||||
'Marketplace operator: packaging, tiers, onboarding, and feature gating.',
|
||||
'Legal counsel: evidence refs, disclaimers, and approval records.',
|
||||
'Legal counsel: evidence references, disclaimers, and approval records.',
|
||||
'Operations / SRE: health checks, observability snapshots, and runtime limits.',
|
||||
'Institutional customer: approved data, support, and acceptance artifacts.',
|
||||
];
|
||||
@@ -43,12 +43,35 @@ export const gftdMarketplaceGuardrails = [
|
||||
'No redistribution of restricted data without rights approval.',
|
||||
];
|
||||
|
||||
export const gftdMarketplaceFaq = [
|
||||
{
|
||||
question: 'What does GFTD provide?',
|
||||
answer:
|
||||
'A rights-aware entity directory with approved live source lanes, public-safe redaction, and bounded observability for institutional use.',
|
||||
},
|
||||
{
|
||||
question: 'Does access grant legal authority or payment rights?',
|
||||
answer:
|
||||
'No. Marketplace access only governs use of the service. It does not confer legal authority, licensing, or payment authorization.',
|
||||
},
|
||||
{
|
||||
question: 'What is required before access is activated?',
|
||||
answer:
|
||||
'The approved source-rights record, marketplace entitlement review, and operator activation path must all be satisfied.',
|
||||
},
|
||||
{
|
||||
question: 'Can restricted fields be republished?',
|
||||
answer:
|
||||
'Only when the relevant rights, publication, and redaction controls explicitly permit it. Public-safe outputs remain redacted by default.',
|
||||
},
|
||||
];
|
||||
|
||||
export const gftdMarketplaceService: GftdMarketplaceService = {
|
||||
name: 'GFTD Directory',
|
||||
href: '/marketplace/gftd',
|
||||
productSlug: 'phoenix-gftd-directory',
|
||||
description:
|
||||
'Rights-aware entity intelligence with live approved source lanes, redacted public-safe outputs, subscription tiers, and bounded observability.',
|
||||
'Institutional entity intelligence with approved live source lanes, public-safe redaction, access tiers, and bounded observability.',
|
||||
serviceUrl: 'https://gftd.d-bis.org',
|
||||
category: 'Internet registry & compliance',
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user