How One Good Thing Was Vibe-Coded with Claude Code: Stack & Pricing

October 7, 2026 · 1307 words

TL;DR
What it isAn iPhone and iPad app that shows one original idea a day, then tells you to close it
BuilderNon-developer (a self-described marketer, not an engineer); first iOS app
AI toolClaude Code, used as a pair programmer
StackSwift, SwiftUI, Firebase, Cloud Functions
Time to launchNot disclosed (3 months of research before any code; 14 builds before App Store approval)
RevenueNot disclosed (pricing only: US App Store lists $3.99/month, $24.99/year, $99.99 lifetime)
SourceShow HN, March 4, 2026

Built with Claude Code iOS app illustration: a calm phone screen showing a single idea card with keep and let go buttons, beside a stack of hundreds of written idea cards

Most wellness apps want you to stay. One Good Thing wants you to leave after two minutes.

It is a small iOS app built by a marketer with Claude Code. It has 26 ratings averaging 4.5 stars on the US App Store, and it sells a Premium subscription. Revenue is not disclosed, so this teardown is about how it was built and how it charges.

The one point of this post: with AI writing the code, the builder's real job became testing, and the pricing had to fit the product's promise.

The problem it solves

The founder's pitch is simple. You get one thought per day: a headline of up to 10 words and a body of up to 120 words. You "carry" it (save it) or "let go." Then you close the app.

The homepage leans into this. It promises no ads, no feeds and no streaks. The ideas come from twelve fields, including philosophy, history, math and language.

Before writing any code, the founder spent three months on research and wrote 1,250 idea cards across 12 categories. That content library is the real product. The code just delivers it.

How it was built

The founder describes themself as a marketer, not an engineer. This was their first iOS app. They had no prior Swift, SwiftUI or Firebase experience, and built it with Claude Code as a pair programmer.

Here is the stack in plain terms:

  • Swift and SwiftUI are Apple's language and toolkit for building iPhone screens.
  • Firebase is Google's hosted backend. It stores user data without you running a server.
  • Cloud Functions are small pieces of server code that run on demand.

Picking which card you see uses what the founder calls a "Resonance Loop" algorithm. It leaves 20% room for exploration so you don't only see one kind of idea.

The most useful part of the post is about bugs. The app needed 14 builds before Apple approved it. The founder's own testing caught problems the AI never flagged: notifications that silently stopped after day 7, a widget showing the wrong day because of time zones, and a sync bug after reinstalling.

"The underrated skill in AI-assisted development is not better prompting." — supertim on Hacker News

The answer was thorough QA (quality assurance, meaning testing the app like a picky user would).

How it makes money

How One Good Thing pricing changed: at launch a free trial led to a paid plan with blurred content, now a free core leads to optional premium depth

The pricing has changed since launch, which is worth studying.

At launch (March 2026, per the HN post): a 7-day free trial, then €1.99 a month or €39.99 for lifetime access. After the trial, content was progressively blurred instead of hidden behind a hard paywall. A paywall is the screen that blocks features until you pay.

Now (September 2026): the core is free forever. You get the daily idea, your saved collection and a taste of the extra features. Premium adds more "Ask" questions per day, all "Margins" (links from today's idea to ideas you saved), and your full "Range" history. The annual plan has a 7-day free trial.

The US App Store lists these in-app purchases:

PlanPrice (US store)
Free$0, daily idea and collection
Premium monthly$3.99
Premium yearly$24.99 (7-day trial)
Lifetime$99.99

The move from "trial, then pay" to "free forever, pay for depth" matters. An app that asks you to close it can't rely on daily habit loops to sell upgrades. A free core keeps people around long enough to want the extras.

First users

The founder hasn't shared download or subscriber numbers. The public signals are the 26 ratings at 4.5 stars on the US store and a quiet Show HN post. The homepage shows a 4.7 rating, which may be a different store or an older snapshot.

That is thin, and I'd rather say so than guess. What stands out is the preparation: 1,250 cards written before launch means the app never runs out of content in year one.

What to copy

  1. Build the content before the code. An AI can write the app in weeks. It can't write your 1,250 cards.
  2. Make your pricing match your promise. An anti-engagement app shouldn't use pushy paywalls. The blur-then-free-core approach fits the brand.
  3. Budget for QA, not just prompts. Plan real-device testing across days, time zones and reinstalls. That is where AI-written bugs hide.
  4. Expect to change prices. The founder moved from euros-and-trial to a free core plus three paid options within months. Treat your first price as a test.

If you vibe-code this

An iOS subscription app with a Firebase backend has a few classic weak spots. These are checks for the app type, not claims about One Good Thing.

  • Never let the app write its own "premium" flag. If Firestore security rules allow it, any user can mark themselves as paid. Firestore is Firebase's database, and its rules decide who can read or write each document. See Firebase security rules for vibe coders.
  • Check purchases on the server. A Cloud Function should confirm the signed App Store transaction before unlocking anything.
  • Keep AI keys out of the app bundle. Features like "Ask" call an AI model. Put that key in a Cloud Function, never in Swift code. See environment variable security.
  • Treat user questions as untrusted input. A free-text "Ask" box can carry prompt injection. See prompt injection.

Here is a Firestore rule that lets users edit their own profile but never their subscription fields:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /users/{uid} {
      allow read: if request.auth != null && request.auth.uid == uid;
      allow update: if request.auth != null && request.auth.uid == uid
        && !request.resource.data.diff(resource.data)
              .affectedKeys().hasAny(['premium', 'premiumUntil']);
      // premium fields are written only by a Cloud Function (Admin SDK)
    }
  }
}

Built a subscription app with Claude Code and want someone to check the paywall logic? Email me at [email protected] for an audit.

Key takeaway

A marketer shipped a polished iOS app with Claude Code. The code was the fast part. The research, the 1,250 cards, the 14 builds of testing and the pricing rethink were the slow parts, and they are what make it a product.

More case studies: Vibe-coded apps making money · Security basics: Vibe coding security guide

Sources