Fixing the Pricing Page Sign-Up Loop in v1.0.13
Fixing the Pricing Page Sign-Up Loop in v1.0.13
What Was Found
In v1.0.13 we identified a silent navigation loop affecting users who click any call-to-action on the pricing page — including the prominent "Get Started" button and individual plan CTAs.
The flow looked like this:
Pricing Page (/pricing)
→ User clicks "Get Started" or plan CTA
→ Navigates to /sign-up
→ /sign-up immediately redirects to /sign-in
→ User lands on the sign-in page with no explanation
A user who has never created an account and clicks "Get Started" reasonably expects to be taken through a registration flow. Instead, they end up on the sign-in screen — which implies they already have an account. This creates friction and confusion at one of the most critical conversion points in the product.
Why It Matters
- New visitors arriving on the pricing page are among the highest-intent users. A broken or misleading registration path directly impacts activation.
- No error is thrown — the redirect is silent, so the issue is easy to overlook in automated testing.
- Both entry points are affected: the homepage (
/) and the dedicated pricing page (/pricing) both contain CTAs that hit the same broken route.
Affected Files
| File | Role |
|---|---|
src/app/page.tsx | Homepage — contains "Get Started" CTA pointing to /sign-up |
src/app/pricing/page.tsx | Pricing page — contains per-plan CTAs pointing to /sign-up |
src/app/sign-up/[[...sign-up]]/page.tsx | Sign-up route — currently redirects immediately to /sign-in |
Recommended Fix
There are two valid remediation paths depending on product priorities:
Option A — Quick Fix: Redirect CTAs to /sign-in
Update the href on all affected CTA buttons from /sign-up to /sign-in. This aligns the UI with the current actual behaviour and eliminates the confusing bounce.
// Before
<Button href="/sign-up">Get Started</Button>
// After
<Button href="/sign-in">Get Started</Button>
Pros: Immediate, low-risk change.
Cons: Does not provide a dedicated registration experience; new and returning users share the same entry point.
Option B — Full Fix: Implement a Real Sign-Up Page
Replace the redirect in src/app/sign-up/[[...sign-up]]/page.tsx with an actual registration UI. At minimum this should include:
- OAuth provider button(s) (e.g. Google, Microsoft)
- Optional: email + password form
- A link back to
/sign-infor returning users
// src/app/sign-up/[[...sign-up]]/page.tsx
export default function SignUpPage() {
return (
<main>
<h1>Create your account</h1>
{/* OAuth buttons */}
{/* Registration form */}
<p>Already have an account? <a href="/sign-in">Sign in</a></p>
</main>
);
}
Pros: Delivers the expected UX; supports distinct onboarding analytics.
Cons: Requires more implementation effort.
Summary
This is a user-facing flow issue — not a runtime error — but it sits directly in the path of new user acquisition. Addressing it (via either option above) should be treated as a high-priority UX fix before any significant marketing or user growth activity.