> ## Documentation Index
> Fetch the complete documentation index at: https://docs.mad-kitty.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Opti — Funnel Builder

> Landing pages, quizzes, paywalls, upsells — the cat that builds where your ad traffic lands

<Warning>
  **Funnels are in closed beta.** Opti is a work in progress — flows, pricing mechanics, and analytics are all subject to significant change while we iterate. If funnels aren't enabled for your workspace yet, **request access via support** and we'll switch you on.
</Warning>

<Note>
  **Where Opti's focus is during the beta:** designing *initial* funnels, each anchored to a specific audience or creative angle. The best strategy right now is breadth — test many flows, combine what works from each, and find what sticks. **Iterating on existing funnels** works too, but do it manually in the funnel's chat for now: the automatic loop where Roy, the creatives, and Bidder feed funnel iterations the way they do for ads is still work in progress.
</Note>

Opti is your funnel builder — the cat that owns everything *after the click*: the landing screen, the onboarding flow, the paywall, and the checkout. Each funnel gets its own Opti with its own workspace, the same way each creative gets its own [Crea](/team/crea).

<Note>
  📷 *Banner placeholder — Opti intro.*
</Note>

It can build many different types of funnels, but its core expertise is two formats: **info-style funnels** (educational flows that teach the problem and build the case) and **quiz-based funnels** (diagnostic flows where answers drive a personalized result). It knows **paywalls** deeply — pricing presentation, plan packaging, trial win-backs — and it knows **post-purchase upsells**, including the one-click card-on-file flow.

## What it does

* **Builds complete funnels** — ad-aware landing → quiz or educational flow → personalized result → trust layer → paywall → checkout. [Jump ↓](#quiz-or-info-the-two-core-formats)
* **Designs paywalls** — a proven baseline offer with per-month pricing and a trial win-back, plus experimentation on top. [Jump ↓](#paywalls-and-pricing)
* **Adds upsells** — post-purchase offers with one-click purchase for buyers whose card is on file. [Jump ↓](#upsells)
* **Analyzes performance** — `/analyze` reads your funnel's real revenue data and finds the leaks. [Jump ↓](#performance-analysis--analyze)
* **Runs A/B tests** — weighted traffic splits between paywalls, upsells, or entire intro flows. [Jump ↓](#ab-testing)
* **Localizes** — native-reading variants for every language you sell in, with per-locale layout checks.

## The best workflow: concepts from Roy, details with Opti

You *can* walk up to a blank funnel and brief Opti directly — but the workflow that consistently works best starts one level up, with [Roy](/team/roy):

<Steps>
  <Step title="Ask Roy for funnel concepts">
    Roy proposes funnels at the strategy level — **one flow per target audience, or per specific creative angle** when one audience splits into distinct triggers worth testing. Each proposal card carries the audience, the format (quiz / info), the creative angle it continues, and the hypothesis it tests.
  </Step>

  <Step title="Approve the cards you want">
    Approving a card provisions the funnel and hands Opti the brief. Opti outlines the screens and builds straight through — you get a finished, previewable funnel, not a plan to sign off on.
  </Step>

  <Step title="Tune the details inside the funnel">
    Open the funnel's own chat to refine: sharpen the landing hook, adjust a quiz question, restyle a screen, tweak the result reveal. This is where your taste comes in — on top of a working funnel, not a blank page.
  </Step>
</Steps>

> ❌ *"build me a funnel"* — in an empty funnel chat, no audience, no angle
>
> ✅ *to Roy:* "propose funnel flows for our audiences" → approve the cards → *to Opti:* "the result screen feels generic — make the diagnosis more specific to their answers"

The reason this works: funnels convert a *specific audience arriving from specific ads*. Roy holds that context — the audiences, the winning creative angles, your business model's pricing — and bakes it into the brief. Opti then studies the actual ads driving traffic before designing the hook, so the funnel continues the story the ad started. See [Audiences & Angles](/concepts/audiences-and-angles).

## Anatomy of a funnel

Every funnel Opti builds follows the same four-stage spine — the same shape behind most winning web-to-app flows:

| Stage       | Its job                                                                                                                                                                                                                                                                                                                                                                        |
| ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Landing** | A conversion screen, not a brand splash: outcome-led headline, one CTA above the fold, visual proof — and it pays off the promise the ad made, so the click feels like a continuation, not a restart.                                                                                                                                                                          |
| **Warm-up** | Builds the case for buying — via a **quiz** (5–12 diagnostic questions feeding a personalized result reveal) or a set of **educational screens** (teach the problem, escalate the stakes, land on the solution). Either way it ends the same: a believable, specific result or insight, then a trust layer — proof placed right at the moment of doubt, just before the offer. |
| **Paywall** | The offer: the two-plan baseline with per-month pricing, and the win-back trial behind the dismiss. This is where the warm-up's built-up intent converts.                                                                                                                                                                                                                      |
| **Upsells** | Post-purchase: a confirmation screen tees up the add-on offer, presented as its own mini-flow with one-click purchase for card-on-file buyers. Optional — a funnel is complete without one, and `/upsell` adds it later.                                                                                                                                                       |

The warm-up is where the two formats diverge — which one fits is a real strategic choice:

## Quiz or info? The two core formats

* **Quiz** — when the answers can drive real personalization: a tailored plan, a diagnosis, a product pick. If answers wouldn't change what the user sees, the quiz is theater, and Opti will say so.
* **Info (educational)** — when personalization isn't honest for the product (e.g. a security tool: the recommendation is the same for everyone). Teach the problem, build the case, land on the offer.
* **Mixed** — parts of the journey branch on answers, parts don't.

There are always exceptions, so the default recommendation is to **test both formats against the same audience** when budget allows — Roy will propose the split, and the data settles it.

## Recommended starting setup (mobile apps)

For mobile-app products doing their initial funnel testing, the playbook that works:

* **Use the pricing and paywalls Opti recommends.** The baseline offer is battle-tested; the job of the first round is to find the *trigger* — which audience and angle convert — and universal default pricing is the cleanest read. Pricing is a second-level lever you optimize *after* something works. Opti will push back once if you ask for custom pricing during a first build; that pushback is worth listening to.
* **Start with 4–5 funnels per audience segment**, each attached to a different, unique creative angle. One funnel per audience tells you almost nothing when it fails — was it the audience or the flow? A spread of flows per segment isolates the variable that matters.
* **Let each funnel continue its own ad's story.** The funnel-to-ad match matters more than any individual screen — a broken narrative kills conversion harder than any visual issue.

> ❌ one funnel, custom pricing, launched against all audiences at once
>
> ✅ *"Roy, propose 4–5 flows for the screen-time-moms segment, one per creative angle, default pricing"*

## Paywalls and pricing

Every funnel ships with a proven baseline offer unless you specify otherwise:

* **Two plans** — a 6-month plan (default-selected, "Best value") and a monthly plan, both displayed as **per-month prices** with the true billing cadence as a subline.
* **A pinned dismiss (X)** that never exits the funnel — it opens a **win-back modal** leading to a second paywall with a **free 7-day trial**. A user who dismisses the first offer lands on what feels like a new deal, not the same screen reopened.
* **Pricing comes from your business model** — Opti wires plans from the project's default pricing, never invented numbers.

On top of the baseline, Opti runs paywall experiments from a library of plays — plan packaging, anchor changes, presentation shifts — each as an isolated, measurable variant. That's where [A/B testing](#ab-testing) comes in.

## Upsells

`/upsell` adds a post-purchase offer to an existing funnel. Unlike a fresh build, this one **stops for alignment first**: Opti proposes 2–4 candidate add-on products — each with its exact contents, the problem it solves, and a pricing recommendation (default: \$19.99 / 6 months with a free 7-day trial, shown per-month) — and gets your explicit sign-off on *what* the upsell contains and its price before writing any code.

Two things it always does:

* **Ships a format A/B by default** — at minimum a warm-up explainer chain vs. a scroll-story presentation, split behind weighted traffic, because upsell presentation is the highest-variance lever there is.
* **Keeps the trial rule** — buyers arriving from the win-back path just started a free trial; an upsell that charges real money immediately burns them and shows up as chargebacks. A no-trial upsell needs your explicit confirmation.

Buyers with a card on file get **one-click purchase** — no re-entering payment details.

## Performance analysis — `/analyze`

Run `/analyze` in a funnel's chat and Opti does a full economic deep-dive: it reconciles your business model's assumptions against realized numbers, reads the step-by-step conversion curve, opens screenshots of the actual screens, splits results by the creative that drove the traffic, and checks trials, declines, and refunds.

You can also just **ask it anything** — "which quiz step loses the most people?", "how do trial starts compare across creatives?", "what's our net revenue per day this week?" — it queries the same data warehouse behind the scenes.

How the numbers are built — what's tracked by default, what the Meta pixel receives, why sales are booked to the buyer's checkout day, and why Meta's dashboard never matches real sales exactly — is covered in [Funnel tracking & analytics](/team/opti/tracking).

<Note>
  **Data freshness:** the warehouse syncs a few times per day, so numbers can be **up to \~4 hours behind** live. Opti checks and reports the sync timestamp — don't panic-read a quiet last-few-hours.
</Note>

<Warning>
  **Improvement suggestions are work-in-progress.** `/analyze` ends with fix hypotheses — take them with a grain of salt for now. They're grounded in real numbers and real screens, but the recommendation layer is still being tuned. Treat them as a starting point for a conversation, not a to-do list.
</Warning>

The best move after an analysis: **set up an A/B test and talk it through with Opti.** An analysis produces hypotheses; a test settles them. "The paywall see→start rate looks weak — let's test the collapsed single-plan variant against the current one" is exactly the conversation Opti is built for.

## A/B testing

Opti can split traffic between variants anywhere in the funnel — just ask it to set one up. Under the hood it's a **weighted split**: each visitor is assigned a branch by weight (say 50/50 or 70/30), and the assignment **sticks for their whole session**, so nobody sees both versions. Exposures are tracked automatically, and `/analyze` reads the results per branch.

Where A/B tests earn their keep:

* **Two paywalls** — the classic and best first use case: same funnel, two offers or presentations, let the revenue decide.
* **Different upsells** — competing add-on products or presentation formats after purchase.
* **Different intro / warm-up flows** — the funnel's opening can split too, so two landing-and-quiz sequences can compete for the same traffic before converging on a shared paywall.

<Tip>
  **Run at most 1–2 A/B tests at a time, and go in sequence.** Every split divides your traffic — and your statistical power — in half. Three simultaneous tests on a young funnel means three inconclusive answers instead of one clear one. Test, conclude, roll the winner out, then start the next.
</Tip>

> ❌ *"test two paywalls, two upsells, and three landing variants — launch it all"*
>
> ✅ *"let's start with the paywall test from the analysis — once it concludes we'll take on the upsell format"*

## Preview, publish, and versions

Every funnel workspace runs a **live preview** — Opti shares the URL after any change, and screenshots every screen at phone size (funnels are mobile-first, always) before calling anything done. Nothing reaches real traffic until you say so: `/publish` builds the production version and flips it live atomically. Each publish is a new immutable version, so re-publishing is always safe, and custom domains (Integrations → Funnel domains) automatically serve whatever version is live.

## Custom code and integrations

Under the hood every funnel is a real codebase (React + TypeScript), and Opti is a real engineer in it. So if your funnel needs something beyond the built-ins — a specific npm library, a call to your own backend API, a third-party tracking snippet, a custom animation, a widget you already use elsewhere — **just prompt it**. Describe what you have (paste API docs, a snippet, or credentials-free examples) and Opti integrates it into the flow.

> ✅ *"after the quiz, send the answers to our API at api.ourapp.com/leads — here's the endpoint spec"*
>
> ✅ *"add our TikTok pixel alongside the built-in tracking"*

For what's tracked out of the box and how to ask for more, see [Asking Opti for custom tracking](/team/opti/tracking/custom-tracking).

## Commands

| Command       | What it does                                                        |
| ------------- | ------------------------------------------------------------------- |
| `/new`        | Build a funnel from scratch — outline, then build straight through  |
| `/upsell`     | Add a post-purchase upsell — aligns on the offer first, then builds |
| `/analyze`    | Deep-dive the funnel's performance and produce fix hypotheses       |
| `/localize`   | Translate the funnel into its supported languages                   |
| `/publish`    | Build and publish the funnel to its public production URL           |
| `/lib-update` | Upgrade the funnel runtime library and migrate the code             |

## Good to know

* **Opti is opinionated.** A weak hook, a bloated quiz, a paywall that buries the offer — it says so instead of hedging. Push back if you disagree, or better: [test both](/concepts/working-with-kitties#take-both-ideas).
* **Steer, don't restart.** *"Keep the flow, but the result screen should lead with their quiz answers"* preserves what already works. See [Working with the Kitties](/concepts/working-with-kitties).
* **Publishing is always explicit.** Opti never pushes changes to live traffic on its own.

## Works with

**[Roy](/team/roy)** — proposes funnel concepts (one per audience or angle) and dispatches approved briefs to Opti. **[Crea](/team/crea)** — makes the ads whose story the funnel continues. **[Bidder](/team/bidder)** — sends the traffic.
