The framework
Five steps: audience, wedge, screens, data, tone. Written down, they become a prompt. Skipped, they become an iteration tax.
Step 1: name the audience, narrowly
Not “everyone.” Not “millennials.” Narrow enough that the first 100 users know each other. “Bouldering gym owners.” “Recovering addicts using daily check-ins.” “Real estate agents in NYC.” The narrower the audience, the more the AI can specialize copy, features, and tone.
A narrow audience is also your best launch channel — you can find them in one community instead of 20.
Step 2: pick the wedge — one job
Your v1 app does one job exceptionally well. Listing all 12 features you imagine is how you end up with a generic app. Ask: “What is the single moment this app exists for?”
- Journal app wedge: “5-minute mood check-in at bedtime.”
- Task app wedge: “Capture anything in under 2 seconds.”
- Social app wedge: “Daily prompt everyone in the group answers.”
- Fitness app wedge: “Log one set without thinking about it.”
When the wedge is crisp, everything downstream (screens, data, tone) becomes decisive.
Step 3: list the screens — max 5 or 6
One line per screen. Name the screen + its primary job. If you can’t describe a screen’s job in one sentence, it probably does not belong in v1.
Good: - Home: today's streak + one-tap check-in - History: calendar grid, tap day for detail - Settings: reminder time, paywall Bad: - Home (lots of stuff) - Insights (advanced analytics) - Social feed (friends' activity) - Groups, challenges, leaderboards...
Step 4: name the data shape
AI builders produce generic mock data unless you give them a schema. Name the tables and the scoping rules. You don’t need to write SQL — one line per table is enough.
Data (Supabase + RLS): - users (id, email, display_name) - habits (id, user_id, name, emoji, reminder_time) - check_ins (id, habit_id, user_id, date) RLS: all tables scoped by user_id. Offline cache: MMKV mirror of all tables.
When the AI knows the data, it stops generating fake “John Smith” avatars and produces realistic scaffolding.
Step 5: decide the visual tone
Not a brand document — four or five words of steer:
- Theme (dark / light / system)
- Accent color (hex)
- Density (airy / compact)
- Navigation type (tabs / stack / drawer)
- Typography mood if it matters (serif, monospace, rounded)
Everything more specific belongs in follow-up iterations, not the first prompt.
Worked example: vague idea → concrete prompt
Starting idea:
"An app that helps people stay in touch with friends they never talk to."
After the five-step translation:
AUDIENCE: 28-40 year olds whose close friendships
slipped during the pandemic.
WEDGE: one daily nudge to reach out to ONE
specific friend — no feed, no scroll.
SCREENS (Expo Router, stack nav):
- Today: big card with one friend + prompt
("Text them now"), plus "skip" and "done".
- Friends: list, add from contacts, edit
reminder cadence (weekly / monthly / quarterly).
- Insights: streak of days reached out, friends
touched this month.
- Settings: reminder time, paywall.
DATA (Supabase + RLS):
- users (id, email, reminder_time)
- friends (id, user_id, name, phone, cadence,
last_contacted)
- outreaches (id, friend_id, user_id, date)
TONE: warm, non-judgmental. Soft background
gradient, serif display typography, rounded
corners. Off-white theme, muted coral accent.Same idea, but now the AI can build it. Before translation: generic social network. After: a specific, opinionated product.
Common translation mistakes
- Starting with tech (“I want to use Supabase and...”) instead of audience.
- Listing 10+ screens — guaranteed shallow output.
- Skipping the wedge — the app becomes “another X” instead of the distinctive one.
- Describing features instead of screens (“notifications” → which screen, which event, when?).
- Omitting data shape — you get mock arrays instead of realistic scaffolding.
- Over-specifying tone in the first prompt (“use Inter Display 800 at 48px...”) — save for iteration.
Use the framework as a checklist
Before hitting “Generate” in ShipNative (or any AI builder), verify you’ve answered: Audience? Wedge? Screens? Data? Tone? If any of the five is missing, your output will be 20% worse than it could be. The hour spent on translation saves a day of iteration.