Skip to content

17 Red Lines for a $2 App

Mar 14, 2026

I bought a box of quote cards once. Physical ones. Thick paper, nice texture. You flip one when you can't decide something. You flip one when you're bored. You flip one for no reason at all.

30 seconds. One card. Then you put it back.

That box got lost during a move. I never replaced it.

Last January, I built the replacement. An iOS app called One Page. SwiftUI, zero dependencies, $1.99 one-time purchase. It does three things: show a random card, let you flip it, let you share a screenshot. That's it.

The interesting part isn't what it does. It's what it refuses to do.


The Not-List

Before writing any code, I wrote 17 red lines. Things One Page will never do. Not "things we'll add later." Things that would kill the product if they existed.

No search. No tags. No table of contents. No reading progress. No "Card 7 of 342."

No AI interpretation. No comments. No social features. No user-generated content.

No subscriptions. No ads. No in-app purchases to unlock more packs.

No push notifications. No daily reminders. No login. No account. No cloud sync.

No interpretation of the source text. No editorial commentary. No "learning" anywhere in the UI.

Each red line has one job: protect the 30-second ritual. Every feature someone might suggest — search, categories, AI summaries, streak counters — sounds reasonable in isolation. Each one would make the product objectively "better." Each one would destroy what makes it worth $2.


The Inversion

Most product thinking starts with: what should we build?

One Page started with: what would kill us?

The answer wasn't technical debt or scaling issues. The answer was: becoming a reading app. The moment a user opens One Page and thinks "I should read more of these," we've lost. The product is designed to be closed, not consumed. 30 seconds, then gone.

This sounds like laziness disguised as philosophy. It's not. It takes more discipline to not build a feature than to build one. Every feature has a constituency. Search? Power users want it. Categories? Organized people expect it. AI summaries? It's 2026, everyone has AI.

Saying no to all of them requires knowing exactly what the product is. Not approximately. Exactly.


What It Actually Is

Not a reading app. Not an education tool. Not a content platform.

A digital fidget spinner for the mind.

You open it. You see a card. Some old text — a sentence, sometimes two. You flip it. There's a longer passage on the back. You read it or you don't. You close the app.

The closest analogy isn't Kindle. It's a worry stone. You don't use a worry stone to learn geology.

The user isn't here to learn. They're here to settle. 30 seconds of stillness in a world that won't shut up.


Design as Elimination

The aesthetic direction was set in one sentence: Hara Kenya.

White. Quiet. Restrained. Ordered. Four words. Everything else follows.

The card is a 1:1 square. Not 16:9, not 4:3. Square — because it's the calmest ratio, and it's perfect for sharing on social media.

The font is Song Ti — a serif typeface that looks like it belongs in a book your father kept on his shelf. Not modern. Not trendy. Timeless.

Background textures: rice paper fiber, aged book page, faint ink wash, plain ivory. Four options. No gradients, no illustrations, no "design."

The share image contains zero branding. No logo, no app name, no QR code, no "shared from One Page." Just text on texture. The goal: someone sees the shared image and asks "what is this?" Not "oh, another app ad."

The test for every design decision: "If this were pinned on a wall in Hara Kenya's studio, would it look like it belongs?" If yes, keep it. If it looks like it's trying too hard, delete it.


$2 Is Not a Price. It's a Statement.

$1.99 globally. ¥15 in China.

Not freemium. Not subscription. Not ad-supported. One price, all features, forever.

Why? Because a spiritual object shouldn't have a monthly fee. You don't subscribe to a worry stone. You buy it once. It's yours.

¥15 isn't because "that's what it's worth." It's because ¥15 says "I chose to own this." Below ¥12 feels like a clearance sale. Above ¥18 raises the psychological barrier for impulse. ¥15 sits in the sweet spot between "cheap tool" and "considered purchase."

The pricing decision was made before a single line of code was written. Because pricing isn't a business decision. It's a product decision. It tells the user what kind of thing they're holding.


The App Is a Shell

Here's the part I find most interesting about One Page.

The valuable content — the deep interpretations, the decision frameworks, the methodology distilled from these texts — none of it goes into the app. The app only carries raw source text. No commentary. No guidance. No analysis.

Why? Three reasons.

First, interpretation is a regulatory risk. The app's survival depends on being a neutral "quote card tool," not an ideological product. The moment it interprets, it takes a stance. Stances get rejected in App Store review.

Second, a $2 container can't protect heavy content. If the good stuff is inside a $2 app, it can be screenshot-shared for free in five minutes. The real value stays where I control distribution — private channels, courses, premium content.

Third, it's architecturally correct. The app is L1 — public layer, clean, sellable, low-risk. Deep content is L2 — private layer, high-value, controlled distribution. This isn't content strategy. It's organizational architecture applied to intellectual property.

L1 — Public:  One Page app (raw text, no interpretation)
L2 — Private: Deep analysis (methodology, frameworks)
L3 — Future:  Decision training (scenario × historical pattern)

The app is a surface. Not a vessel.


Zero Dependencies

One Page has zero third-party dependencies. SwiftUI, StoreKit 2, UserDefaults, bundled JSON. That's the entire stack.

No analytics SDK. No crash reporting. No A/B testing framework. No remote config. No Firebase. Nothing.

This isn't stubbornness. It's coherence. The product promises quietness. A product that promises quietness but phones home to six analytics services is lying. The architecture should match the promise.

It also means the app will still compile and run in 10 years. No dependency will deprecate. No SDK will force an upgrade. No third-party server will go down. The app is a self-contained artifact, like the physical card box it replaces.


Building It

One person. SwiftUI. Two weeks.

The entire product was built using the same agentic engineering methodology I use for everything: constitution first, specs second, code last.

CLAUDE.md defined the aesthetic standards, the red lines, the file organization, the naming conventions. Specs defined each feature as an independent, verifiable unit. Agents executed.

The irony: the most complex part of building One Page wasn't the code. It was the documentation. 17 red lines, 10 architectural decisions, 4 design constraint documents, 1 product soul document — all written before the first SwiftUI view existed.

The ratio was roughly 3:1. Three days thinking, one week coding. For a product this simple, that ratio sounds absurd. But "simple" is the output. The input is the most precise set of constraints I've ever written for any product.

Simple products require the most rigorous thinking. Because there's nowhere to hide.


One Line

"One Page is not the vessel for your ambition. It's the shell."

It lets me:

  • Sell a clean $2 product on the App Store
  • Keep the valuable content where I control it
  • Have a finished artifact that proves a point

The point: a product designed by what it refuses to do can be more powerful than one designed by what it adds.

17 red lines. Zero dependencies. One gesture. 30 seconds.

Done. Shipped.


→ Try One Page

Uncle J

Uncle J