feat: member portal Sprint 5 — onboarding portal experience + restore Thread schema
- Redesign onboarding into a 5-step wizard: welcome → phone → consent → code → done - Progress bar, human-readable consent scopes (INGEST/ARCHIVE/REPLICATE/DISPLAY) with descriptions - Resend-code action, back navigation, indigo theme matching member portal - "Done" step introduces portal features (digests, events, privacy) with CTA - Onboard page shell: rounded card, policy footer - Restore Thread model + Message.expiresAt/quotedPlatformMsgId/threadId + RAW/DNC statuses to schema.prisma (wiped by prior reset; matches existing add_hybrid_ai_architecture migration) — unblocks ThreadsModule registration Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -42,25 +42,27 @@ export default async function OnboardPage({
|
||||
|
||||
if (error || !info) {
|
||||
return (
|
||||
<div className="max-w-md mx-auto mt-12 p-6 rounded-lg border border-red-200 bg-red-50">
|
||||
<div className="max-w-md mx-auto mt-12 p-6 rounded-2xl border border-red-200 bg-red-50">
|
||||
<h1 className="text-lg font-semibold text-red-800">Cannot start onboarding</h1>
|
||||
<p className="text-sm text-red-700">{error ?? 'Unknown error'}</p>
|
||||
<p className="text-sm text-red-700 mt-1">{error ?? 'Unknown error'}</p>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<div className="max-w-md mx-auto mt-12 p-6 rounded-lg border border-gray-200 bg-white">
|
||||
<h1 className="text-xl font-semibold mb-2">Join {info.groupName}</h1>
|
||||
<p className="text-sm text-gray-600 mb-1">Managed by {info.tenantName}</p>
|
||||
<p className="text-xs text-gray-500 mb-4">
|
||||
Policy version: {info.policyVersion} · Default retention: {info.defaultRetentionDays} days
|
||||
<div className="max-w-md mx-auto mt-12">
|
||||
<div className="p-6 sm:p-7 rounded-2xl border border-gray-200 bg-white shadow-sm">
|
||||
<OnboardingForm
|
||||
token={token}
|
||||
groupName={info.groupName}
|
||||
tenantName={info.tenantName}
|
||||
defaultScopes={info.defaultScopes}
|
||||
defaultRetentionDays={info.defaultRetentionDays}
|
||||
/>
|
||||
</div>
|
||||
<p className="text-center text-xs text-gray-400 mt-4">
|
||||
Policy {info.policyVersion} · Your data, your control
|
||||
</p>
|
||||
<OnboardingForm
|
||||
token={token}
|
||||
defaultScopes={info.defaultScopes}
|
||||
defaultRetentionDays={info.defaultRetentionDays}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user