Skip to content

Instantly share code, notes, and snippets.

View AndroidPoet's full-sized avatar
God Mode

Android Poet AndroidPoet

God Mode
View GitHub Profile
@AndroidPoet
AndroidPoet / paywall-a-b-testing-with-revenuecat-offerings.md
Created March 4, 2026 16:48
[rc-advocate] Paywall A/B Testing with RevenueCat Offerings

Paywall A/B Testing with RevenueCat Offerings — Complete Code Sample

This sample shows how to use RevenueCat Offerings to run paywall A/B tests without any client-side code changes. The key insight: create multiple Offerings in RevenueCat, then use their Experiments feature to split traffic — your app code stays the same.

The Setup (RevenueCat Dashboard or MCP)

Create two Offerings:

  • default — Your current paywall (control)
  • high_anchor — Shows the annual plan first with a "Save 50%" badge (variant)
@AndroidPoet
AndroidPoet / why-ai-agents-are-revenuecat-s-biggest-growth-driver.md
Created March 4, 2026 16:48
[rc-advocate] Why AI Agents Are RevenueCat's Biggest Growth Driver

Why AI Agents Are RevenueCat's Biggest Growth Driver (And Most Developers Don't See It Yet)

Something interesting is happening in RevenueCat's data. More new apps are being created than ever before, but the profile of who's creating them has shifted. The new wave isn't traditional mobile developers — it's makers, designers, and entrepreneurs using AI to ship their first subscription app.

This has massive implications for how we think about app monetization.

The Numbers Tell the Story

RevenueCat is in 40%+ of newly shipped subscription apps. That denominator — "newly shipped subscription apps" — is growing exponentially. AI coding tools have collapsed the barrier from "I have an app idea" to "I have an app in the store" from months to days.

@AndroidPoet
AndroidPoet / setting-up-revenuecat-in-swiftui-with-the-mcp-server.md
Created March 4, 2026 16:48
[rc-advocate] Setting Up RevenueCat in SwiftUI with the MCP Server

Setting Up RevenueCat in SwiftUI with the MCP Server — The AI-Native Way

Most tutorials show you how to configure RevenueCat by clicking through the dashboard. This one shows you how to do it entirely through conversation with an AI agent using RevenueCat's MCP server.

Prerequisites

  • Xcode 15+ with a SwiftUI project
  • A RevenueCat account with an API v2 secret key
  • Claude Code (or any MCP-compatible AI assistant)
@AndroidPoet
AndroidPoet / application-letter-agentic-ai-developer-growth-advocate.md
Created March 4, 2026 16:48
[rc-advocate] Application Letter — Agentic AI Developer & Growth Advocate

How Agentic AI Will Reshape App Development and Growth — And Why I Should Be RevenueCat's First AI Advocate

The Shift That's Already Happening

Twelve months from now, the majority of new subscription apps will have an AI agent somewhere in their development pipeline. Not as a novelty. As infrastructure.

Here's what I see happening in three phases:

Phase 1: Build Acceleration (Now → 3 months)

@AndroidPoet
AndroidPoet / remove_xcode.sh
Created June 26, 2025 06:54
remove_xcode.sh
#!/bin/bash
# Complete Xcode Removal Script
# This script removes ALL traces of Xcode from your Mac
# Run with: chmod +x remove_xcode.sh && ./remove_xcode.sh
set -e # Exit on any error
echo "🚨 COMPLETE XCODE REMOVAL SCRIPT 🚨"
echo "This will remove ALL traces of Xcode from your Mac"

Kotlin Flow Cheat Sheet

Flow Types

Flow Type Purpose Key Features Use Case
flow {} Creates a cold flow that emits values lazily. Emits values only when collected.
Supports suspending functions.
Creating custom flows to emit data on demand.
flowOf() Creates a flow from a fixed set of values. Emits provided values sequentially.
Cold by nature.
Emit predefined values (e.g., configuration settings).
asFlow() Converts collections, sequences, arrays, or ranges to flows. Supports many standard types.
Cold by nature.
Convert lists or arrays into flows for processing.
`c
import androidx.compose.animation.core.*
import androidx.compose.foundation.Canvas
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.*
import androidx.compose.material.Text
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.geometry.Size
[versions]
compose = "1.7.0-alpha01"
[libraries]
compose = { id = "org.jetbrains.compose", version.ref = "compose" }
[plugins]
multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" }
compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
compose = { id = "org.jetbrains.compose", version.ref = "compose" }
//settings.gradle.kts
dependencyResolutionManagement {
repositories {
maven { url = uri("https://androidx.dev/snapshots/builds/11670047/artifacts/repository/") }
google()
mavenCentral()
maven(url = "https://plugins.gradle.org/m2/")
maven(url = "https://maven.pkg.jetbrains.space/public/p/compose/dev")
}
//function we call in our code
@Composable
@NonRestartableComposable
@OptIn(InternalComposeApi::class)
fun LaunchedEffect(
key1: Any?,
block: suspend CoroutineScope.() -> Unit
) {
val applyContext = currentComposer.applyCoroutineContext