# How Instagram, WhatsApp, Uber & Netflix Would Be Built Today Using Expo Router


Modern mobile apps are no longer just a collection of screens connected together.

Apps like Instagram, WhatsApp, Uber, and Netflix operate at massive scale with millions of users, real time systems, offline support, complex navigation, caching layers, analytics, feature flags, and production-grade performance optimization.

If these apps were architected today in React Native, one of the strongest choices for navigation and scalable structure would be:

*   Expo
    
*   Expo Router
    
*   TypeScript
    
*   Feature-based architecture
    
*   Modern state management
    
*   API abstraction layers
    
*   Realtime infrastructure
    
*   Offline-first patterns
    

In this article, we’ll explore how apps like Instagram, WhatsApp, Uber, and Netflix could be structured today using Expo Router.

* * *

# Why Architecture Matters in React Native Applications

Small apps can survive messy codebases.

Large apps cannot.

As applications scale, problems start appearing everywhere:

*   Navigation becomes difficult to manage
    
*   Shared state becomes chaotic
    
*   API calls get duplicated
    
*   Teams conflict with each other
    
*   Performance starts dropping
    
*   Startup time increases
    
*   Offline support becomes painful
    
*   Realtime systems become unreliable
    

Architecture is what prevents a codebase from collapsing under scale.

A good architecture improves:

*   Developer productivity
    
*   App performance
    
*   Maintainability
    
*   Scalability
    
*   Team collaboration
    
*   Feature isolation
    
*   Testing
    

At scale, architecture becomes a business decision, not just a coding preference.

* * *

# Why Expo Router Changes Large-Scale App Structure

Traditional React Navigation setups often become deeply nested and difficult to maintain in large apps.

Expo Router changes this with:

*   File-based routing
    
*   Nested layouts
    
*   Route groups
    
*   Shared layouts
    
*   Better modularity
    
*   Cleaner mental models
    

Instead of manually wiring huge navigation trees, routes become part of the filesystem.

Example:

```plaintext
app/
 ├── (auth)/
 │    ├── login.tsx
 │    └── signup.tsx
 │
 ├── (tabs)/
 │    ├── home.tsx
 │    ├── reels.tsx
 │    ├── messages.tsx
 │    └── profile.tsx
 │
 ├── chat/
 │    └── [id].tsx
 │
 └── _layout.tsx
```

This becomes extremely powerful as applications grow.

* * *

# Folder Architecture for Large Applications

One of the biggest mistakes developers make is organizing apps by file type instead of by feature.

Bad structure:

```plaintext
components/
screens/
hooks/
utils/
services/
```

This works for small apps.

It becomes a nightmare for applications with hundreds of screens.

Modern large-scale apps prefer feature-based architecture.

Better structure:

```plaintext
src/
 ├── features/
 │    ├── auth/
 │    ├── chat/
 │    ├── feed/
 │    ├── rides/
 │    ├── payments/
 │    └── streaming/
 │
 ├── shared/
 │    ├── ui/
 │    ├── hooks/
 │    ├── utils/
 │    └── services/
 │
 ├── store/
 ├── api/
 ├── lib/
 └── app/
```

Each feature owns:

*   Components
    
*   Hooks
    
*   Services
    
*   Types
    
*   API logic
    
*   State
    
*   Tests
    

This allows teams to work independently without constantly interfering with each other.

* * *

# How Instagram Would Be Structured

Instagram is heavily content-driven.

Its architecture would prioritize:

*   Feed rendering performance
    
*   Image caching
    
*   Realtime engagement updates
    
*   Story systems
    
*   Background uploads
    
*   Deep linking
    
*   Recommendation systems
    

Possible feature structure:

```plaintext
features/
 ├── feed/
 ├── reels/
 ├── stories/
 ├── profile/
 ├── notifications/
 ├── messaging/
 └── uploads/
```

Critical concerns would include:

*   FlatList optimization
    
*   Media preloading
    
*   Aggressive caching
    
*   Optimistic UI updates
    
*   Pagination systems
    
*   Skeleton loaders
    

Apps like Instagram depend heavily on rendering performance and perceived speed.

* * *

# How WhatsApp Would Be Structured

WhatsApp is fundamentally a realtime communication system.

The architecture focus would include:

*   Socket reliability
    
*   Message synchronization
    
*   Offline queues
    
*   Encryption layers
    
*   Background processing
    
*   Low memory usage
    

Feature structure:

```plaintext
features/
 ├── chats/
 ├── calls/
 ├── contacts/
 ├── status/
 ├── groups/
 └── media/
```

The biggest challenge is message consistency.

A modern architecture would likely include:

*   WebSocket layers
    
*   Local-first databases
    
*   Retry queues
    
*   Event synchronization
    
*   Optimistic delivery
    
*   Conflict resolution
    

WhatsApp-style apps are offline-first by design.

Messages must survive:

*   Poor internet
    
*   App restarts
    
*   Background kills
    
*   Device switching
    

* * *

# How Uber Would Be Structured

Uber is a realtime location-based platform.

Its architecture priorities would include:

*   GPS streaming
    
*   Live ride tracking
    
*   Driver-rider synchronization
    
*   Payment reliability
    
*   Map rendering performance
    

Feature structure:

```plaintext
features/
 ├── maps/
 ├── rides/
 ├── drivers/
 ├── payments/
 ├── tracking/
 └── support/
```

Realtime systems become the biggest engineering challenge.

The app constantly handles:

*   Driver movement updates
    
*   ETA recalculations
    
*   Route changes
    
*   Trip status changes
    
*   Surge pricing updates
    

This requires:

*   WebSockets
    
*   Efficient polling
    
*   Background tasks
    
*   Geolocation optimization
    
*   Event-driven architecture
    

* * *

# How Netflix Would Be Structured

Netflix prioritizes performance and content delivery.

Its architecture focuses on:

*   Video startup speed
    
*   Recommendation systems
    
*   Personalized feeds
    
*   Smart caching
    
*   Device optimization
    

Feature structure:

```plaintext
features/
 ├── home/
 ├── player/
 ├── search/
 ├── downloads/
 ├── recommendations/
 └── profiles/
```

Streaming apps optimize aggressively for:

*   Startup time
    
*   Rendering speed
    
*   Memory usage
    
*   Download management
    
*   Adaptive streaming
    

A modern Netflix-style app would likely include:

*   Offline download architecture
    
*   Progressive loading
    
*   Predictive prefetching
    
*   Analytics infrastructure
    

* * *

# Navigation Architecture for Scalable Apps

Expo Router becomes extremely powerful in large apps because of nested layouts and route groups.

Example:

```plaintext
app/
 ├── (auth)/
 ├── (tabs)/
 ├── (modals)/
 ├── chat/
 └── rides/
```

Each section can have its own layout:

```javascript
// app/(tabs)/_layout.tsx

export default function TabLayout() {
return <Tabs/>;
}
```

Benefits include:

*   Independent navigation flows
    
*   Shared layouts
    
*   Cleaner mental models
    
*   Easier scalability
    

This becomes essential in apps with:

*   Deep linking
    
*   Protected routes
    
*   Dynamic screens
    
*   Nested tabs
    
*   Modals
    

* * *

# Authentication Flow Architecture

Authentication is rarely just “login/signup.”

Large apps handle:

*   Session persistence
    
*   Token refresh
    
*   Multi-device sessions
    
*   Role-based access
    
*   Protected routes
    
*   Secure storage
    

Modern auth architecture:

```plaintext
features/auth/
 ├── api/
 ├── hooks/
 ├── screens/
 ├── store/
 └── services/
```

Typical flow:

1.  App boots
    
2.  Restore token
    
3.  Validate session
    
4.  Load user profile
    
5.  Hydrate app state
    
6.  Route user correctly
    

Expo Router route groups help isolate authentication flows cleanly.

* * *

# State Management Strategies for Large Apps

Small apps often overuse global state.

Large apps avoid it carefully.

Modern applications usually combine:

*   Zustand
    
*   React Query / TanStack Query
    
*   Context
    
*   Local component state
    

Typical separation:

| Type | Best Tool |
| --- | --- |
| Server state | React Query |
| UI state | Zustand |
| Form state | React Hook Form |
| Navigation state | Expo Router |
| Temporary state | useState |

The key principle is:

> Keep server state separate from UI state.

This dramatically improves scalability and maintainability.

* * *

# API Handling & Networking Layers

Large apps never scatter fetch calls everywhere.

Instead, they centralize networking logic.

Example:

```plaintext
api/
 ├── client.ts
 ├── auth.ts
 ├── feed.ts
 ├── rides.ts
 └── chat.ts
```

Benefits include:

*   Centralized error handling
    
*   Retry systems
    
*   Request cancellation
    
*   Token refresh management
    
*   Analytics
    
*   Logging
    

Most production apps also include:

*   Axios interceptors
    
*   Request deduplication
    
*   Caching layers
    
*   API versioning
    

* * *

# Realtime Systems Architecture

Realtime systems are among the hardest engineering problems in mobile apps.

## Chat Systems

Apps like WhatsApp need:

*   Instant delivery
    
*   Read receipts
    
*   Typing indicators
    
*   Sync reliability
    
*   Message ordering
    

Architecture often includes:

*   WebSockets
    
*   Event queues
    
*   Local persistence
    
*   Retry systems
    

* * *

## Live Updates

Apps like Instagram rely heavily on realtime engagement updates:

*   Likes
    
*   Comments
    
*   Notifications
    
*   Stories
    
*   Live streams
    

One major challenge is preventing unnecessary rerenders.

* * *

## Ride Tracking

Uber-style tracking requires:

*   High-frequency location updates
    
*   Battery optimization
    
*   Background processing
    
*   Precision mapping
    

Realtime location systems are computationally expensive and difficult to optimize.

* * *

# Offline-First Support & Caching

Modern apps cannot assume stable internet connectivity.

Offline-first systems often include:

*   Local databases
    
*   Mutation queues
    
*   Cache hydration
    
*   Background synchronization
    

Tools commonly used:

*   SQLite
    
*   MMKV
    
*   AsyncStorage
    
*   React Query persistence
    

Critical principle:

> The app should still feel functional without internet.

* * *

# App Startup Optimization Techniques

Startup performance heavily affects user retention.

Large apps optimize:

*   Bundle size
    
*   Font loading
    
*   Image loading
    
*   Navigation initialization
    
*   API hydration
    

Common techniques include:

*   Code splitting
    
*   Lazy loading
    
*   Route-level loading
    
*   Deferred rendering
    
*   Skeleton UIs
    

Apps like Netflix obsess over startup performance because milliseconds directly impact engagement.

* * *

# Performance Considerations in Production Apps

Production apps continuously optimize performance.

Key focus areas include:

*   JS thread usage
    
*   Memory leaks
    
*   Re-render prevention
    
*   Image optimization
    
*   List virtualization
    
*   Background task efficiency
    

Common tools:

*   FlashList
    
*   Reanimated
    
*   Hermes
    
*   Memoization
    
*   Profiling tools
    

Performance engineering becomes an entire discipline at scale.

* * *

# Shared Layouts & Nested Routing in Expo Router

Expo Router layouts are one of its biggest strengths.

Example:

```plaintext
app/
 ├── (tabs)/
 │    ├── _layout.tsx
 │    ├── home.tsx
 │    └── profile.tsx
```

Shared layouts allow:

*   Persistent tab bars
    
*   Shared headers
    
*   Nested navigation
    
*   Feature isolation
    

This becomes extremely important in large multi-team applications.

* * *

# Scalability Challenges in Apps Like Instagram, WhatsApp, Uber & Netflix

Every large-scale app faces different scalability challenges.

### Instagram

*   Massive media delivery
    
*   Feed ranking systems
    
*   Infinite scrolling performance
    
*   Realtime engagement updates
    

### WhatsApp

*   Reliable message delivery
    
*   Encryption
    
*   Offline synchronization
    
*   Multi-device consistency
    

### Uber

*   Live GPS streaming
    
*   Dynamic pricing systems
    
*   Real-time trip updates
    
*   Battery optimization
    

### Netflix

*   Video delivery optimization
    
*   Content recommendation systems
    
*   Streaming quality adaptation
    
*   Smart caching systems
    

Each app solves very different engineering problems despite sharing the same mobile platform.

* * *

# Tradeoffs & Architectural Decisions at Scale

There is no perfect architecture.

Every decision introduces tradeoffs.

| Decision | Benefit | Cost |
| --- | --- | --- |
| More caching | Faster UX | Stale data |
| Realtime systems | Better engagement | Complexity |
| Offline support | Reliability | Sync challenges |
| Modular features | Team scalability | More abstraction |
| Aggressive optimization | Better performance | Harder debugging |

Engineering at scale is mostly about choosing acceptable tradeoffs.

* * *

# Final Thoughts

Modern apps like Instagram, WhatsApp, Uber, and Netflix are not just React Native projects with many screens.

They are distributed systems running inside mobile devices.

Using Expo Router today provides:

*   Cleaner navigation architecture
    
*   Better scalability
    
*   Feature modularity
    
*   Easier route management
    
*   Improved developer experience
    
*   Better team organization
    

But architecture alone is not enough.

The real challenge is designing systems that remain:

*   Fast
    
*   Reliable
    
*   Maintainable
    
*   Realtime
    
*   Offline-capable
    
*   Scalable
    

…even as millions of users interact with them simultaneously.

That is what separates production-scale mobile engineering from simply building apps.
