A Freelance React Native Workflow That Cuts MVP Delivery From 4 Weeks to 1
If you freelance on React Native, your build time isn't where you think it is. It's not in component code — it's in the workflow loop around it: pre-kickoff scaffolding, Figma-to-real-app translation, scope-change re-quotes. This post walks through a freelance delivery workflow I've been running with an AI app builder (RapidNative) and the actual tradeoffs I've hit shipping client projects with it.
The starting state: where freelance React Native time actually goes
Real numbers from my last 12 client projects (solo, $80/h blended, 4-week MVPs):
| Phase | Avg hours | What I was actually doing |
|---|---|---|
| Pre-kickoff scaffolding | 18h | Expo init, navigation, theme, auth screens, basic state |
| Discovery + design alignment | 14h | Figma walkthroughs, "what does this look like on a phone" debates |
| Initial screen build | 35h | 6–8 screens, basic CRUD, mock data |
| Revisions round 1 | 10h | Translating Figma feedback into code |
| Mid-project scope change | 14h | Re-quoted, sometimes absorbed |
| API wiring + polish | 18h | The actually interesting work |
| Total | ~109h |
The boring 70% is the first three rows. AI is genuinely good at those.
The workflow I run now
1. Pre-kickoff: paste the brief, get a working app
Before the kickoff call, I paste the client's brief into RapidNative. ~10 minutes later there's a working Expo project on a QR code. No npx create-expo-app, no theme tokens, no navigation wiring. The generated project includes Expo Router navigation, a basic design system, screens implied by the brief, and realistic mock data.
This is the step that costs me 18 hours on a traditional project. It now costs me 10 minutes plus a coffee.
2. Kickoff call: demo on the client's phone, iterate live
The QR code matters more than the build itself. The client scans, the app opens on their phone, they tap through their own app during the call. When they want a change — "this button should be green," "remove this onboarding screen" — I use the point-and-edit mode. Click the element, type the change, watch it update on their phone in real time.
This compresses what used to be a week of feedback loops into one call. The technical reason: feedback against a real interactive app is concrete. Feedback against Figma is theoretical.
3. Async iteration via team collaboration
Between calls, I invite the client into the project as a collaborator. They can comment on specific screens or drop their own prompts for small changes. I wake up to a punch list with screenshots attached to the specific screen.
If they're non-technical, point-and-edit is dangerous to give them write access on — but a comment-only role is fine.
4. Mid-project scope change: absorbed in an afternoon
The week-3 "can we add a referral flow?" used to cost me 14 hours of build + 2 hours of awkward emails. Now it's a prompt — "add a referral flow with a share button on the profile screen, a stats screen, and a redemption screen" — and an afternoon of polish. I usually absorb it. The math works because the cost is now hours, not days.
5. Export → VS Code → ship
When the prototype is signed off, I export to a real React Native + Expo repo and continue in VS Code:
- Replace mock data with real API calls
- Wire auth properly (the AI scaffolds the screens but I always rewrite the actual flow)
- Add the custom business logic the brief mentioned but the AI guessed at
- Run on a device, fix the inevitable native quirks
- Submit to App Store / Google Play
The export is a normal Expo project. npx expo start runs it locally. No vendor lock-in.
What AI does well, what it doesn't
Well:
- Scaffolding: navigation, theme, layouts, screens
- Standard UI patterns: list/detail, forms, settings, onboarding
- Stylistic iteration: "make this look like X"
- Mock data and basic state management
Not well:
- Payments (Stripe / RevenueCat / IAP) — always rewrite by hand
- Custom auth flows with edge cases — scaffolds the screens, you write the actual flow
- Real-time / WebSocket-heavy features
- Anything with non-obvious business logic — the AI guesses, and the guess is usually wrong in subtle ways
The split is convenient: the "well" column is the part of freelance projects that's hardest to bill for. The "not well" column is the part you should be billing premium rates on anyway.
Practical tips after ~10 projects on this workflow
- Export early. First day of the project, export the code and run it locally. Catches any environment issues before the demo.
- Don't generate, then edit, then regenerate. Once you've started hand-editing in VS Code, treat the AI builder as a prototype tool, not a continued source of truth. Mixing both creates merge pain.
- Use point-and-edit for visual changes, prompts for structural changes. Trying to do structural changes through point-and-edit produces inconsistent results.
- For complex flows, scaffold them as separate small prompts, not one big prompt. Asking the AI to "build a complete e-commerce checkout with payment, shipping, tax, and confirmation" produces worse output than asking for each screen individually.
- Keep a client-notes.md in the project root. AI builders don't preserve the "why" behind decisions; you do.
The economics question every freelancer asks
If a 4-week MVP becomes a 1-week sprint, do you cut your price 75%? No. You either:
- Hold the price and shorten the timeline (clients love this)
- Hold the price and run 3–4× more projects per year
- Productize: "Mobile MVP in 7 days for $X" as a fixed offer
The speed itself is the value. Most clients pay for outcome, not hours.
Try it on your next brief
The fastest test: take your next client brief, paste it into RapidNative, and see what comes back in 10 minutes. If it's useful, you saved 2 days of scaffolding. If it's not, you spent 10 minutes.
I've found it's reliably useful for the 70% of freelance work that's the same on every project. Your mileage with the other 30% — the custom business logic that's why the client hired you — is up to you.
If you've already explored this space, the export pipeline post goes deeper on what the output actually looks like.
Top comments (0)