From Idea to App Store in 21 Days: A Mobile Case

Names anonymized — the founder asked. The timeline is what matters, not the niche.
The product
A consumer mobile app in a category we'd never built in. Founder had 200 waitlist signups from a landing page and a three-month window before a related event where they wanted live.
Web-first wasn't an option. Use case was mobile-native — location, camera, push notifications.
Hard requirements: both stores at launch, email + Apple + Google auth, two-tier IAP subscription, push notifications with segmentation, offline cached content, one social feature (following).
Nice-to-haves cut from v1: in-app messaging, AI summaries, premium analytics. All shipped weeks 5–8.
Day 1 — spec freeze
90-minute call. Whiteboard mapping. Founder picked which one social feature shipped (following) and which got cut (in-app messaging). Two-page spec in a shared doc by 6 PM.
Flat price quoted same day: $14K. Founder signed.
Day 2 — repo and infra
Expo project bootstrapped, managed workflow first. Supabase for auth + Postgres + storage. GitHub repo in founder's org. Apple Developer + Google Play console set up using founder's accounts. Sentry + PostHog + RevenueCat provisioned. Bare-bones EAS Build CI with internal distribution to TestFlight.
By end of day 2: "hello world" build installable on the founder's phone via TestFlight.
Days 3–5 — auth, navigation, core models
Email + Apple + Google sign-in via Supabase. Tab navigation with the four primary tabs. User, content, subscription state models in Postgres with RLS. Skeleton screens with mock data.
Day 5 internal demo: founder clicked through every screen, nothing real yet. Deliberate. Shape it before you fill it — catching layout problems before real data shows up is much cheaper.
Days 6–10 — real data, real flows
Content feed wired to Postgres. The one core action wired end to end. In-app subscription flow via RevenueCat (sandbox testing on day 8). Push notification permission flow plus token capture. Follow/unfollow.
Day 6 we switched from managed Expo to Expo prebuild — needed a native module not in the managed runtime. Added four hours of work. We'd planned a full day. Less painful than expected.
Day 10 internal demo: founder used the app for 20 minutes with real data. Found 7 things. Five went into "fix before launch", two into post-launch backlog.
Days 11–14 — the boring parts that decide everything
Empty states (no follows yet, no content yet, no notifications yet). Error states (no network, expired session, payment failed). Pull-to-refresh, infinite scroll on the feed. Skeleton loaders. Image caching with proper sizing. Offline-first cache for the content feed. Accessibility pass — VoiceOver, Dynamic Type, color contrast.
This is where mobile apps die. The happy path was done on day 10. Days 11–14 separate "shipped" from "shippable". Founders who don't budget for this stage ship apps that get one-star reviews on day three.
Day 15 — beta to 20 users
Pushed to TestFlight and internal Play Store. Founder invited 20 of the warmest 200 waitlist users.
Within 48 hours: 16 installs, 14 active for >5 minutes, 3 paid subscriptions in sandbox, 0 crashes in Sentry, 4 small UX issues.
All four issues closed by end of day 17.
Days 16–19 — store submission
App Store screenshots (6 per device size, generated from real screens with status bar mocked). Play Store screenshots. Privacy policy + terms (founder's lawyer had drafts, we hosted them on a static page). App Store privacy nutrition labels. IAP product setup in App Store Connect + Google Play. Final IAP testing in production (paid 99¢ ourselves to validate). Submitted both stores day 19.
Days 20–21 — review window
Google Play: approved in 14 hours. App Store: approved in 28 hours on first submission.
App Store rejections we've had before were always for: missing demo credentials, unclear IAP descriptions, references to "beta" in store copy. This one was clean because store-submission prep ran in parallel with the build, not after.
Day 21: live in both stores. Founder posted to their list. Day-1 installs: 84. Day-7 installs: 312.
Can your mobile MVP fit a three-week window?
Ask ChatGPT to map your scope onto our playbook. It'll surface what fits, what gets cut, and where the timeline breaks if you keep certain features.
“|”
What we cut
In-app messaging. Hard. Known on day 1 it couldn't fit. Founder agreed. Week-5 backlog.
AI content summaries. Nice. Prompt engineering plus eval setup would have eaten a week. Shipped week 8 with proper evals.
Web companion. Mobile-only at launch. Web shipped week 6 once the data model was stable.
Onboarding tutorial. Skipped in favor of "tooltip on first use" — much cheaper to build, almost as effective. Tutorial-style onboarding has a known completion-rate problem anyway.
Analytics dashboards beyond PostHog defaults. PostHog free tier has enough to run v1 of a consumer product.
What we'd do differently
Start the store submission paperwork on day 1, not day 16. Apple Developer enrollment can take 48 hours. IAP product setup is fiddly. The privacy questionnaire takes longer than you think. Doing this upfront would have saved two days at the end.
Hosted privacy policy template in our project starter. We re-do this every project. Should be templated.
Pre-build screenshot generation. We did screenshots manually. There's a tool for this. We just haven't standardized. Next time.
What worked
Expo, managed-first then prebuild when blocked. No mistake on the Expo side cost more than half a day.
Supabase for auth + DB + storage. Day-1 productive. Schema migrations clean.
RevenueCat for IAP. Saved at least two days of Apple/Google IAP plumbing.
EAS Build + internal distribution from day 2. Founder could install the build the day after we started. Continuous deployment habit set early.
PostHog for analytics from day 2. When beta opened, real funnels were already there.
What the founder did right
Brought a tight two-page spec to the first call. Made decisions in under 24 hours when we asked. Used the app for 20 minutes on day 10 — caught issues early feedback couldn't have caught. Trusted us on stack choices, fought hard on UX choices. Correct division of labor.
Three-week mobile window on your end?
Send your email — we'll set up a 30-minute call within 24 hours. After the call you get a written quote and an honest read on whether your window holds.
Cost
$14K flat. Founder's spend on App Store fees + RevenueCat + Supabase + Apple Developer Program + Play Console: about $220. Tools we used (Claude Code, EAS Build credits): on us.
Per-city pages for mobile
Engagement model: Why we don't take equity.
Workflow that makes this timeline possible: How we use Claude Code in production.
Enjoyed this article? Share it with others
Related Posts

Our Client Stopped Paying. We Shipped Anyway.
He didn't tell us right away. He kept sending short replies. Apologizing for the delay. Saying things would clear up soon. For weeks, we assumed it was a cash flow problem -- the kind every early-stage founder runs into at some point.

One Day Your Site Will Go Down. Do You Know Who's Going to Fix It?
Every startup founder eventually faces a production outage, a security breach, or a server bill that makes no sense. Here's why a monthly website support plan is the one investment most skip -- and the one they regret skipping most.

How Start Matter Helped Milana Leshinsky Build Her Dream Product
Milana Leshinsky had a problem. As the creator of Coaching Genie and a business strategist who helps coaches and speakers, she was using too many different tools to work with her clients.