⚠️ SUPERSEDED (4 Aug 2026) — kept as the 8 Jul reasoning archive, not the operating plan. Its durable rulings now live in the Growth Cockpit → 📚 Docs → ⛔ SETTLED, each re-verified against live sources and each carrying what would legitimately reopen it. Three moved since July: the geo-holdout paid gate was replaced by the Paid Roadmap's circuit-breakers, "no lifetime to cold" hardened into never sell lifetime at all, and the hybrid analytics split was replaced by the 10 Jul ownership law. What is stale here: the whole document is framed in MRR, which the 27 Jul approved plan replaced with repeatable net cash; the §0.5 dated targets (Sprint 1 → 22 Jul, the 31 Aug gates) have passed; and §4's hour-by-hour backlog is superseded by the cockpit 🕹️ Console queue and the 90-day fleet charters. Live doctrine: the Growth Cockpit + the Strategy Source of Truth. The headline MRR figure below still auto-refreshes daily.
The Movement Athlete · Growth Engine

The Sprint to MRR — our two funnels

How we get MRR rising again: make both funnels measurable, fix the biggest leaks, then — only then — turn paid back on. This is the shared operating plan for Aga + Nic. Every row below clicks open to the reasoning and the live data behind it.

8 Jul 2026 · amended & approved same day · shared plan for Aga & Nic · all figures USD · break-even $15K · goal $25K+ · sources: live Stripe ×2, RevenueCat, Meta, GA4, AppsFlyer, Amplitude · click any ▸ row to unfold

§0What this is

This is our sprint to grow MRR, run through the two funnels that produce it — plus the email engine that converts them and the organic offence engine that fills them. Two numbers tell us it's working: lead → trial per funnel and month-on-month new-MRR growth. Retention now has its own plan (post-first-payment); this doc is top-of-funnel only — stranger → first payer.

The two funnels + the backend

FunnelThe pathWhy it matters
1 · Webquiz → paywall → email → nurture → paid (two paths at the paywall: carded trial-start OR direct ~50%-off purchase — gate metric = Lead→Paid, corrected 16 Jul)Fast to change (no app release) — we learn here first
2 · App (iOS-first)install → onboarding + assessment → paywall → 7-day trial → subscribeWhere 191 of our 763 paying members live (572 are web/Stripe)
Backend · Emaillead→trial nurture · trial→paid · churn-defenceConverts both funnels; moving ActiveCampaign → Customer.io (Intercom already runs our in-app messages)

Where we are today

★ My recommendation (read this, then unfold the rest)

You don't have a traffic problem. You have a visibility problem and a focus problem. The engine is dark — RevenueCat holds ~190 paying subs; Amplitude sees 3–5 — so every fix today is a guess, and July proved what guessing costs. And the business is spread across 10+ workstreams while MRR sits flat-to-declining. The whole point of this matrix is to say no to almost everything and yes to one chain.

Two things run at once:

① Always-on — the offence engine. Not a task, it just runs: organic content (Lee + Ritesh) + paid ads (Nic — Meta/Google, small and capped) → the free assessment → email, plus the always-on quiz-email retargeting. This is how we grow while the build below happens — it never waits on the wiring, and it compounds week over week.

② In sequence — the build (mostly Nic):

  1. This week — make the numbers real. Nic wires RC→Amplitude, fixes the checkout metric, captures UTMs. ~1.5 days, no app release. Everything below is unreadable until this fires.
  2. Then — instrument both funnels end-to-end (canonical user_id = the keystone), and fix the biggest leaks — web quiz first (it iterates without an app release).
  3. Prove paid works, then scale it. Paid's already running small to the quiz (cost-per-lead is measurable today); once we can see lead→trial, scale what works and open iOS.

The numbers you and Nic watch: Lead → Paid, per funnel & source + net MRR Δ (new − churn) + MoM new-MRR growth — $15K break-even is the gate, the growth rate is the prize — reconciled to Stripe + RevenueCat. If work didn't move them, it didn't count.

Funnel model (locked 16 Jul, auto-synced): Lead → Paid, by source — two paths: carded free trial (trial-start IS the purchase) + direct ~50%-off purchase (no trial). Not "trial → paid".

Two things worth knowing up front

§0.5The Sprint Contract — the maths, the targets, the finish line (amendments approved 8 Jul)

The maths, run backwards (USD)
The dated targets — the sprint has a finish line

Retention-Now — three actions, in Phase 0 (the fastest MRR in the plan)

ActionWhatOwnerWhy now
R1 · Save the 110 queueThe 110 cancel-at-period-end subs are individually identifiable in Stripe, carrying ~$1.6K MRR out the door. Personal Jesse-voice email: pause option · downgrade-to-quarterly · rescue offer. Fleet writes, Aga eyeballs, send this week.Claude + AgaThe single fastest MRR defence available — days, not weeks.
R2 · Cancel-flow interventionWhen someone clicks cancel: offer pause / downgrade / rescue before confirming. Standard SaaS save-flow; ~a day of work on the web side.Nic (web) · Claude drafts copyConverts a % of every future cancel, forever. Compounds.
R3 · D6 pre-bill nudgePulled forward from Phase 2 (#16): Day-6 push + loss-framing email before the trial bills. RC knows the trial date natively — no instrumentation gate.Nic + Claude#1 cancellation driver in card-upfront models is billing-day surprise.

The always-on engine — quotas and owners (was two lines; now a contract)

EngineThe weekly contractOwnerCockpit row
Email revenue calendar1 value email + campaign moments to engaged, bot-purged segments (43K list; July proved email drives the sales — ~£6.8K of ~£9K). Fleet writes via /email-fleet, Aga approves. Monthly offer moment to warm segments only.Claude fleet + AgaEmail-attributed revenue /wk
Organic contentUpside-only per the SoT (social reach ~dead — not a pillar): cheap ManyChat "comment ASSESS" capture + one creator/affiliate shot, everything pointing at the free assessment; ManyChat→quiz UTM link verified. Paid small-&-capped is the reach engine.Ritesh (make) · Lee (post)Organic leads /wk (upside)
Quiz-email retargetingOngoing nurture + small warm Meta custom audience — gated on the bot purge (engaged-only seed, per the 00e send-plan rule), matched offer, never lifetime-to-cold, holdout measured.Nic (Meta) · Claude (emails)Lead→trial, re-engaged cohort

Owner split — Nic-only vs Claude-builds (capacity fix)

Nic is the constraint (~85–145h backlog) — so everything buildable without him moves to Claude (built in-package, Aga eyeballs before ship, per the standing rule): quiz T6 web events · exit-intent capture · paywall/checkout copy · all email sequences & campaigns · R1 save campaign · A/B variant builds · this cockpit. Nic-only: T2 RC→Amplitude · T3 PIs · T4 user_id (+ RN review) · Meta/CAPI · CIO wiring · cancel-flow backend. RN-team question resolves by Fri 11 Jul — can they build from the prod branch, hours + rate — or Phase 1 native re-plans around Nic alone.

Offer architecture — added to the test queue (Phase 2)

July's root cause was offer×audience — so the biggest untested conversion lever is what cold traffic's first paid step should be: 7-day free trial vs the existing $9.99/30-day trial (/30trial) vs annual-first. This is now test #17b. Trial = card-on-file = the buying decision; the entry offer sets everything downstream.

§0.6The spine — Measure → Fix → Scale, and what we push while Nic measures

The whole sprint runs on one sequence: Measure → Fix conversion → Fix retention → then scale paid. Nic already owns Measure and is building it now. That stage does not block the others — while the instrumentation lands, Aga + the Claude fleet run the conversion and retention sprints in parallel (none of them wait on Nic). Only paid is truly gated. Each stage below carries its live to-do; every task names the MRR lane it moves (per §7's rule — no lane, it waits).

① MEASURE · 🔧 Nic, in flight ② FIX CONVERSION · ▶ now ③ FIX RETENTION · ▶ now ④ SCALE PAID · 🔒 gated
Stage ① · Measure — see the funnel 🔧 in flight · Nic
Nic's lane — we track it, we don't duplicate it.
Done = cost-per-trial + trial→paid readable on the daily cockpit. Until then, paid stays gated.
Stage ② · Fix conversion — more trials from the traffic we already have ▶ push now
Parallel, no Nic gate · £0 ad spend · lane ① trial starts
Stage ③ · Fix retention — stop the bleed ▶ push now
The fastest MRR in the plan — a halved churn ≈ tripling lead flow · lane ② save churn
Stage ④ · Scale paid — only after the funnel can be seen 🔒 gated · do not start
Opens only when Stage ① reads and a holdout proves the spend is incremental.
Running underneath all four, every week (doesn't stop for measurement)

The email revenue calendar (1 value email + campaign moments to engaged, bot-purged segments — July proved email drove ~£6.8K of ~£9K) and organic capture (ManyChat "comment ASSESS" → free assessment). See The always-on engine table above. The filter for anything new joining this list: name the MRR lane it touches in 30 days — no lane, it waits (§7).

§1The four decisions you asked

Clear yes/no first; unfold each for the full reasoning, the data, and the skeptic's correction.

1 · iOS ads — early results look promising. What's the framework to scale?scale on trial dataframework below
Where we areThe iOS results look good and it's worth leaning in. The one thing we need before we scale spend with confidence: today we can see installs, but not yet which installs become trials and subscribers — that's the RC→Amplitude + AppsFlyer link Nic's already wiring. Once it's live we can read cost per trial, which is what tells us the ads are truly working, not just cheap. The framework to scale (what has to happen)① Trial-level read live — T1 (RC→Meta CAPI), T5 (AppsFlyer conversion events), T4 (canonical user_id) so a trial ties back to the campaign that drove it. ② A few days of data so we have a real cost-per-trial number. ③ Then a small, measured step-up in spend, judged on cost per trial — scale what proves out. This is how we turn "the installs look cheap" into "we know these ads make subscribers." Two things worth doing alongside• A tiny Apple Search Ads brand test — worth it if a competitor is bidding on our brand terms (quick App Store check first). • Nic can confirm AdServices.framework is linked (10 min) so ASA needs no app release. One number to hold ontoCost per trial, net of Apple's IAP cut (~30% yr 1) — the real unit economics, and what makes the scale decision safe rather than a guess.
2 · Google Ads → web quizGO — measured on cost-per-lead
VerdictYes — but Category Search only, and not until four gates clear. No to Demand Gen / YouTube now. This is a genuinely better play than the failed Google UAC app-installs (it feeds the owned email list and the most-iterable funnel). Why the "cheaper" claim is half-trueCPC is cheap — calisthenics category keywords run £0.80–1.80 UK. But with today's broken quiz screen-1 and dark email nurture, that clicks out to a Cost per Trial of ~£41–66 (MODELLED) — 2.5–4× the ~£16 ceiling. Cheap traffic into a leaky, blind funnel is the exact July mistake. July's Google result (1,809 page-loads, 0 sales) wasn't proof Google can't work — it was proof that spending before conversion events are wired produces no usable information. The four gates (in order)① T3 live (begin_checkout fires on real intent, not page-load). ② Quiz screen-1 fixed and organic completion confirmed >25% from 200+ sessions. ③ Meta restarted and proven first — prove one channel cold before opening the next; if Meta is under £16/trial and Google is unproven, scale Meta, don't diversify. ④ T6 + Google offline-conversion import wired (bid to trial_started, not page-views). Free bonus testOnce T3 is live, run a 14-day brand-keyword pause test (£0). If organic branded traffic stays flat, branded Google spend is pure harvesting — cut it, recover ~£100–150/mo. If it drops >20%, it's incremental. Highest information-per-pound decision in the set.
3 · How we split the analytics buildNic + RN team~10 days, best case
The splitNic's already executing Phase 0 (the RC→Amplitude wire, the checkout metric fix, UTM capture) — the highest-leverage work, no app release needed. To hold the ~10-day path, the RN team can take the native Phase 1–2 (T4–T7, the SDK-level user_id + conversion events) in parallel, with Nic reviewing the two attribution-critical merges (T4 user_id, T5 purchase callback) before they land. Timeline — honest~10 working days for T1–T6 is best case, if the user_id schema's locked on Day 2; realistically 15–25 days. T7 adds App Store review (+12–17 calendar days), outside our control — so it's not a sprint gate. The one thing that sets the timelineConfirm the RN team can build from our production branch quickly. If yes, the 10-day path is real; if it needs environment setup first, we add that time up front rather than discover it mid-sprint. Day-2 schema lockAgree in writing: the canonical user_id + pre-auth fallback, the exact SDK call order, and the web→app pass-through — the one step that lets all the channel data join up later.
4 · Rebuild the Django checkout?NO rebuild nowSafe wins + gate
VerdictDon't rebuild now. Ship a few directionally-safe wins; gate the full rebuild on data. WhyToday's autopsy proved the payment step works (72% of card-entries succeed) — so "it's broken, rebuild it" isn't supported, and the diagnosed dominant leak was offer×audience, not checkout UX. A full rebuild is 7–10 of Nic's days on an unverified hypothesis. Critically, that 72% only measures card-entry→success; it says nothing about arrive→card-entry — the part that could actually leak — because page-load ghost PIs erase it. We literally can't see whether the page is the problem yet. The subtle trap the skeptic caughtDon't bundle CRO changes into the Rank-2 measurement fix — that contaminates the clean baseline Rank-2 exists to create (you'd get lift you can't attribute — the 8-Jul mistake in a new costume). Only the paywall-coherence fix rides along (annual-first, remove cold-lifetime) because it's a correctness fix, not an experiment. Ship now (safe, after cart closes ≥13 Jul)Paywall/checkout coherence · restate the 60-day guarantee by the card fields · named charge-date copy (trial plans ONLY) · mobile hygiene (viewport, numeric keypad, sticky CTA). ⚠ "£0 today / Start Free Trial" is a false statement on the £297 lifetime path — dark-pattern/chargeback risk. Scope to trial checkout only. Wave-B (after ~2 weeks of clean baseline)Apple/Google Pay, trust-stack, per-day framing, button A/B — all measurable, so ship them dated with a "before" snapshot. Rebuild unlocks only if≥2 weeks of clean arrive→card-entry data shows the rate is genuinely bad (<50–60% mobile) and session recordings localise where users drop. If it's ≥60%, the page isn't the leak — reallocate Nic upstream.

§2The effort × impact map — what to do first

Where every major action falls. Do-first = high impact, low effort. Everything gated on measurement is marked 🔒 gated.

◀ Lower effort ———— Higher effort ▶

▲ HIGH IMPACT · LOW EFFORT — DO FIRST

  • RC→Amplitude wire (T2) — the one constraint
  • Retarget the quiz-email list — ongoing, proven offer web-quiz £
  • Annual-first paywall + remove cold-lifetime web-quiz £
  • Fix the lifetime-cart page-load PIs (T3) — before the next promo (the evergreen sub checkout is already clean)
  • Win-back lapsed subs — ✅ done (live in AC)
  • Confirm retention is the leak (already analysed)
  • iOS AHA-before-paywall walkthrough (Nic)
  • Churn trigger (14-day no-workout) — pulled forward

▲ HIGH IMPACT · HIGH EFFORT — BIG BETS (gated)

  • Canonical user_id (T4) 🔒 keystone, error-prone
  • CIO migration 🔒 gated on event wire + deliverability
  • Trial→paid 7-email + lead→trial nurture 🔒
  • RC Experiments paywall tests 🔒 if trial volume allows
  • Meta CAPI repoint Lead→Purchase 🔒
  • Checkout rebuild 🔒 only if data proves it

▽ LOWER IMPACT · LOW EFFORT — QUICK WINS

  • AdServices.framework check (10 min, changes calendar)
  • Google brand-keyword pause test (£0 revenue decision)
  • Checkout safe copy (guarantee, charge-date, mobile)
  • ASO keyword refresh (Aga, App Store Connect)
  • Google Ads API token application (external lag)

▽ LOWER IMPACT / UNVERIFIED · HIGH EFFORT — DON'T (yet)

  • iOS Meta ads now — blind spend, wrong signal
  • Google Demand Gen / YouTube — low intent, unproven
  • Full checkout rebuild now — unverified hypothesis
  • Adapty migration — RC Experiments already covers it
  • Intercom — CIO in-app messaging covers it
  • Scaling any paid before the holdout

§3The lever map — what "maximising the funnel" means

Maximising isn't more traffic. MRR ≈ Traffic × %→email × %email→trial × %trial→paid × price × months-retained (+ warm-audience recovery). Every × is a lever; lift five stages 20% each and you ~2.5× the business with the same traffic. Each lever below is tagged pull now / 🔒 gated / later.

BankLeversStatus now
1 · Volume
(more in)
Organic (YouTube/Ath, reels, SEO, ManyChat) + paid (Meta + Google) → free-assessment email captureorganic + paid ON now both point at the web quiz / free assessment, measured on cost-per-lead. iOS paid follows once the app funnel's instrumented.
2 · Capture
(→ emails)
Screen-1 hook, fewer/relevant questions, earlier email capture, exit-intent "save progress"pull now free leverage on existing traffic
3 · Convert
(→ trials/paid)
Sunk-cost anchor, annual-first, AHA-before-paywall, trial mechanics, D6 pre-bill nudgepull now (safe copy) / 🔒 (A/B) — multiplies all traffic, £0 ad spend
4 · Re-engage
(warm audiences you paid for) ★
Quiz-email list → email + small Meta retarget · abandoners · installers-no-trial · trial non-converters · churned → win-backpull now highest cheap leverage — measure incrementality with a holdout
5 · Monetise
(more per converter)
Annual-first mix, price tests, lifetime/annual to warm only, expansion/upsell🔒 gated raises LTV → raises allowable CAC → unlocks paid
6 · Retain
(keep longer) ★ the wound
Onboarding/habit, streaks/skill-unlocks, 14-day no-workout churn trigger, product quality (some churn = app bugs)→ own Retention Plan now split out (post-first-payment); still urgent — MRR's slipping.

Your instinct — "small retargeting on everyone who entered the quiz email" — is right (it's the anti-July: warm audience + matched offer). Order: email first (free, we own the list) → small Meta custom-audience retarget (matched offer, never lifetime) → measure with a holdout (retargeting often isn't incremental — you can pay to reach people who'd convert anyway). Exclude anyone who already converted.

§4The to-do list — every task, in hours

The whole backlog in sequence, grouped by phase (no calendar — just order + hours). It's overwhelmingly Nic's build, and he's already on the top of it. The detailed cards below unfold any task for the reasoning, the metric it moves, and the skeptic's caveat.

#TaskOwnerEst.
PHASE 0 · Make the numbers real + stop the bleed — the constraint · ~20–28h
R1Save the 110 cancel-queue — Jesse-voice pause/downgrade/rescue email to the identifiable Stripe cohort (~$1.6K MRR) — fastest MRR in the planClaude + Aga2–3h
R2Cancel-flow intervention — pause / downgrade / rescue offered before cancel confirmsNic · Claude copy4–6h
R3D6 pre-bill nudge (pulled forward from #16) — push + loss-framing email; RC knows the trial date, no gateNic + Claude4–8h
1Wire RC → Amplitude (T2) — the one constraint · 9 Jul: source-prefix convention live (rc_*=RC, af_*=AppsFlyer, unprefixed=web; Amplitude AI-merge unifies, raw kept for audit) — rc_* not yet visible in taxonomy at the 9 Jul API check; done = rc_* flowing + ±5% vs RCNic2–3h
2Fix page-load PIs on the lifetime/promo cart (T3) — before the next promo (evergreen checkout is clean)Nic1–2h
3Capture UTM / click-IDs → localStorage → Stripe → RCNic1–2h
4Confirm acquisition-vs-retention (already analysed = retention; refresh current numbers)Aga/Nic~1h
5Re-fire the existing AC win-back to current lapsed subs — ✅ DONE (live in AC)Aga
6Retarget the quiz-email list — email nurture + small warm Meta audience · gated on the bot purge (engaged-only seed)Claude emails · Nic Meta2–3h
7Paywall + checkout coherence, safe copy (annual-first, remove cold-lifetime)Claude drafts · Nic ships2–3h
8Nic walks the iOS onboarding flow — AHA before the paywall?Nic1–2h
9Two 10-min checks: RC Experiments tier · AdServices.framework linkedAga/Nic0.5h
10AC baseline audit + snapshot all baselines before Phase-0 changesAga2–3h
PHASE 1 · Instrument both funnels end-to-end · ~20–34h
11Canonical user_id (T4) + the schema lock — the keystoneNic + RN6–10h
12AppsFlyer conversion events (T5) + setCustomerUserId + SKAN schemaRN, Nic reviews3–6h
13Quiz milestone events + in-app paywall events (T6)Nic web · RN app8–13h
14Google brand-pause test (£0) + apply for Google Ads API tokenNic~1h
15ASO keyword + listing refreshAga2–4h
PHASE 2 · Fix the biggest leaks + activate A/B · ~18–33h
16D6 pre-bill nudge — → pulled into Phase 0 as R3 (8 Jul amendment)Nic + Claude
17Screen-1 proper A/B (goal-question-first)Claude builds · Nic reviews4–6h
17bEntry-offer test: 7-day free trial vs $9.99/30-day (/30trial) vs annual-first — cold traffic's first paid step, the top untested conversion leverAga + Claude · Nic ships3–5h
18RC Experiments — first app paywall test (injury-aware headline)Nic3–5h
19Exit-intent mid-quiz email capture + sunk-cost anchor at paywallNic/Aga3–6h
20Checkout Wave-B — Apple/Google Pay, trust-stack, per-day framingNic4–8h
PHASE 3 · Retention (pulled forward) + email migration + paid-restart prep · ~27–46h
21Trial→paid + lead→trial email nurtures · churn trigger → Retention PlanFleet4–8h
22Wire 4 RC events → migrate top-3 AC automations → CIO cutoverNic16–24h
23LTV / retention-curve baseline — net of Apple IAP · shared, Retention Plan owns itNic/Aga3–6h
24Meta CAPI Lead→Purchase + blended-MER dashboard + geo-holdout designNic/Aga4–8h
PHASE 4 · Re-open paid — gated on the holdout · ~6–10h setup + a 4-week run
25ASA brand defence — small, gated on a competitor actually biddingAga1–2h
26iOS Meta + ASA category + Google category — small, measuredAga + Nic3–6h
27Execute the geo-holdout — the incrementality verdictAga + Nic2h + run

Reality check: that's ~85–145 hours of build end-to-end, almost all Nic — which is exactly why the sprint is the top ~10 items, and the rest is "not now."

The detail — unfold any task for the "why"

PHASE 0 · Make the numbers real

📋 The full instrumentation spec — every event, exactly what Nic wires, in order — lives in the TMA Analytics Brief. This section is the priority order; the brief is the step-by-step how-to.

#1Wire RC → Amplitude (T2)THE constraintSNic
WhatRevenueCat webhooks → n8n → Amplitude for all five event types (trial_started, initial_purchase, renewal, expiration, cancellation). Dedup key = RC transaction_id. Why this is #1RevenueCat holds ~190 paying subs; Amplitude sees 3–5. Until this reconciles to within 5% of the RC dashboard, lead→trial→paid cannot be computed for either funnel, no A/B result is readable, and Meta keeps optimising for the cheapest email submitter instead of a buyer. Every other item is downstream of this one wire. Metric movedtrial_started / subscription_purchased counts in Amplitude within 5% of RC dashboard, 48h after deploy. NotePre-T4 events land on partly-anonymous profiles — correct with T4, don't block T2 on it.
#2Fix the page-load PIs on the lifetime / promo cart (T3)lifetime cart1–2hNic
Scope — this is the LIFETIME / promo cart, not the evergreen checkoutThe page-load-PI / inflated begin_checkout problem is the July lifetime cart specifically. Evidence: June's evergreen subscription checkout made 169 PaymentIntents at 86% success — clean, no shells; the ~5,000 page-load shells are all the july4 lifetime cart. So the evergreen sub checkout the quiz feeds is already clean on this — its arrive→card-entry is likely already measurable. WhatOn the lifetime/promo cart, create the PaymentIntent on the "Pay" tap (not page-load) and fire begin_checkout only on real intent. PriorityNot urgent this week — that cart closes ~12 Jul. Do it before the next promo cart so that campaign is measurable and doesn't produce another 98%-ghost dataset. (UTM capture on the evergreen flow is the separate #3.)
#3Capture UTM / click-IDs on quiz load → localStorage → Stripe PI → RCMED-HIGHSNic
WhyAttacks the 97%-unknown-source problem directly, and is the prerequisite for both paid-restart fixes (Meta CAPI needs fbclid; Google loopback needs gclid). Metric movedUnknown-source % in Stripe from 97% → below 50% within 4 weeks.
#4Acquisition or retention? — already analysed: it's retentionanswered→ separate plan
AnsweredThe leak is retention, not acquisition. A separate Retention Plan addresses this — it's not part of this growth doc, which stays top-of-funnel (stranger → first payment).
#5Re-fire our existing AC win-back to current lapsed subs✅ DONElive in AC
Status✅ Done — the win-back is live in ActiveCampaign. WatchReactivation rate (RC restart within 14 days) on the daily dashboard, so we can see what it pulls back.
#6Retarget the quiz-email list — ongoing, the proven offerHIGH · always-on2–3h setupNic
WhatEveryone who gave an email but didn't trial: email nurture first (free), then a small warm Meta custom-audience retarget with the matched offer that's already proven to work. Set it up to run on an ongoing basis — every new quiz-email lead flows in automatically, not a one-off blast. WhyThe anti-July — warm audience, right offer. Highest cheap leverage we have, and it compounds: every quiz lead we capture becomes a re-marketable asset forever. Hard gate (added 8 Jul)Bot purge first. The leads list is bot-polluted — seed the Meta custom audience and the nurture from the engaged-only, purged segment (the 00e send-plan rule), or we pay to advertise to scripts and poison the metrics. Metric movedlead→trial from the re-engaged cohort, weekly. Measure the paid slice against a small holdout so we know it's incremental, not just crediting people who'd have converted anyway.
#7Paywall coherence + safe copy (annual-first, remove cold-lifetime)MEDSNic
WhatAnnual-first with per-day anchor ($2.90/day), remove lifetime from the cold surface, one line stating the specific charge date. The checkout order-summary must mirror the paywall exactly. WhyEstablished pricing psychology, not a hypothesis — ships without an A/B layer. A paywall saying "annual, 7-day trial" pointing at a checkout saying "monthly/lifetime £297" actively bleeds conversion today. Skeptic caveatThe autopsy proved COLD→lifetime = 0; it did NOT prove WARM→lifetime = 0. Confirm the paywall can segment cold vs warm, or keep a warm-only lifetime path — don't kill a working warm revenue line. Metric moved% annual at trial start (target >50%).
#8iOS onboarding walkthrough — is AHA before or after the paywall?HIGH-potential1–2hNic
WhatNic goes through the current iOS install→onboarding flow himself (he hasn't yet) — count the screens install→AHA, confirm the AHA moment lands before the credit-card gate, and check whether the injury flag shows up at all. Document it. WhyResearch is clear: fitness paywalls win when placed after 2–4 goal-collecting steps, before the first workout — and our assessment-first model already fits. If AHA sits after the CC gate, every day is a compounding cancellation leak. And whoever's building the app should know this flow cold.
#9Two 10-minute unblockers: RC Experiments tier + AdServices.framework checkenablingSAga/Nic
RC tier (Aga)Confirm the RC plan includes Experiments before Nic builds to it — 15-min check that gates an entire A/B workstream. Skeptic: RC Paywalls/Experiments can be revenue-share priced — quantify the cost against £2.2K app MRR. AdServices (Nic)Check if AdServices.framework is linked (10 min). Present → ASA needs no release. Absent → 1–3 week release lag. Highest info-per-minute task in the plan.
#10AC baseline audit + snapshot all baselines before Phase-0 changesenablingSAga
WhatDocument open/click/best-available-trial-attribution for every AC automation; rank top three to replicate in CIO; drop the zero-impact ones. And snapshot RC/Stripe/AC baselines before deploying any Phase-0 change. WhySets the baseline CIO must beat, and preserves a clean "before" so Phase-0 changes are attributable (skeptic: concurrency pollution risk otherwise).
PHASE 1 · Instrument both funnels end-to-end
#11Canonical user_id (T4) + the Day-2 schema meetingHIGH · keystoneMRN+Nic
WhatOne canonical id across RC, Amplitude, AppsFlyer + web pass-through. Set in the agreed SDK call sequence before the first event fires. The non-optional gateA Day-2 written schema meeting (Nic chairs, RN attends): agree the id (authenticated app_user_id; pre-auth fallback = lowercased SHA-256 email hash so quiz leads join to app users), the exact call sequence (setCustomerUserId → setUserId → RC.logIn), and the web localStorage→checkout pass-through. If this meeting is skipped, T5/T6/T2 data can't be joined — the single largest quality risk in the project. Owner splitNic does the web side + reviews the RN native merge before it lands.
#12AppsFlyer conversion events (T5) + setCustomerUserId + SKAN schemaHIGH · unlocks iOSS-MRN, Nic reviews
WhatWire af_start_trial / af_purchase from the RC purchase callback (not the UI layer). Call setCustomerUserId on account creation. Set SKAN conversion values (cv=1 trial, cv=2 purchase), submit to Apple. WhyThis is what makes any future iOS paid channel measurable (LTV by channel). Without it, Meta/Google get no conversion signal in the SKAN window. Skeptic caveatNic must verify the callback hook location before merge — firing from the UI double-counts and pollutes with failed payments.
#13Quiz milestone events (T6 web) + in-app paywall events (T6 app)HIGHMNic web · RN app
What8 named quiz events (started, per-screen view, path assigned, assessment done, email captured, paywall viewed) + 3 app events (onboarding_completed, paywall_shown, cta_clicked). Instrument the new flow only, not old screens. Batch app events with the RC Paywalls migration to save store cycles. Why#1 gave the funnel bottom; this gives the top. Together they complete both funnels. paywall_shown is the denominator every RC Experiment needs. Metric movedBoth funnels visible end-to-end by source; the two actionable rates (email→trial, paywall→trial) become real.
#14Google brand-keyword pause test (£0) + Google Ads API token applicationfree revenue decisionSNic
WhatAfter T3, pause branded Google keywords 14 days. Flat organic branded traffic → cut the spend (recover ~£100–150/mo). Drop >20% → it's incremental, keep it. Separately, apply for the Google Ads API token now (3–5 day approval lag) for the later loopback fix. WhyHighest information-per-pound test available; the token has a multi-day lag so start it early.
#15ASO keyword + listing refreshMED · compoundingMAga
WhatFill the 100-char keyword field (calisthenics, bodyweight workout, handstand, injury recovery, pull-up, no-equipment…), subtitle featuring assessment/skill progression, screenshots leading with the assessment-first hook. Do this before any ASA category spend — ASA is only as good as the listing it feeds. WhyZero Nic dependency; 3–4 week ranking lag means earlier compounds. Current 4.7★/363 is adequate, not exceptional.
PHASE 2 · Fix the biggest leaks + activate A/B
#16D6 pre-bill nudge (push + email) — the trial→paid leverHIGHMNic+Fleet
WhatDay-6 push (RC native) personalised to sessions/skills + the specific billing date, plus a Day-6 loss-framing email ("Your training continues tomorrow") for web trial starters. WhyIn a card-upfront model, billing-day surprise is the #1 cancellation driver. Highest-ROI single trial→paid intervention, and RC knows the trial date natively (no instrumentation gate). Metric movedD8 trial-cancellation rate. Skeptic: read the ACTUAL current D8 rate from RC before quoting a target — don't assert "15%→8%".
#17Screen-1 proper A/B (goal-question-first) — biggest web leverHIGHS🔒 needs clean data
WhatVariant B = the goal question as the landing screen (large tappable cards, plain-language framing, slim progress bar). GrowthBook or a hand-coded 50/50 split. Primary: landing→quiz_started; guardrail: quiz_started→lead. WhyResearch: first-question uncertainty is the #1 quiz drop. A 10-point lift here compounds through the whole funnel — the single largest web MRR lever. Skeptic corrections① Gate on per-screen instrumentation being live and stable ≥1 week — a start-rate win that tanks lead→trial is a loss you can't see blind. ② Keep "8-minute assessment" (a specific short-time signal reduces abandonment); test the jargon strip inside this A/B, don't ship it blind. ③ Confirm trial velocity supports "200/arm" or run a bigger directional swing instead.
#18RC Experiments — first app paywall test (injury-aware headline)HIGHM🔒 volume-gated
WhatInjury-aware paywall headline vs generic, in RC Experiments (no app release after initial SDK config). Read at 200+ trial starts/arm, 95% confidence. WhyInjury is the top stated joining motivation (46% joined for it) — test whether it lifts trial-start on the paywall. Skeptic caveatThe "5.1×" is a joining-motivation / segment-size figure, NOT a measured paywall lift — treat it strictly as the hypothesis. And check trial velocity: at ~190 subs this test could take months — if so, run a bigger swing, not an underpowered A/B.
#19Exit-intent mid-quiz email capture + sunk-cost anchor at paywallMEDS-MNic/Aga
WhatElevate the "save my progress" soft-save and add exit-intent email capture across the highest-bleed quiz stretch (must ship with honeypot + validation given the bot issue). Plus a post-assessment sunk-cost line above the paywall price selector ("Based on your assessment, training starts at [Level X]"). WhyGrows the lead numerator by recovering email-less abandoners; the sunk-cost anchor reframes card entry as continuing, not starting. Confirm assessment data reaches the paywall screen first.
#20Checkout Wave-B — Apple/Google Pay, trust-stack, per-day framingMEDS🔒 after 2wk baseline
WhatThe measurable checkout CRO changes, shipped as a dated, discrete wave with a "before" snapshot — after ~2 weeks of clean arrive→card-entry baseline. WhyDirectionally safe but they're optimisations you must be able to measure. Shipping them into the Rank-2 window contaminates the baseline.
PHASE 3 · Retention engine (pulled forward) + email migration + paid-restart prep
#21Trial→paid + lead→trial email nurtures (pre-payment) · churn trigger → Retention PlanHIGHS-MFleet
WhatSingle coach-voice email at the 14-day no-workout mark for paying subs (with a holdout group configured before first send). Plus the trial→paid 7-email sequence (fires on trial_started, NOT signup date) and the lead→trial 3-email nurture. Why (I pulled this earlier than the fleet had it)MRR is declining and June's drop was retention — catching at-risk subs pre-cancel is far cheaper than win-back after. Gated only on the 4 RC events (#22) being wired. Metric moved30-day churn of intervention vs holdout; trial→paid by email-engaged cohort. Note for Nic — some churn is bug-drivenA chunk of the cancellations are tied to app bugs, not just disengagement — so part of retention is a fix problem, not an email one. The RN team may be needed to clear those bugs alongside these emails. Flagging here so it's on the radar; the funnel work stays the focus.
#22Wire 4 RC events for CIO → migrate top-3 automations → full cutoverHIGHL🔒 event + deliverability gate
WhatWire trial_started, subscription_cancelled, workout_completed, trial_converted through n8n (same fan-out as Amplitude). Then replicate the top-3 AC automations in CIO, run parallel ≤2 weeks with a hard cutover date, then full cutover. WhyCIO's whole value over AC is firing on product behaviour — without these events it's "AC with a higher invoice." The event wire is the gate, not a parallel task. Deliverability gateBefore cutover: email deliverability / IP-domain warm-up + bot-list purge. DMARC is already fixed ✓ (SPF/DKIM/DMARC now aligned). A cold cutover can still tank inbox placement, so warm the domain and purge the bot-polluted list first — this engine is what defends MRR.
#23LTV / retention-curve baseline — net of Apple IAPshared · Retention PlanS-MNic/Aga
What (skeptic-added)Establish the real retention curve and margin-adjusted LTV — net of Apple's 30%/15% IAP cut and realistic renewal decay (£157 gross ≈ ~£110 net year one). WhyBoth paid gates ($20/trial and MER≥2×) are untrustworthy without it — you can hit <$20/trial and still lose money. This is the darkest area and must be a deliverable, not an assumption.
#24Meta CAPI repoint Lead→Purchase + blended MER dashboard + geo-holdout designHIGH · paid prepS-MNic/Aga
WhatWire RC INITIAL_PURCHASE → Meta CAPI as Purchase (event_id dedup), demote Lead. Extend monday_brief.py with blended MER (net-new MRR ÷ total spend). Write the geo-holdout design (one comparable geo pair, 4 weeks, measure new RC subs/1k population). WhyThese have no value until paid restarts but must exist before it. The MER is the attribution-agnostic cross-check that can't be gamed by a platform's own reporting.
PHASE 4 · Scale paid (web quiz first) + prove incrementality
#25ASA brand defence — small, gated on a competitor actually biddingS · gatedAga
WhatOne exact-match brand campaign (~£8/day) — only after a 10-min App Store brand search confirms a competitor is bidding on your terms. Accept install-only measurement, labelled as defence value, not acquisition ROI. Skeptic gateIf no competitor ad shows, defer — it's harvesting installs you'd get organically. And fold this spend inside the spend-freeze sign-off; nothing is exempt from the freeze without your written OK.
#26iOS Meta + ASA category + Google category search — small, measuredM · gatedAga+Nic
WhatPurchase-optimised iOS Meta at ~£30/day (read D7 AppsFlyer, never D0 Meta), ASA category, Google category search — each opened only as its gates clear, one channel proven cold before the next. GatesT1+T4+T5 confirmed green ≥7 days · web Cost per Trial is a real number · matched offer (trial, not lifetime) · all CAC math net of Apple IAP. Proof-first, not web-firstWhichever funnel first shows a confirmed Cost per Trial under ~£16 earns the next budget increment — web or app.
#27Execute the geo-holdout — the incrementality verdictthe gate on scalingMAga+Nic
WhatRun paid in the test geo only, 4 weeks, identical organic in the holdout geo. If new MRR/1k population isn't statistically higher in the test geo, paid is not incremental — pause and diagnose before any budget increase. WhyThis is the answer to Nic's attribution debate — you don't win it with a model, you settle it with an experiment. Explicit stop-loss: if a small test install batch produces zero confirmed trials, halt.

§5The daily dashboard — you + Nic, every morning

Extend tools/finance/monday_brief.py (it already pulls RC v2, GA4, Meta) — add AppsFlyer + Stripe, emit the same HTML template, deliver 06:30 to you both. Every row carries a confidence badge; the dashboard graduating from mostly-red to mostly-green is itself the visible measure of instrumentation progress.

SectionRowsVisible today?
★ North StarTotal MRR (WoW) · new MRR this week · active paying subs · Lead→Paid by source (gate) · trials this week · trial→paid D7 (retention signal, not the gate) · Meta CAPI match qualityNow (CAPI row lights up after T1)
Funnel 1 · WebQuiz sessions · real card-intents · succeeded charges (£) · source breakdown · checkout→subscriber ratePartial intents/rate go red→green after T3; source after T4
Funnel 2 · AppInstalls · trial starts · trial→paid D7 · Amplitude event-health · D7 workout retentionPartial retention after T7+approval
Spend GovernanceCOLLAPSED / PAUSEDdaily spend · blended MER · Cost per Trial · Meta D7 ROAS — activates only on your written go

Skeptic fixes baked in: RC endpoint is v2 /projects/{project}/metrics/overview (already in monday_brief.py) · tag iOS installs + iOS ROAS as MODELLED (SKAN buckets, delayed) · net-of-refunds on £ rows (standing NET rule) · confirm the launchctl cron is actually loaded before promising 06:30 delivery · GA4 depends on the existing service-account credential.

§6Tooling — decided, so they stop resurfacing

QuestionDecisionWhy
App paywall A/BRevenueCat Experiments — Adapty closedRC already integrated for 190 subs; Adapty = parallel SDK + subscriber-state migration + 2–4 wks + a release, to run tests RC templates already cover
Web A/BGrowthBook (free) or hand-coded splitNo new paid tool; instrumentation is the prerequisite either way
Email platformAC → Customer.io, gated on the event wire + deliverability warm-upCIO's value is behavioural triggers; without events it's AC at a higher invoice
IntercomAlready in use — keep & leverageWe already pay for Intercom and run in-app messages through it. Keep it; wire the new event stream in so those messages fire on real product behaviour.
Mobile attributionKeep AppsFlyer, wire it correctlyIt's the MMP (device-level install attribution) — Amplitude can't replace it; the problem is wiring, not the tool
Event pipelinen8n fan-outAlready in the stack; one RC event → 4 destinations in an afternoon vs a sprint of custom code

§7What NOT to do

§8What I need from you to execute

  1. Confirm the RN-team logistics if we want the native build in parallel: can they build from our production branch quickly, and their hours + rate for T4–T7.
  2. Two 10-minute checks (Nic): is AdServices.framework linked? · is a competitor bidding on our App Store brand terms?
  3. Near-term MRR defence: since paid is ~10 weeks out, pick the one retention/win-back action that moves MRR in the next two weeks — so we're not just instrumenting while MRR slips.
  4. The focus call (from the founder coach): the top ~10 items are the sprint; the rest are "not now." Decide what stays frozen so this doesn't become another ten-front week.

Nic's already executing the top of this — we work down it one item at a time. "Done" = a number moving on the daily dashboard.