On March 8, 2026, I opened a blank Xcode project. On March 14, I submitted to App Store review.
Between those two dates: a complete iOS app, fully built — Apple Screen Time integration, system-level app blocking, a custom shield extension, website blocking across all browsers, a streak tracker, a daily check-in system, a full SOS crisis flow with breathing exercises and coping activities, a Firebase backend, StoreKit 2 subscriptions, Fastlane automated screenshots, and a privacy manifest.
The tool I used for almost all of the implementation: Claude Code.
This is the full story — day by day, pivot by pivot, including the parts that didn't work and the decisions I had to make myself.
What I Was Building
Anchor - Bet Blocker is a gambling blocker for iOS. It uses Apple's official FamilyControls and ManagedSettings APIs — the same Screen Time framework parents use to limit kids' screen time — to actually block gambling apps and websites at the operating system level.
When someone tries to open a blocked gambling app, instead of a generic lock screen, they see a roast message. Something blunt. Something that short-circuits the impulse before it becomes action. That's the product's signature feature.
The idea came from a simple observation: most gambling blocker apps look like they were built in 2014, require you to create an account before you can block anything, and offer generic "you've got this!" messaging that nobody finds convincing at 2am when an urge hits. There was a real gap for something modern, private, and honest.
I'd been aware of the FamilyControls API for a while. Getting it approved by Apple requires an entitlement, but it exists, it works, and it's the right tool for this job. The question was: how fast could I actually build something real?
The Setup: How Claude Code Actually Works Here
Before the day-by-day breakdown, some context on the workflow.
Claude Code is Anthropic's agentic coding tool — it runs in your terminal, reads your actual files, writes code, runs commands, and iterates. It's not autocomplete. You describe what you want, and it figures out how to implement it across whatever files it needs to touch.
The key practice I adopted from day one: a CLAUDE.md file at the project root. This file acts as Claude Code's persistent memory between sessions. It holds the architecture decisions, the design system, the naming conventions, the Firebase schema, the current state of the app. Every time you start a new session, Claude Code reads this file first. Without it, every new conversation starts cold.
With it, I could end a session at midnight, sleep, and pick up the next morning with Claude Code immediately oriented — knowing what we'd built, what the current task was, and what patterns to follow.
The developer's job shifts from "write the code" to "make the right product decisions." The AI handles implementation. You handle judgment.
Day by Day
The Shield Extension environment is extremely restricted by Apple — no network, minimal memory. Real-time AI generation was a dead end. Batch-cached Firestore messages solved it and, as a bonus, gave us full editorial control over the tone and quality of every roast.
Session-based blocking sounds flexible. In practice, it adds friction exactly when you don't want friction. If someone is fighting an urge at 2am, they shouldn't need to think about whether their blocking session is active. Always-on is simpler and better for the user.
This one hurt. A day of work, deleted. But it was obviously right. The target user is someone fighting addiction at their most vulnerable moment. Friction is the enemy. No accounts means instant setup, full privacy, and no password recovery emails landing in their inbox for the rest of time.
Problem: casual gamblers entered small numbers. Small numbers didn't land. Solution: if your number is below the average gambler in your country, show the average. The paywall conversion goal is for users to feel the real weight of the habit — not just their own minimized version of it.
What Claude Code Is Actually Good At
Boilerplate, especially SwiftUI boilerplate, is nearly free. Setting up navigation structure, design system components, Firebase configuration, localization keys, Crashlytics — things that would take a day or more to get right from scratch — Claude Code handles in minutes.
Refactoring without attachment is the other superpower. When I decided to drop authentication on Day 4, Claude Code deleted every auth-related file, updated every view that referenced it, cleaned up imports, and rebuilt the local storage layer. No hesitation, no "but we spent a day on this." The AI has no emotional attachment to code it wrote yesterday. That's a feature.
The CLAUDE.md pattern — keeping a running document of architecture decisions and conventions — is what makes multi-day projects coherent. Without it, each session starts cold. With it, Claude Code can pick up exactly where you left off and stay consistent with decisions made three days ago.
What It's Not Good At
Product decisions are still entirely on you. Claude Code will implement whatever you ask it to build, but it won't tell you that your blocking model is wrong, that your sign-in wall is hurting conversion, or that your "panic button" needs to be a full SOS flow to actually be useful. Those insights came from thinking about the user, not from the AI.
Apple's more obscure APIs still require real research. FamilyControls, Shield Configuration Extensions, and ManagedSettings are niche enough that Claude Code's implementation needed more guidance and iteration than, say, a standard networking layer. I had to understand the constraints myself — 6MB memory limit, no network access in Shield Extensions, entitlement requirements — and communicate them clearly.
Testing judgment is yours. Claude Code doesn't know whether a coping activity actually feels helpful, whether a roast message tone is right, or whether the paywall placement is converting. Real device testing and product intuition still matter.
The Bigger Point About Speed
A solo developer building this traditionally — SwiftUI app, FamilyControls integration, Firebase backend, StoreKit 2 subscriptions, custom Shield Extension, 2,500+ domain database, full SOS flow — is looking at two to three months minimum. That's assuming they already know the APIs and aren't learning as they go.
Seven days compressed that by roughly 10x. The compression didn't come from cutting corners on features — the feature list is real and fully implemented. It came from removing the gap between "I know what I want" and "the code exists."
The speed of pivoting is where this really shows. Dropping authentication, redesigning the blocking model, rebuilding the dashboard, expanding the panic button into a full SOS flow — each of those would have been painful and time-consuming decisions to reverse-engineer in a traditional codebase. With Claude Code, they happened in hours, not weeks. The cost of changing your mind is almost zero.
When changing your mind costs almost nothing, you make better product decisions. You don't defend bad choices because you spent three weeks on them.
On "Vibe Coding" — A Realistic Take
The term gets used loosely. Some people use it to mean generating one-off scripts. Some mean full production apps. What I'm describing is closer to the latter: a real iOS app, submitted to the App Store, with real users in mind.
It's not magic. You still need to understand what you're building. You need to understand the APIs well enough to know their constraints. You need to make product decisions. You need to test on real devices. You need to think about edge cases.
What changes is where your time goes. Less time writing boilerplate. Less time context-switching between implementation and product thinking. Less time stuck on syntax. More time on the decisions that actually matter.
For a solo developer with a clear product vision and enough technical context to guide the AI, it's genuinely transformative. For someone learning to code for the first time, I'd expect a messier experience — the judgment layer still requires understanding.
Key takeaways if you want to try this
CLAUDE.md file religiously. Update it with every architectural decision. It's the AI's memory between sessions.
What's Next
Anchor - Bet Blocker is live on the App Store. The core loop — block gambling apps, block gambling websites, track your streak, use the SOS flow when urges hit — is working. The roast messages are doing their job.
From here: Android (the gambling demographic skews heavily toward Android in some markets), more languages, and improvements to the SOS flow based on real user feedback. The domain catalog will grow. The roast messages will be refined.
If you're a solo developer looking at a product idea and thinking "this would take months" — it might not. The tools have changed. The bottleneck is increasingly the product thinking, not the implementation.
That's worth sitting with.
Try Anchor - Bet Blocker
Free to download. App blocking, website blocking, SOS flow, streak tracking. No account required.
Download on the App Store