Context
Over 12 months, the company underwent two major GTM pivots:
- Creator-led GTM → User-led GTM
- Mobile app → Web → Mobile app
Phase 1: App → Web
Trigger: Users unwilling to install another app for creator content
Outcome:
- Moved to web (Next.js after Flutter Web failure—see separate case study)
- Unlocked SEO and discoverability
- ~6 months total cost
Phase 2: Web Becomes a Liability
New Reality:
- Target shifted to end users, not creators
- Core loops required push notifications and real-time gameplay
- Web notification reliability inconsistent
- Return sessions significantly lower vs mobile
Constraint: Could not afford another 6-month rewrite
Strategic Reframe
Instead of asking "How do we rebuild the app?", we asked:
What are the minimum native capabilities we actually need?
Hard Requirements:
- Reliable push notifications
- Native sign-in (Google/Apple)
- Video playback and payments
- Fast update capability
Solution: Capacitor
Chose Capacitor (web-native runtime in native shell) over React Native rewrite.
Why:
- ~90% code reuse from Next.js
- Access to native APIs via plugins
- Remote updates without store resubmission
- Update latency: 2-3 days → near-instant
Risk Validation (1-Day POC)
Validated all failure modes in ~8 hours:
- Auth: ✓ Solved via plugins
- Notifications: ✓ Native plugins
- Video: ✓ Plugin-based
- Payments: ✓ Integrated
- JS Bridge: ⚠️ iOS blocked embeds → Custom plugin solution
Execution & Results
Timeline:
- Sprint 1 (2 weeks): Core app
- Sprint 2 (2 weeks): Hardening + QA
- Total: ~4 weeks to production iOS + Android
Outcomes:
- Code reuse: ~90%
- Native code: <10% of codebase
- Average TTFI: ~2 seconds
- Feature updates: Instant (remote push)
Key Lessons
- Platform choices encode GTM assumptions — If GTM is uncertain, lock in as little as possible
- Rewrites are strategy failures expressed as code
- Native UX ≠ Native UI — Most startups need native capabilities, not native views
- Speed comes from optionality — Reusing web stack preserved velocity under uncertainty
Total Cost
- App → Web → App churn: ~7 months
- Root cause: Platform decisions made before GTM stabilized
- Preventable with better second-order reasoning
Platform migrations completed during seed stage
