Blog ยท iOS Development
๐Ÿ“ฑ iOS Development

Shipping the RDR2 Companion From Scratch

I graduated UCF with a Computer Engineering degree in May 2000. Then life happened. Twenty-five years later, I'm sitting in front of Xcode again โ€” except now there's an AI model on the other end of an API key, and the entire developer experience has been rewritten under me.

This is the story of how I rebuilt the muscle, picked a market, and shipped the RDR2 Companion to the App Store. It's also the playbook for anyone else returning to development in the AI era โ€” or starting from zero.

The opening

Red Dead Redemption 2 has sold over 60 million copies worldwide and remains one of the most beloved open-world games ever made. Players continue active 100% completion runs years after launch โ€” a community of speedrunners, completionists, lore hunters, and photographers who would all benefit from a deeper, AI-powered reference at their fingertips.

That's a serious, durable audience.

I'd been using Claude for months as a thinking partner โ€” long after the "is AI a fad?" debate had been settled in my mind. The question was no longer whether AI would change software, but whether I could build something real with it before everyone else figured it out.

The thesis
A solo developer with AI tools in 2026 can ship things that would have required a team of five in 2020. The bottleneck isn't writing code anymore. The bottleneck is taste, market judgment, and finishing.

Why RDR2 specifically

RDR2 was a forcing function for three reasons:

First architectural decisions

Three decisions made everything else easier:

1. Native SwiftUI, not cross-platform

I considered Flutter and React Native. I rejected both. The app needs to feel iOS โ€” gesture-perfect, system-integrated, fast. Cross-platform frameworks promise reuse but tax every interaction with a thin layer of "almost native." For a consumer iOS app fighting for retention, that tax is fatal.

2. Backend proxy from day one

Anthropic's API key cannot live in your app binary. iOS app binaries are extractable. Anyone with five minutes and a tool called class-dump can find your key. So the Claude API call goes through a Railway-hosted proxy. The app talks to my-backend.railway.app/chat; the backend talks to api.anthropic.com. I wrote the full architecture in a separate post on this exact pattern.

3. Aether AI as a platform, not a feature

I wrote the AI layer as a generic GameType enum from the very first commit. That way, when GTA V comes next, when GTA VI launches, when Forza Horizon 6 ships โ€” the engine is reusable. RDR2 was the first installation of a platform, not a one-off product. This single decision has saved me probably six months of future work.

The Railway backend

Railway is what AWS Lambda should have been: I push code from my Mac, Railway builds it, Railway deploys it, Railway gives me a URL. No IAM, no CloudFormation, no console-clicking-marathon. The backend is ~250 lines of Node.js:

// 1. Receive request from iOS app
// 2. Validate it (rate limit by device ID)
// 3. Forward to Anthropic with the system prompt
// 4. Stream the response back

That's it. Cost so far: about $7/month for the Railway hobby plan, which has been more than enough headroom for our current traffic. I covered the Railway vs AWS tradeoffs in detail elsewhere.

Cost reality
Most consulting clients ask "what's your AWS bill?" โ€” and they're stunned when I tell them I run a live App Store app on $7/month of compute plus pay-per-call Claude inference. The cloud is cheaper than people think, if you don't reflexively reach for AWS.

Native SwiftUI, not React Native

SwiftUI in 2026 is not the SwiftUI of 2020. It's mature. NavigationStack, @Observable, async/await everywhere, structured concurrency. The mental model is closer to React than UIKit โ€” but with native performance and zero bridge overhead.

The RDR2 app uses:

No external dependencies except Anthropic SDK. The whole project compiles in under 8 seconds on an M3 MacBook Air.

Wiring up Claude

The system prompt is where the product lives. RDR2 Companion's Aether persona is built from:

  1. A detailed identity ("You are Aether โ€” an expert on Red Dead Redemption 2โ€ฆ")
  2. Game knowledge constraints ("You know everything about the base game and Online; do not invent content that doesn't exist")
  3. Voice/tone instructions ("Be helpful, period-appropriate, occasionally referential to the Old West")
  4. The user's persistent memory summary, injected each session
  5. Multi-turn history for the current chat

I iterated on this prompt for weeks. Tiny phrasing changes produced massive behavior changes. The single biggest win: telling Claude to ask clarifying questions when the user's request is ambiguous instead of guessing. That doubled perceived intelligence overnight.

Persistent AI memory

One of the things that makes Aether feel alive is that it remembers. Most chatbots don't. Each session, before sending the user's message, the app reads a stored "memory summary" from UserDefaults and prepends it to the system prompt. After each session, the app asks Claude to update that summary with anything important learned.

The memory lives only on the user's device. Nothing leaves their phone except the messages themselves. This was both a privacy choice and a cost choice โ€” no database, no per-user storage costs.

Why this matters for consulting
Most "AI chatbot" implementations are stateless โ€” Claude has no idea who you are across sessions. Real product feel comes from memory. We build this pattern for clients constantly.

StoreKit 2 and the pricing pivot

RDR2 Companion launched at $0.99 โ€” one-time, no subscription. The reasoning at launch:

By v1.2.0, we pivoted to a freemium model: free download, 4 free AI questions to try, then $2.99 one-time to unlock unlimited AI chat. The reasoning for the pivot:

The GTA V Companion launches with the same freemium model from day one โ€” same Aether engine, same $2.99 unlock, free trial questions built in.

App Store submission

Apple reviewed the RDR2 Companion on the first try and approved it. That sentence sounds boring; it is not. The first-try approval rate for AI apps is wildly inconsistent. I covered the full review playbook in a dedicated submission guide, but the highlights:

Lessons I'd tell past-me

Start with the smallest market you can defend

RDR2 owners are not "gamers" โ€” they're a specific subgroup with specific needs. Trying to serve "anyone who games" would have produced a bland app. Specificity is a moat.

The hard part is finishing

AI tools make the first 80% of an app shockingly fast. The last 20% โ€” TestFlight, IAP edge cases, App Store metadata, support pages, marketing copy โ€” is where 90% of indie attempts die. Budget for the finish, not the start.

Voice is underrated

Adding SFSpeechRecognizer was an afternoon. The retention impact was huge. People who would never type a long question will happily speak one while their hands are on a controller.

Document everything as you go

This post exists because I kept a journal during the build. Every error, every fix, every architectural decision. Future-you will thank past-you. Or โ€” and this is the AI-era version โ€” future-Claude can read your CLAUDE.md and recover context for you instantly.

What's next

The Aether AI platform is the long game. Same engine, new game world:

The consulting practice grows alongside it. Every app I ship is proof of work that I know what I'm talking about when a client asks how to integrate Claude into their iOS product. Book a call if that's you.

Fall 2026 is the goal: a profitable, flourishing app studio + consultancy. We're getting there one build at a time.

Sources & References
  1. Anthropic โ€” Claude API documentation
  2. Apple โ€” StoreKit 2 reference
  3. Apple โ€” App Store Review Guidelines
  4. Railway โ€” Deployment documentation
  5. Rockstar Newswire โ€” Official Rockstar announcements