ARTEFACT 15 — PERFORMANCE BLUEPRINT · MIRRA · 2026-05-16

The performance
marketer's playbook.

KPI targets · 30-test AB backlog · audience-stack recommendation · geo-targeting per persona · attribution architecture. Built to take ROAS from current 1.99x baseline to 4.0x+ over 12 weeks.

BASELINE ROAS 1.99x · CPA RM57 · WhatsApp conv 3.2%  ·  TARGET ROAS 4.0x · CPA <RM35 · WhatsApp conv 8%+  ·  HORIZON 12 weeks · 2026-W21 to W32

15.01 KPI targets — 12-week lock

CPM
RM18
RM10-15
-30 to -45%
CTR
0.9%
1.5%+
+67%
CPC
RM2.05
<RM2.00
-3 to -25%
CPA
RM57
<RM50
-12 to -38%
ROAS
1.99x
3.0-4.0x
+50 to +100%

"The KPI target is not vanity-ROAS. It's the math that makes Mirra profitable on Meta acquisition with no upsells required."

15.02 Audience stack — who to target, in what order

Stack 01 — Lookalike (Chatwoot purchasers)

PRIORITY 1 · BROADEST PROVEN AUDIENCE · WARM TIER

Build LAL 1-3% from 200+ Chatwoot-confirmed customers (last 12 months). Lookalike of buyers consistently beats interest-stack by 2-3x ROAS in F&B vertical. Allocate 40% of budget here.

Stack 02 — Interest broad: KL/Sel women 25-45

PRIORITY 2 · BROAD COLD TIER · DEMOGRAPHIC LOCK

Location: KL + 30km from KL center. Age: 25-45. Gender: Female. Interests: healthy eating, meal delivery, weight management, plant-based, Innisfree, Sephora MY, Watsons MY, AIA Vitality. Meta's algorithm finds Mirra-ICP within this. Allocate 30%.

Stack 03 — Retargeting (engagers + cart-abandoners)

PRIORITY 3 · WARMEST · HIGHEST-ROAS TIER

90-day window: anyone who visited mirra.com, watched 50%+ of any reel, sent WhatsApp (any), added to cart. Show: testimonial UGC + Starter Pack offer. ROAS typically 4-6x on this tier — concentrated spend here for Q3 launch. Allocate 20%.

Stack 04 — Custom: postpartum + maternity

PRIORITY 4 · NEW ICP UNLOCK · 2026-Q3 EXPERIMENT

Custom Audience: women 30-40, KL+Sel, interests = "new baby", "baby essentials", "Mothercare MY", "Mothers' Day", "maternity wear". Pair with Angle 7 (postpartum) creative bank. Untested ICP — start with RM50/day for 2 weeks to validate. Allocate 10% (test).

15.03 30-test AB backlog — 12-week sprint

Each test runs minimum 7 days, 1K impressions, 100 clicks, 50 conversions before declaring a winner. Statistical-significance gate per stat-sig-check.sh. Anything below threshold = inconclusive.

AB01 · Hero offer: "Starter Pack RM199" vs "First Meal RM19 Free"

PRIORITY 1FUNNEL: TOFUDURATION: 14d

Hypothesis: a free first meal offer (RM19 absorbed) gets lower CPA than RM199 Starter Pack — even though Starter Pack is the LTV-better offer. The trial mechanic removes the commitment friction Mirofish R1 surfaced. Win condition: "Free First Meal" beats Starter by 25% CPA AND Day-14 retention ≥ 65%.

AB02 · Calorie-claim test: "Under 500 cal" vs "450 cal exactly" vs "Macro grid only"

PRIORITY 1FUNNEL: TOFUDURATION: 7d

Mirofish R3 confirmed: skeptics call BS on "under 500 cal" claim. Test specific number ("450 cal exactly") vs macro grid ("28g protein · 35g carbs · 9g fat — 450 cal"). Win: macro-grid drives 30%+ higher CTR for fitness ICP.

AB03 · Maya tone: "Maya nags you" vs "Maya checks in" vs "Maya optional"

PRIORITY 1FUNNEL: MOFUDURATION: 14d

Mirofish N1: Maya is polarizing. Test 3 tone variants in the landing page Maya-intro: nag-style ("Maya will text you"), check-in style ("Maya is here if you need her"), opt-in ("Want Maya to text? Toggle on"). Win: opt-in variant has 40%+ higher Week-2 retention.

AB04 · "Auto-roll" framing: "Auto-renews to 20-pack" vs "We'll ask before renewing"

PRIORITY 1FUNNEL: BOFUDURATION: 14d

Mirofish N2: auto-roll is fear-trigger. Test removing auto-renew. Hypothesis: explicit opt-in renewal at week-2 actually increases LTV (less churn, more trust). Win: Week-4 retention up 20%+ even at cost of immediate auto-conversion drop.

AB05 · Swap-Meal CTA: "Swap any meal" front-of-funnel vs same-channel

PRIORITY 1FUNNEL: MOFUDURATION: 7d

Mirofish N3: swap-meals is high-leverage retention lever. Test promoting it AT acquisition (ad-level) vs post-purchase (Maya in-app). Win: upfront promotion lifts CTR + Week-1 trial-completion 30%+.

AB06 · 3rd-party voice vs brand voice (TOFU hooks)

PRIORITY 2FUNNEL: TOFUDURATION: 7d

"My colleague kept bringing this bento" (3rd-party) vs "We made your favourite food healthy" (brand). Pattern 7 in 07-ad-library-bank. Win: 3rd-party variant lifts CTR 30%+.

AB07 · Local-flavor hook: "rendang" vs "Korean wellness food"

PRIORITY 2FUNNEL: TOFUDURATION: 7d

Mirofish C3 confirmed local-flavor wins. Test directly: "sambal rendang under 500 cal" vs "Korean wellness bowl 500 cal". Win: local-name beats Korean by 40%+ CTR.

AB08 · Hashtag-as-tagline: brandable hashtag in ads

PRIORITY 2FUNNEL: TOFUDURATION: 14d

Pattern 1 in artefact 07: "#EatYourGoals" taken (Yolo), "#MakeItCount" taken (Fitness First). Test 3 Mirra-original tags: #MirraMyMonday vs #LunchThatLooksAtYou vs #RealLocalReal500. Win: top hashtag drives 25%+ share-rate.

AB09 · Testimonial casting: Chinese-MY only vs mixed-ethnicity rotation

PRIORITY 2FUNNEL: MOFUDURATION: 21d

Pattern 6 in 07: Yolo's Nanthekumar T testimonial signals inclusivity. Test 1-week campaigns with all-Chinese-MY testimonials vs 50% non-Chinese-MY rotation. Win: mixed-cast variant expands reach 30%+ in malay-MY + indian-MY segments.

AB10 · Numerical specificity: "RM19" vs "From RM19" vs "Less than RM20"

PRIORITY 2FUNNEL: TOFUDURATION: 7d

Pattern 1 in 07: numerical specificity wins. Test 3 price-format variants. Win: "RM19" beats "Less than RM20" by 35%+ CTR (concrete number > range).

AB11 · Reels length: 15s vs 20s vs 30s

PRIORITY 3FUNNEL: TOFUDURATION: 14d

2026 IG reel sweet-spot is debated. Test 15s/20s/30s same-content. Win: 20s has highest watch-completion rate AND CPA.

AB12 · UGC voice vs polished brand voice

PRIORITY 3FUNNEL: TOFUDURATION: 7d

"ok can we talk about" (UGC) vs "Discover Mirra's nutritionist-designed bento" (brand). Win: UGC voice lifts CTR 50%+ on cold-tier audience.

AB13 · Pause-Anytime CTA for postpartum audience

PRIORITY 1FUNNEL: MOFUDURATION: 14d

Mirofish R2: postpartum says "I want it but can't commit". Test "Pause anytime — for life-weeks" as headline vs standard "Start Plan". Win: postpartum custom-audience CPA -30%.

AB14 · "Real Numbers" vs "Real Local" anchor

PRIORITY 2FUNNEL: TOFUDURATION: 7d

Test two anchor framings: "Real food. Real numbers." (transparent macros) vs "Real local food. Real love." (heritage). Win: "Real numbers" wins on fitness, "Real local" wins on tired-mamak.

AB15 · Carousel slide-count: 3 vs 5 vs 7

PRIORITY 3FUNNEL: TOFUDURATION: 7d

Optimal carousel length test. Win: 5-slide carousel beats 3 and 7 (storytelling sweet spot for F&B).

AB16 · Static vs reel for same hook

PRIORITY 3FUNNEL: TOFUDURATION: 7d

Take "Pants getting looser" hook. Test as static (RM19 + price + claim) vs reel (1-shot UGC). Win: reel beats static by 60%+ CTR.

AB17 · Geo-pulse: Bangsar/MK premium vs Cheras/Subang mass

PRIORITY 2FUNNEL: TOFUDURATION: 21d

Test ROAS by KL micro-geo. Hypothesis: Bangsar/Mont Kiara has 2x higher ROAS but 3x higher CPM. Cheras/Subang is mid-CPM, high-volume. Win: mass geos have higher absolute revenue, premium geos have higher LTV.

AB18 · Mid-funnel meeting-page CTA: Klaviyo email vs WhatsApp DM

PRIORITY 1FUNNEL: MOFUDURATION: 14d

Mirra current WhatsApp conv 3.2%. Test Klaviyo email opt-in as alternative — slower nurture but higher LTV. Win: email-nurture lifts Week-4 retention 40%+.

AB19 · Partner-stack ad copy: AIA Vitality co-promo

PRIORITY 2FUNNEL: TOFUDURATION: 21d

Pattern 8 in 07: partner-stack. Test ad "10% off Mirra for AIA Vitality members" — requires AIA partnership in W21. Win: partner-stack ads have 2x ROAS of solo.

AB20-30 · 10 more lower-priority tests

PRIORITY 3-4FUNNEL: VARIOUSDURATION: 7-14d

AB20: Sunday vs Tuesday launch · AB21: Discount % framing (25% off vs RM50 off) · AB22: VLM-AI vs Real Photography heroes · AB23: White-marble bg vs cream-linen bg · AB24: Hand-in-frame vs no-hand · AB25: Founder Jenn signature on ad vs not · AB26: "From RM19" vs "Just RM19" · AB27: "Working women" vs "Professional women" · AB28: Bigger price (60pt) vs medium price (24pt) · AB29: Crimson CTA button vs Pink CTA · AB30: "Subscribe" vs "Try Starter" vs "Reserve My Spot"

15.04 Geo-targeting per persona — KL+Sel micro-map

tired-mamak (urban office workers)

BangsarMont KiaraKLCCBukit BintangDamansara HeightsTTDIBangsar South

Daytime office radius. Office-canteen Grab fatigue. Match against PMQ/grade7+ tenant lists.

fitness (gym + macro-track)

Mont KiaraDamansaraSetia AlamSubang Jaya (USJ)Cheras (Eko Cheras)Bangsar (Fitness First)

Around gym hotspots: Fitness First, Celebrity Fitness, 1Fit, Anytime Fitness. Layer with interest "macro counting" + Garmin/Apple Watch.

postpartum (new moms)

Shah AlamKlangCherasSetapakSubangCyberjaya (newer suburbs)

Family-suburb radius. Layer with interest "babies + maternity 0-3" and Custom Audience from Mothercare MY visitors.

new-grad (24-27 first salary)

CyberjayaPetaling Jaya (Section 14)Bukit DamansaraShah Alam (i-City)Sungai Buloh (Kota Damansara)

Tech-hub + new-grad employment zones. Lower-LTV but highest viral-share rate.

senior-pro (38-45 director-level)

Mont KiaraBangsarDamansara HeightsCountry HeightsSri HartamasAmpang Hilir

Premium residential. Highest LTV. Match against PMQ-tenant + private-school-parent lists.

15.05 Attribution architecture — CAPI + ad_id chain

Ad creative genad-id-mint.sh --brand mirra --channel meta --title 
   ↓ returns ad_id, tracked_url
Meta upload (ad_name = ad_id)User clicks → tracked_url with UTM (?utm_source=mirra&utm_id=)WhatsApp + Shopify capture utm_id at first contactOrder placed → Shopify order has utm_id, Meta CAPI fires with same ad_idtrace dashboard: 100.78.69.119:3099/api/trace/ROAS computed per ad, per audience, per geo, per persona-tagG9-measure feedback → marketing brief next cycle (R102 kill-rules)

Current break: CAPI match was 2.5% (2/80 orders) — fixed by meta-link.sh + apex_deploy patch (see CLAUDE.md §CAPI ad_id chain).

15.06 Budget allocation — 12-week phased

WeekBudgetAllocationFocus
W21 (launch)RM2,500/d50% LAL · 30% broad · 20% retarget5 priority ABs · Starter Pack launch · Maya tone test
W22RM2,800/d45% LAL · 30% broad · 15% retarget · 10% postpartumPostpartum custom audience launches · Swap-Meal feature
W23-W24RM3,200/d40% LAL · 30% broad · 20% retarget · 10% postpartumScale winners from W21-W22 · Add geo-pulse test
W25-W28RM3,500/d40% LAL · 25% broad · 25% retarget · 10% partnerAIA Vitality co-promo (if partnership confirmed)
W29-W32RM4,000/d35% LAL · 25% broad · 30% retarget · 10% partnerRetarget-heavy phase · LTV harvest · Q4 strategy build

12-week total budget: ~RM280,000. At target ROAS 3.5x, that returns RM980,000 attributed revenue — RM700,000 net new vs baseline (current RM280K at 1.99x = RM557K).