Inspiration

Two competitors each solved half the problem. Prayer Lock validated the mechanic — gating distracting apps behind an intentional check-in works. I Am+ validated the audience — women 18-35 in wellness genuinely want daily affirmations. Reading the 1-star reviews of both surfaced an obvious gap: Prayer Lock users wanted something less overtly religious; I Am+ users wanted something that actually stopped the scroll. Affie sits at that intersection.

What it does

Affie gates access to Instagram, TikTok, and other distracting apps behind an AI-generated daily affirmation. When you open a locked app, you're met with a personalized, purely positive affirmation you have to read before getting through. Built on Apple's Screen Time / Family Controls API, syncs via iCloud, no ads, no fear-based nudges.

How we built it

A solo iOS build, top to bottom — SwiftUI, Screen Time / Family Controls for the gating mechanic, and an LLM for affirmation generation. RevenueCat handles the subscription layer across weekly, annual, and lifetime tiers. PostHog tracks a 21-step onboarding and paywall funnel, with a Keychain-stored stable user ID passed to both RevenueCat and PostHog so events can be joined per user. Attribution runs through GA4 and App Store Connect Campaigns with lowercase UTMs across every social channel. A snapshot dashboard pulls RevenueCat data live via MCP.

Challenges we ran into

  • Identity fragmentation across RevenueCat and PostHog. Without explicit ID alignment, RevenueCat mints anonymous $RCAnonymousIDs and PostHog mints its own UUIDs — per-user joins were impossible until I unified both via a Keychain-stored stable ID with logIn() aliasing for migration.
  • Screen Time API is finicky and half-documented. Getting the gate to fire reliably across app-switching states took several rewrites.
  • Weak beta signal from a friends cohort. Loyalty bias means friends over-engage, so beta had to be treated as mechanic/quality signal only — not retention proof.
  • Paywall-to-StoreKit wiring gap. ~47 App Store customers but zero trials or purchases surfacing in RevenueCat, isolated to a config issue between the paywall and the StoreKit product IDs.

Accomplishments that we're proud of

  • Shipped a solo-built iOS app end to end, including a non-trivial Screen Time integration and a full RevenueCat + PostHog + GA4 + ASC analytics stack.
  • 40% paywall conversion in beta — 10 of ~14 external testers reached the paywall; 4 completed onboarding; 2 made real purchases pre-launch.
  • Unified per-user analytics from day one going forward — every new user is joinable across behavioural and revenue data.

What we learned

  • Position by review analysis, not marketing. The strongest angles came from competitors' 1-star reviews. Ship the identity model first. Every day of un-unified RevenueCat and PostHog IDs is a day of un-joinable data.
  • Metadata integrity matters. Listing features not in the current binary is a fast path to Apple rejection.
  • User-benefit copy beats bug-description copy — especially in "What's New" release notes.

What's next for Affie - Daily Affirmations

  • Close the RevenueCat wiring gap and confirm the purchase path end to end.
  • Build a v2 joined analytics dashboard — per-user behavioural-to-revenue funnel plus acquisition source — once live paying customers flow through the fixed pipeline.
  • Grow top-of-funnel through TikTok, the primary acquisition channel.
  • Expand the affirmation library and add a streaks/progress layer to lift week-1 retention.

Built With

  • claude
  • claude-code
  • github
  • google-stitch
  • revenuecat
Share this project:

Updates

Submission history