Wallpaper apps have always been a reliable category for indie developers. Users interact with their home screen daily, which creates organic retention. Once someone finds a wallpaper they love, they tend to keep the app around.
I've been building and maintaining wallpaper apps since 2014. Most of that time involved manual coding and a lot of trial and error. Starting in late 2025, I began using Antigravity more seriously for app iteration — and the same apps, with the same user bases, started performing differently. This is the record of going from baseline revenue to roughly 3x in about six months.
Starting Point: Three Problems That Had Been Sitting Too Long
The target app was an iOS wallpaper app with a monthly active user base in the tens of thousands. Primary revenue came from AdMob banner ads.
Three things were broken:
1. AdMob eCPM was stagnant. A single banner at the bottom of the screen. No interstitial, no rewarded ads.
2. App Store rating was 3.8. Most low-rating reviews said the same thing: users couldn't figure out how to set a wallpaper. A UX problem with a code fix — but it had sat unaddressed.
3. ASO was essentially untouched. Screenshots and store copy hadn't been updated in over a year.
These weren't mysteries. I knew exactly what was wrong. What was missing was bandwidth to actually do them. Antigravity changed that equation.
Step 1: Rewired AdMob Implementation
First target: ad placement. I loaded the existing implementation into Antigravity via AGENTS.md and asked for an improvement proposal.
# AGENTS.md ad improvement spec
## Current state
- Banner ad: bottom of screen (GADBannerView)
- Revenue: [baseline] eCPM $0.85
## Goals
- Interstitial ad on transition from wallpaper preview → settings screen
- Rewarded ad: user can temporarily unlock one premium wallpaper
- Upgrade banner to adaptive banner format
## Constraints
- Frequency cap: minimum 3 minutes between interstitials
- Must comply with iOS 16 privacy manifest
The rewarded ad logic Antigravity proposed was the most useful part:
class WallpaperViewController: UIViewController {
private var rewardedAd: GADRewardedAd?
private let rewardedAdUnitID = "YOUR_REWARDED_AD_UNIT_ID"
func showPremiumWallpaperWithReward(wallpaper: Wallpaper) {
guard let rewardedAd = rewardedAd else {
showPremiumLockView(wallpaper: wallpaper)
return
}
rewardedAd.present(fromRootViewController: self) { [weak self] in
// Grant reward: unlock one premium wallpaper for this session
self?.unlockPremiumWallpaperTemporarily(wallpaper: wallpaper)
}
}
private func unlockPremiumWallpaperTemporarily(wallpaper: Wallpaper) {
var unlockedItems = UserDefaults.standard.array(forKey: "sessionUnlocked") as? [String] ?? []
unlockedItems.append(wallpaper.id)
UserDefaults.standard.set(unlockedItems, forKey: "sessionUnlocked")
showWallpaperDetail(wallpaper: wallpaper)
}
}The UX outcome: instead of a forced ad, the user makes an active choice to watch an ad in exchange for trial access to a premium wallpaper. Engagement goes up, complaints go down.
Results after 3 months:
- AdMob eCPM: $0.85 → $2.10 (+147%)
- Total ad revenue: ~2.1x
Rewarded ad unit rates are significantly higher than banner. Shifting a portion of impressions there moved total revenue meaningfully.
Step 2: Fixed the UX Problem Hurting Reviews
"Can't figure out how to set the wallpaper" shouldn't appear in reviews — but it did, repeatedly. I asked Antigravity to implement a first-launch walkthrough covering the wallpaper-setting flow on iOS.
The proposed sequence:
- Long-press on a wallpaper → show coachmark for "Set as Wallpaper"
- Before the Photos save dialog appears → show a brief explanation
- After saving → show step-by-step instructions for setting as home screen
Implementation time with Antigravity: approximately 2 hours. Without it, I'd estimate a full day of work.
Results after 2 months:
- App Store rating: 3.8 → 4.4
- "Can't set wallpaper" reviews: effectively zero
Higher rating directly improved App Store algorithm placement, which fed into organic download growth.
Step 3: ASO — Store Copy and Screenshots
App Store text and screenshots were both overdue. For store copy, I asked Antigravity to generate optimized Japanese and English descriptions incorporating target keywords naturally. For screenshots, I generated multiple headline variants and tested them through App Store Connect's product page optimization feature.
Results after 3 months:
- Organic downloads: 1.8x
- Ranking keywords: 3 → 12
The app started appearing for category searches (wallpaper, home screen customization, aesthetic wallpapers) it hadn't previously ranked for.
Step 4: IAP Redesign
The original in-app purchase was a single "premium pack" at ¥120 / $0.99. After discussing the design with Antigravity — asking it to compare subscription vs. one-time purchase performance for wallpaper apps specifically — I restructured it:
| Plan | Price | Content |
|---|---|---|
| Free | ¥0 | Free wallpapers + ads |
| Individual pack | ¥250 | Theme pack (15–20 wallpapers), lifetime |
| Premium monthly | ¥480/mo | All wallpapers + no ads + weekly additions |
| Premium annual | ¥2,980/yr | Same (¥248/mo equivalent) |
Implementation used StoreKit 2. Antigravity generated both the client-side purchase flow and server-side receipt validation code.
Results after 2 months:
- Subscription revenue: 68% of total IAP
- Average individual pack purchases: 1.8 packs per purchasing user
Six-Month Summary
| Initiative | Contribution to revenue growth |
|---|---|
| AdMob optimization | +110% |
| Rating improvement → ASO halo effect | +40% (indirect) |
| ASO (download increase) | +45% |
| IAP redesign | +80% |
These don't add up linearly — the effects compound and interact. The ~3x total is a lived result across all initiatives running together.
What Antigravity Actually Changed
The biggest shift wasn't speed, though speed improved. It was that the backlog of "important but effort-intensive" work finally got done.
AdMob restructuring, a first-launch tutorial, ASO optimization — I'd known these needed attention for months. The reason they sat untouched was that each one represented a non-trivial implementation block during time I didn't have.
With Antigravity, the workflow became: define the goal in AGENTS.md, review and adjust what it generates, ship. That's a meaningful difference in how much you can execute as a solo developer. The wallpaper app was already viable. These changes made it genuinely good — and profitable enough to justify the time investment in maintaining it.