# Funnel Implementation Plan

## Plan Refinement Log
- Pass 1: Define target audience, value promise, and baseline step sequence.
- Pass 2: Refine copy hierarchy, CTA ownership, and branch behavior.
- Pass 3: Validate paywall trust signals, routing, and mobile UX constraints.

## Step Sequence
Use runtime IDs in order. Keep names human-readable.

### Step 1: step-1 - Opening
**Goal:** Define first-screen value promise.
**Headline:** _TBD_
**Body:** _TBD_
**CTA:** Continue
**Interaction:** _TBD_
**Image:** _none | generate | provided_

### Step 2: email-capture - Unique identity
**Goal:** Establish one canonical user identity before checkout.
**Headline:** _TBD_
**Body:** Explain that this email is used for account access, purchase recognition, and important updates.
**CTA:** Continue
**Interaction:** Submit through `submitEmailCapture`. A new or unpaid email follows the manifest to `paywall`; an email with an active subscription skips checkout and opens `subscription-started` in returning-subscriber mode.
**Image:** _none_

### Step 3: paywall - Offer
**Goal:** Convert with clear value, pricing, and trust cues.
**Headline:** _TBD_
**Body:** _TBD_
**CTA:** _TBD_
**Interaction:** Select plan then purchase.
**Image:** _optional_

### Step 4: subscription-started - Purchase / Returning Subscriber Handoff
**Goal:** Confirm a new purchase or recognize an existing subscriber, then route the user to the app/home experience.
**Headline:** _TBD_
**Body:** _TBD_
**CTA:** _TBD_
**Interaction:** Open app / deep link. When `isReturningSubscriber` is true, show the dedicated welcome-back content instead of new-purchase confirmation.

## Funnel Fuel
| Screen | Section / role | Feeling | Fuel |
| --- | --- | --- | --- |

## Paywall Requirements
- Keep one live `paywall`; add variants only through an explicit experiment.
- Resolve plans, discounts, and experiment selection through the shared published billing runtime.
- Keep the starter `default-offer` usable locally with three plans and two discount stages.
- Keep visible `Money-back guarantee` copy.
- Keep pricing/trial copy explicit and easy to scan.
- Launch Stripe checkout in a dedicated modal dialog that matches the published checkout design.
- In the modal, prioritize Stripe Link and express wallet buttons before the manual card form.
- After a successful payment, redirect to `subscription-started` so the app handoff screen appears immediately.
- Keep `email-capture` before `paywall`; the shared runtime owns canonical email adoption, uniqueness, active-subscription lookup, and returning-subscriber routing.

## CTA Ownership Rules
- `FunnelFlow` owns default Continue action bar.
- If `actionBar.hidden !== true`, do not render a duplicate local primary CTA.
- For yes/no branches, define targets in routing config and use shared in-step controls.

## Validation Checklist
- Step IDs are stable (`step-1`, `email-capture`, `paywall`, `subscription-started`).
- The default graph keeps `email-capture -> paywall`; active subscribers bypass that edge through the shared runtime and land on `subscription-started`.
- Routing covers each active step and avoids dead ends.
- Paywall trust elements are present.
- Mobile layout remains full-screen with safe-area spacing.
