ANTIGRAVITY LABJP
Articles/App Development
App Development/2026-05-24Advanced

Running iOS Push Notification A/B Tests Weekly With Antigravity Agent — A Self-Improving Loop For Copy, Timing, And Segments

Drawing on 12 years of indie iOS app development across wallpaper and wellness apps with over 50 million cumulative downloads, this article walks through a weekly Push Notification A/B testing loop powered by Antigravity Agent. It covers the FCM bridge, BigQuery measurement, segment design, and a real D7 retention recovery story.

antigravity436ios36push-notificationfirebase11ab-testindie-dev19admob17

Premium Article

import { TerminalBox } from "@/components/article/TerminalBox";

I have been shipping iOS apps as an indie developer since 2014, mostly wallpaper, wellness, and manifestation apps that have accumulated over 50 million downloads. In that time no feature has moved the numbers as quickly — or punished mistakes as harshly — as Push Notifications. Push has the power to lift a Tuesday by twenty percent and, if you push one notification too many at the wrong hour, to wipe out two weeks of D7 retention gains. Running A/B tests by hand across five apps was eating about four hours of my week, so over the last few months I have been moving the copy generation and weekly review onto Antigravity Agent. This article documents the architecture, the failures I walked into, and the weekly routine that finally settled.

Push notification A/B testing is an old topic, but the moment you let an agent loop on it the practice changes meaningfully. The agent can suggest hypotheses no human would surface, but it has no sense of distribution discipline. If you do not build the guardrails in the right layer it will optimize for short-term open rate and quietly burn long-term retention. Everything below is shaped by that tension.

Why I Started Letting An Agent Handle The Weekly Push Loop

Running multiple wallpaper apps in parallel, push-related work kept growing. Each app needed a fresh copy hypothesis, a send time, and a careful post-send review of open rate and D7 retention. With one app this is fine. With five it is four hours every Monday.

I also do not consider wellness copy a personal strength. A small change in the ending particle of a sentence can swing open rate by something like 1.4x, and brainstorming a fresh angle every week wore me down. Once I gave Antigravity twelve weeks of A/B results and asked it to suggest the next five candidates, it began surfacing angles I would not have written. That is what convinced me to lean in.

There are two traps in delegating. First, the agent has no sense of how much volume is reasonable, so without a hard cap it tends to push more often. Second, if you let it optimize only against open rate, the punchy clickbait copy wins every time and your audience erodes quietly. I will spend the rest of the article on how I structure around both.

What Changed In My Hours

Before the loop, push-related work cost me about four hours a week. After, it is closer to thirty minutes: fifteen reviewing copy candidates, ten reading the weekly Slack digest, and five double-checking the scheduled queue. The recovered hours go into producing new wallpaper art and tuning my AdMob mediation. As an indie developer time is the single most expensive line item, so this delta matters.

The Three Layers — Copy Generation, Delivery, And Measurement

I keep three layers separate so the agent's responsibility is clear:

  1. Copy generation — Antigravity proposes five to ten weekly copy candidates by reading the last twelve weeks of A/B results and an app-specific worldview note.
  2. Delivery — A thin Cloudflare Workers bridge over the FCM HTTP v1 API, exposed to Antigravity as an MCP, takes only {segment, title, body, scheduled_at, ab_arm}.
  3. Measurement — Firebase Analytics streams into BigQuery and the agent runs read-only SQL during the weekly review.

Splitting these is deliberate. If the agent can dispatch sends directly, one bad call could blast every user simultaneously. Instead delivery always goes through propose → human approve → schedule → cron-execute.

Architecture Sketch

The iOS clients store FCM tokens in Firestore. The Workers worker has both a Cron Trigger and a webhook that Antigravity can invoke. Copy candidates are committed as YAML in a GitHub PR; I review and merge; the worker pulls the latest YAML during its scheduled run. Routing copy through GitHub means change history is preserved and a runaway agent can be physically halted by closing PRs.

Thank you for reading this far.

Continue Reading

What follows includes implementation code, benchmarks, and practical content we hope you'll find useful. This site runs without ads — server and development costs are supported entirely by members like you. If it's been helpful, we'd be truly grateful for your support.

WHAT YOU'LL LEARN
Concrete architecture connecting FCM HTTP v1 API with Antigravity Agent so the loop — copy generation, scheduling, measurement, next-week recommendations — runs without daily babysitting
Segment design grounded in real data from wallpaper and wellness apps, plus a recovery story where over-pushing dropped D7 retention by 4.8 points and how I clawed it back
BigQuery SQL templates and prompt patterns for weekly Antigravity reviews that compressed 4 hours of weekly work into 30 minutes
Secure payment via Stripe · Cancel anytime

Unlock This Article

Get full access to the rest of this article. Buy once, read anytime. This site is ad-free — your support goes directly toward keeping it running.

or
Unlock all articles with Membership →
Share

Thank You for Reading

Antigravity Lab is ad-free, supported entirely by members like you. We publish practical guides daily with implementation code, benchmarks, and production-ready patterns. If you've found it useful, we'd love to have you on board.

  • Copy-paste ready implementation code
  • New advanced guides published daily
  • $5/mo or $10 for lifetime access
View Membership →

Related Articles

App Dev2026-06-28
Adding Mediation Partners Quietly Starved My iOS Attribution — Reconciling SKAdNetwork IDs Across Four Apps
I added mediation partners but iOS revenue barely moved — the cause was missing SKAdNetwork IDs in Info.plist. Here is how I reconciled SKAdNetworkItems across four apps, using an Antigravity agent as the matcher while keeping the revenue decisions by hand.
App Dev2026-06-19
I Started the Ad SDK Before Asking for ATT — the Init-Order Bug That Quietly Lowered First-Session eCPM
When I rolled AdMob mediation out to four iOS apps, only the very first session showed weaker ad revenue. The cause was the order between the ATT prompt and MobileAds initialization. Here is why the order matters, plus how I had Antigravity audit the init sequence across all four apps.
App Dev2026-05-15
Firebase Apple SDK Migration from CocoaPods to SPM: 3 Pitfalls from 4 Real Apps
With CocoaPods distribution ending in October 2026, here are the real pitfalls encountered migrating Firebase Apple SDK to Swift Package Manager across 4 iOS apps — and how Antigravity helped diagnose them.
📚RECOMMENDED BOOKS
Build a Large Language Model (From Scratch)
Sebastian Raschka
LLM Dev
Prompt Engineering for LLMs
Berryman & Ziegler
Prompting
AI Engineering
Chip Huyen
AI Eng
* Contains affiliate links
See all →