The decision in one view
Men against women, with one mirrored story. Money decides the audience.
One web page per arm. Chapter 2 costs $2.99. No app, no account.
or $2,340 if Stage 2 runs
Next step: spend one evening and about $20 as a paying user of Chapters, ReelShort and DramaVerse. Nothing gets built or bought before that.
Problem
The original idea was a first-person video game where you choose your own path. It has one original AI girl. The player is a man who picks his line, and her reaction clip plays.
During the session, Eugene said that neither the audience nor the mechanic is fixed. The one fixed point is the fastest path to revenue.
So the real question is: which audience pays for an interactive romance video story? And what is the least we must build to take their money?
Demand evidence
There is no direct evidence yet. No ad has run, no stranger has played a clip, and nobody has paid. The indirect evidence:
- Heyyyy makes about $2M a month (an estimate). Its audience is women, mostly aged 30 to 55; the research inferred that from its ads and reviews. Its French "Where were you?" ad has run 31 days and is still active. In it he asks a question, reply chips appear, and his reaction plays on camera. The ad copy says "pick your reply, watch his face change". The app itself is text and still images. Its reviewers ask for "a cut scene in video form of the dates". This is the clearest sign that this audience wants the video reaction itself. Chai's version of the same ad has run 85 days, but it targets men.
- Short-drama apps: ReelShort made about $1.2B in 2025. About 70% of its users are women, mostly aged 30 to 60, who pay per episode for romance video.
- Interactive story apps: Choices has made about $175M over its lifetime, and Episode made more. Both charge gems for the "premium choice", which is usually the romantic one.
- Men: the only evidence is paid ads. Chai (50 of its 74 active ads) and Kindroid spend money to get men, then send them to text chat. We know they buy men. We do not know if they keep them.
Sources: the nine-app teardown (.claude/research/competitor-analysis/synthesis.md), ReelShort, Choices monetization.
Status quo
The nine-app teardown compared us with AI chat apps. The closest incumbents are in two other categories that the teardown did not cover.
| Apps | What they are | How they charge |
|---|---|---|
| Episode, Chapters, Choices | Drawn romance stories where you choose your path | Premium choices (gems) |
| ReelShort, DramaBox | Linear romance video, vertical | Per episode |
| DramaVerse, DRAMAGO | Both combined: video drama where you choose. DRAMAGO says it has "AI-powered features" | Unknown. AppKittie has had no credits since 2026-10-03 |
Crazy Maple Studio owns both ReelShort and Chapters, so the strongest incumbent already holds both halves.
Eugene has not used any of these as a paying user. That is the assignment.
Who and the narrowest wedge
The user is open, and the test decides it.
Arm W: women
All ages. Meta's age breakdown shows which age clicks to buy, with no extra arm. The evidence expects women aged 30 to 60 to win. The story has a male character.
Arm M: men
All ages, with the same story mirrored. The character is a woman.
Excluded
Young women who left Character.AI. They mainly praise freedom and characters from shows they love, and an authored video story can offer neither.
The wedge: one web page per arm, with three opening clips, one choice, two reaction clips, a cliffhanger, and chapter 2 for $2.99. There is no app, no account and no branching engine.
Constraints
- Solo founder. The test must go live in about a week.
- The App Store comes eventually ("we need to get it into the app store eventually"). The web page proves people pay first, so the story format must be easy to move into an app later.
- Meta ad policy: romance is fine, but sexual content gets rejected. The existing
rps-stripandafter-work-ticklecreative is probably not ad-safe. Use a new story that is safe for ads. - Make the ad match the clip. A spicy ad over a tame product is the #2 complaint at PolyBuzz and Heyyyy.
- Seedance ignores framing prompts, so reframe the clips after generation.
Premises
- 1
Test men against women.Revised
The first version said "women 30–60 first". The research shows that women pay in this category. It does not show that we can reach them at a profit. Codex challenged the premise, and Eugene accepted the revision. - 2
The edge is cheap branches, not the format.Agreed
The format exists. We win on AI making each branch cost a few dollars and a story shipping in days. - 3
Web page first, App Store later.Revised
The web page proves people pay. The App Store comes once a story sells. - 4
Charge per chapter, with no timers, energy limits or ad walls.Open
The test uses a single $2.99 purchase of chapter 2. Subscriptions and premium choices wait until people show they will buy.
Second opinion from Codex
Codex read a summary of the session with no other context.
- Steelman: "A romance studio that sells short, interactive video stories, with AI making meaningful alternative scenes affordable."
- Most revealing answer: "Fastest path to revenue". Eugene is "committed to a business outcome, not a format."
- Challenged premise: "Women 30–60 first is premature." The evidence suggests women want this, but it doesn't show which customers we can reach at a profit. Its test: run comparable paid tests for men and women.
- 48-hour prototype: hosted MP4s, Stripe Payment Links and PostHog. One romance story, three opening clips, one choice with two reactions, a shared cliffhanger, and a $2.99 continuation. It skips accounts, chat, subscriptions, on-demand video and a branching engine. It suggested Vercel; the plan below uses Cloudflare.
Approaches considered
| Approach | Status | Why |
|---|---|---|
| A. Paid test page | Chosen | The fastest route to the first dollar. Money settles the question of men against women. |
| B. Story player first | Later | A chapter player that reads from data, with saves, accounts and purchases. Weeks of work before we know if anyone pays. Build it after A has a winning arm. |
| C. TikTok series where comments choose | Not chosen | Organic reach is a lottery, and the money comes last. It can reuse A's clips later at no extra cost. |
The test
Approach A runs with two arms that differ only in the audience and the gender of the character.
Story
One premise for both arms, safe for ads and mirrored. Choose it before generating anything, and try it on a woman aged 30 to 60 first.
- "You're Not Leaving Yet" (someone stops you at the party door) came from the research on male fantasy. Mirrored for women, a man blocking her and taking her phone can feel threatening.
- Safer mirror candidates come from hooks that already run for both genders: the jealous "Where were you?" call, or the second-chance ex ("Then I saw your name again").
- Known confound: if one premise suits one gender better, the test measures the story, not the audience. Read the results with the chosen premise in mind.
Clip timeline for chapter 1
Visitors come in cold from an ad, so the choice must appear by about 20 seconds.
Chapter 2 plays after payment: 4 clips of up to 15 s each, because the buyer has paid and will watch.
| Clip | Length |
|---|---|
| 3 opening clips | 5–7 s each |
| 2 reactions | 5–8 s each |
| Cliffhanger | 10 s or less |
| 4 chapter 2 clips | up to 15 s each |
Page flow
Both arms follow the same flow.
- The ad sends the player to the page. Clip 1 autoplays muted, with captions burned into the video. A "Tap for sound" button unmutes it.
- Clips 1 to 3 play back to back.
- Choice: clip 3 freezes on its last frame. Two buttons appear over the bottom third, each with one line of dialogue (at most 40 characters). There is no timer.
- The chosen reaction clip plays. Both reactions lead into one shared cliffhanger clip.
- Paywall: the cliffhanger freezes on its last frame, with the card "Chapter 2: $2.99" and one button. The button opens the Stripe Payment Link for that arm.
- Payment succeeds: Stripe sends the player to
/<arm>/ch2/?session_id={CHECKOUT_SESSION_ID}. Chapter 2 plays at once. With a redirect, Stripe shows no success page of its own. - Payment cancelled, or the player goes back: Payment Links have no cancel URL, so the browser's back button brings the player back. The page stores
reached_paywallin localStorage when the paywall card appears. When that flag is set, the page reopens on the paywall card and replays nothing.
URL map and clip manifest
| Path | Contents |
|---|---|
/m/, /w/ | Chapter 1 for Arm M and Arm W |
/m/ch2/, /w/ch2/ | Chapter 2, played after payment |
Every link carries utm_source, utm_campaign and utm_content (the creative ID). Each arm has a JSON manifest that lists every clip in order, with its ID, file, length and type (scene, reaction or cliffhanger). For the choice, it also lists the two labels and their reaction IDs.
Video playback
The page must work in iOS Safari and in the Instagram and Facebook in-app browsers.
- Use two
<video muted playsinline>elements: one visible, and one hidden that loads the next clip. Swap them at each cut. The "Tap for sound" tap unmutes both elements in the same gesture, so the sound carries over. - Show a full-screen "Tap to play" fallback when autoplay is blocked, for example in Low Power Mode.
- While the choice is on screen, fetch both reaction clips as blobs, so either one starts at once.
- Encode MP4s as H.264 at 720p with faststart, each 15 MB or less.
Stack
- Hosting: Cloudflare Pages for the page, and R2 or Pages for the MP4s. Pages limits a file to 25 MiB, and the clips stay well under it. Do not use Vercel Hobby, because it bans commercial use.
- Payments: one Stripe Payment Link per arm, so Stripe's own reports split purchases by arm.
- Analytics: PostHog and the Meta pixel.
- No login: do not put chapter 2 behind a login. A guessable link is fine for a test.
Purchase tracking
- Stripe is the source of truth for purchases. The pixel is only for ad optimization and attribution.
- The paywall button adds
?client_reference_id=<PostHog distinct ID>to the Payment Link, so each Stripe purchase joins its funnel. - The chapter 2 page fires the pixel
Purchaseevent only whensession_idis present. It uses the session ID asevent_id, so a refresh or a shared link adds no false purchase. - Turn on post-payment invoices for each Payment Link, and put the chapter 2 link in the invoice footer. A buyer who closes the tab can still watch from the email.
- The page saves
armand the UTMs in localStorage and as PostHog person properties, so they survive the round trip through Stripe.
Funnel events
Every PostHog event carries arm, utm_* and creative_id.
| PostHog event | Extra property | Meta pixel event |
|---|---|---|
page_view | ViewContent | |
clip1_complete, clip2_complete, clip3_complete | ||
choice_shown | ||
choice_made | choice | |
cliffhanger_reached | Custom CliffhangerReached (the event ads optimize for) | |
paywall_view | ||
paywall_click | InitiateCheckout | |
purchase | Purchase (only with session_id) | |
ch2_complete |
Content per arm
A character sheet and 10 clips: 3 opening clips, 2 reactions, 1 cliffhanger and 4 for chapter 2. Make drafts on Seedance 2.0 fast and finals on Seedance 2.5 1080p, then downscale the finals to 720p for the web.
Meta setup
- Ad account: open a new one for this test. Do not use the Reelly account, because a policy rejection here could harm it.
- Countries: US, GB, CA and AU only, in English.
- Campaigns: give each arm its own campaign and budget, so Meta cannot move spend between arms.
- Audience: Arm M targets men aged 18 to 65+, and Arm W targets women aged 18 to 65+. Use the original audience options with gender fixed, not Advantage+ audience, which treats gender only as a suggestion. Check the gender breakdown after the first day. Use no interests.
- Optimization: set up
CliffhangerReachedas a custom conversion, and have both arms optimize for it. Purchases will be too few for Meta to learn from, since it needs about 50 events a week. - Copy: frame the ad as an interactive story, which is entertainment. Do not suggest a dating or companion service, because Meta requires prior approval for those. Never name a personal attribute ("Single?", "Lonely?").
Budget
These are estimates. The doc's own rates mean about 1.2% of visitors buy: 40% reach the cliffhanger, and 3% of those buy. So 10 purchases need about 830 visitors, which costs about $400–1,250 per arm. The test therefore runs in two stages.
| Item | Per arm | Both arms |
|---|---|---|
| Character sheet | about $10 | about $20 |
| Clip drafts (about 25 at $0.79) | about $20 | about $40 |
| Final clips (10 at $13.86, 1080p) | about $140 | about $280 |
| Stage 1 ads: read the funnel and the paywall clicks | $500 | $1,000 |
| Stage 2 ads: only if Stage 1 passes, to count purchases | up to $500 more | up to $1,000 more |
| Total | about $1,340, or $2,340 with Stage 2 |
Every paid generation still needs approval with its cost, per batch.
Success criteria
These thresholds are starting guesses. Revise them before launch if better benchmarks turn up.
Stage 1 · first $500 per arm
- The hook works: at least 60% of visitors make the choice.
- The story holds: at least 40% of visitors reach the cliffhanger.
- People want chapter 2: at least 10% of the players who reach the cliffhanger click the paywall.
Stage 2 · up to $500 more per arm
- Runs only for an arm that passed Stage 1.
- Stop rule: judge each arm at $1,000 total spend, whatever the purchase count. Count purchases from both stages.
- People pay: at least 3% of the players who reach the cliffhanger buy, counted in Stripe.
- Age read: read it from
paywall_clickby Meta age bracket. Purchases are too few to split by age.
Winning arm. If only one arm passes Stage 1, it wins, provided it also passes "People pay". If both pass, the winner is the arm whose cost per purchase is at least 2× better. Ten purchases are too few to separate smaller differences. If neither arm is 2× better, choose by paywall-click rate, and call the result a tie on money.
What this test proves: people will pay, not that the business makes a profit. At about $0.50–1.50 per visitor, with 1.2% of visitors buying, one purchase costs about $40–125 against $2.99 of revenue. Profit needs a buyer who keeps buying chapters. Set the cost-per-purchase limit for the next test from these results.
When a stage fails
Find the step where people drop off. Don't blame the audience by default.
| Where it breaks | Probable cause | Next move |
|---|---|---|
| Few finish clip 1 | The hook, or AI faces that look fake | New first clip, same story |
| Few make the choice or reach the cliffhanger | The story | New premise |
| Many click the paywall but few pay | Price, or checkout friction in in-app browsers | Split the purchase rate by browser. Add an "Open in Safari" prompt. Try a lower price. |
| Both arms fail in the same place | The format or the story, not the audience | Rethink before building B |
Open questions
- Charging model (premise 4): one chapter for $2.99, a subscription, or premium choices? This test checks only whether people buy. Test the price later.
- Founder fit for Arm W: can Eugene write romance for women aged 30 to 60, or should the story adapt a proven trope (a billionaire CEO, second chances, a jealous ex)?
- AI faces: will ReelShort viewers, used to polished live action, accept AI faces? Arm W's rate of finishing clip 1 answers this in part.
- DramaVerse and DRAMAGO: how big are they? Check when the AppKittie credits refill, or check the Meta Ad Library now.
- Meta approval: will a romance story where you choose your path pass review in both arms? Get the first ad approved before generating chapter 2.
Launch and dependencies
Distribution
- Test: a web page, reached only through Meta ads (Facebook and Instagram Reels). The
meta-ads-cliskill does the setup, on a new ad account. - After a winner: build approach B as an iOS app and ship it through the house TestFlight and App Store standard (
testflight-deploy). Keep the web checkout running for paid ads, as Chai does.
Dependencies
- A Stripe account with two Payment Links, one per arm. Set each link's redirect after payment to include
{CHECKOUT_SESSION_ID}. - A branded domain for the test page. Don't use
eugenechantk.me/pages: those pages are noindexed and unbranded, so the ad would look less trustworthy. - A new Meta ad account and a Facebook page for the story brand, both separate from Reelly's.
- A PostHog project.
- reAPI credits: about $340 for 2 character sheets, about 50 drafts and 20 final clips.
- AppKittie credits for the competitor check (optional).
The assignment
This week, spend one evening and about $20 as a paying user of Chapters, ReelShort and DramaVerse.
Write down the exact second each one made you want to pay, and the second you wanted to quit. Bring the six moments to the next session. They shape what the cliffhanger clip shows and the words on the paywall card.
What I noticed about how you think
"i am still debating between targetting at male versus female"
You said this after a full day of research built around a game for men. You said it when asked, without defending the earlier work. That makes the evidence worth more.
"i am not entirely fixed on the video + choice game mechanic either; it is just an idea and i am willing to change"
Then you picked "Fastest path to revenue" as the one fixed point. That turned an open search into a test you can decide.
"both audience as in men and women? or younger women or older women?"
You pinned down a term before you agreed. That question led to using Meta's age breakdown in place of a third arm.
"i do like the web prototype; but we need to get it into the app store eventually"
You accepted the shortcut and kept the end state in view. That's why the story format is planned to move into an app later.