A dead-end screen — an OAuth error page with no retry, a "check your email" view with no resend link, a terminal success screen with no link into the app — is a silent funnel killer. Users who hit one cannot recover without hunting through browser history or abandoning the session entirely, and the user-experience taxon treats unreachable states as first-order defects. Every dead-end state on a signup or onboarding path directly equates to accounts that were created but never activated, or users who gave up mid-signup.
Critical because a dead end permanently strands the user mid-funnel and destroys conversions that cannot be recovered.
Audit every error, verification, and terminal screen in the signup and onboarding flow and add at least one actionable element to each. In src/app/(auth)/error/page.tsx render a "Try again" and "Create a new account" pair; on the email-verification screen add a "Resend verification email" button; on terminal onboarding screens link to the dashboard.
<div className="text-center space-y-4">
<p>Something went wrong during sign in.</p>
<Button asChild><Link href="/login">Try again</Link></Button>
<Button variant="outline" asChild><Link href="/signup">Create a new account</Link></Button>
</div>
ID: saas-onboarding.signup-flow.no-dead-ends
Severity: critical
What to look for: Enumerate every screen in the signup and onboarding flow. For each screen, classify whether it has at least 1 actionable path forward. Count the total screens and the screens with dead ends. Check error states, edge cases (OAuth failure, email already exists, network error during signup), and terminal states (email verification sent, setup complete).
Pass criteria: Every screen and state in the signup/onboarding flow presents a clear next action to the user. Error states include a retry or alternative path. The "check your email" screen includes a resend link. The final onboarding step links to the main dashboard. 0 dead-end screens found.
Fail criteria: Any screen exists where the user has no obvious action available — no button, no link, no instruction on what to do next. This includes: error pages that only show an error message with no retry; confirmation screens with no "continue" link; OAuth failure states that leave the user stranded.
Skip (N/A) when: No signup or onboarding flow exists in the codebase (project has no user authentication).
Detail on fail: Identify the specific screen and state. Example: "OAuth error handler at /auth/error renders only an error message with no retry button or link back to /login. Users who fail OAuth have no recovery path."
Remediation: In each error page (e.g., src/app/(auth)/error/page.tsx), add recovery actions:
<div className="text-center space-y-4">
<p>Something went wrong during sign in.</p>
<Button asChild><Link href="/login">Try again</Link></Button>
<Button variant="outline" asChild><Link href="/signup">Create a new account</Link></Button>
</div>
Common fixes: add "Try again" to every error state; add "Resend verification email" to the verification waiting screen.