Context
PR #590 added /verify as the post-KYC result page. It's designed to be hit via the backend redirect (/verify?state=in_review&session_id=...).
A user who lands there directly — old email link, bookmark, manual URL paste — sees the not_started card with a "Verify identity" button. That's accurate but slightly off-key: this page is a result page, not a launchpad.
Suggested fix
Detect direct visits (no ?state= query AND no ?session_id=) and redirect to /me/settings?tab=identity. The Settings tab has the verification section that's purpose-built for starting from cold.
Pseudo:
useEffect(() => {
const hasState = searchParams.get('state');
const hasSession = searchParams.get('session_id');
if (!hasState && !hasSession) {
router.replace('/me/settings?tab=identity');
}
}, [...]);
Keep the existing fallback (router.replace('/')) for the error-with-no-state case.
Where
app/verify/page.tsx → VerifyResult (top-level effect).
Severity / effort
P3 / polish. ~15 min.
Linked
Context
PR #590 added
/verifyas the post-KYC result page. It's designed to be hit via the backend redirect (/verify?state=in_review&session_id=...).A user who lands there directly — old email link, bookmark, manual URL paste — sees the
not_startedcard with a "Verify identity" button. That's accurate but slightly off-key: this page is a result page, not a launchpad.Suggested fix
Detect direct visits (no
?state=query AND no?session_id=) and redirect to/me/settings?tab=identity. The Settings tab has the verification section that's purpose-built for starting from cold.Pseudo:
Keep the existing fallback (
router.replace('/')) for the error-with-no-state case.Where
app/verify/page.tsx→VerifyResult(top-level effect).Severity / effort
P3 / polish. ~15 min.
Linked
/verify).