<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Swyom Sanjog</title>
    <description>The latest articles on Forem by Swyom Sanjog (@swyom_sanjog_4908464907cc).</description>
    <link>https://forem.com/swyom_sanjog_4908464907cc</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3711927%2F4115e6c1-8b0b-4abc-86ee-50781aceb0ef.png</url>
      <title>Forem: Swyom Sanjog</title>
      <link>https://forem.com/swyom_sanjog_4908464907cc</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/swyom_sanjog_4908464907cc"/>
    <language>en</language>
    <item>
      <title>How Instagram, WhatsApp, Uber &amp; Netflix Would Be Built Today Using Expo Router</title>
      <dc:creator>Swyom Sanjog</dc:creator>
      <pubDate>Fri, 22 May 2026 18:02:31 +0000</pubDate>
      <link>https://forem.com/swyom_sanjog_4908464907cc/how-instagram-whatsapp-uber-netflix-would-be-built-today-using-expo-router-4jlf</link>
      <guid>https://forem.com/swyom_sanjog_4908464907cc/how-instagram-whatsapp-uber-netflix-would-be-built-today-using-expo-router-4jlf</guid>
      <description>&lt;p&gt;When we open apps like Instagram, WhatsApp, Uber, or Netflix, it all feels simple. Tap, scroll, swipe — everything just works.But behind that smooth experience… there’s a very carefully designed architecture.If we were to build these apps today using React Native + Expo Router, the approach would be very different from older methods.&lt;/p&gt;

&lt;p&gt;This blog will walk you through how modern apps are actually structured — in a way that you  can understand and apply.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;1.How Modern Large-Scale Mobile Apps Are Structured&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Big apps are not built screen-by-screen.They are built like systems, not just UI.&lt;/p&gt;

&lt;p&gt;Think of it like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Small app → one folder, few screens&lt;/li&gt;
&lt;li&gt;Large app → multiple systems working together:&lt;/li&gt;
&lt;li&gt;UI&lt;/li&gt;
&lt;li&gt;Navigation&lt;/li&gt;
&lt;li&gt;State&lt;/li&gt;
&lt;li&gt;API layer&lt;/li&gt;
&lt;li&gt;Realtime engine&lt;/li&gt;
&lt;li&gt;Cache layer&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Modern apps follow:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Separation of concerns&lt;/li&gt;
&lt;li&gt;Feature-based structure&lt;/li&gt;
&lt;li&gt;Scalable navigation&lt;/li&gt;
&lt;li&gt;Centralized state management&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;2.Why Architecture Matters in React Native Applications&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Think of building an app like organizing a massive, busy hospital. If you don't have a solid architectural blueprint before laying bricks, you end up with chaos: turning on the X-ray machine might accidentally cut the power in the operating room. In React Native, bad architecture forces the JavaScript logic and the phone's hardware to constantly scream at each other across a narrow communication bridge. This traffic jam causes your app to freeze, scroll terribly, and lag.&lt;/p&gt;

&lt;p&gt;Furthermore, without clean structure, your code gets tangled together like spaghetti. Changing a single button color in a chat screen could accidentally break the camera or crash the video player because everything is secretly connected. Poor layout also forces the app to secretly refresh hidden pages in the background, making the user's phone get hot and draining their battery instantly. Good architecture acts as the invisible skeleton that keeps features safely isolated, stops battery drain, and ensures the app runs lightning-fast even as it grows.&lt;/p&gt;

&lt;p&gt;If you ignore architecture:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your app becomes messy&lt;/li&gt;
&lt;li&gt;Bugs increase&lt;/li&gt;
&lt;li&gt;Performance drops&lt;/li&gt;
&lt;li&gt;Hard to scale features&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you follow good architecture:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Easy to add features&lt;/li&gt;
&lt;li&gt;Easy to debug&lt;/li&gt;
&lt;li&gt;Smooth performance&lt;/li&gt;
&lt;li&gt;Team collaboration becomes easier&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 In real companies, architecture matters more than UI.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;3.Folder Architecture Using Expo Router&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Expo Router uses file-based routing, similar to Next.js.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;app/
│
├── (auth)/
│   ├── login.tsx
│   ├── register.tsx
│
├── (tabs)/
│   ├── home/
│   │   ├── index.tsx
│   │   ├── post.tsx
│   │
│   ├── search/
│   ├── profile/
│
├── _layout.tsx
├── index.tsx

features/
│
├── auth/
├── chat/
├── feed/
├── ride/
├── video/

services/
│
├── api.ts
├── socket.ts

store/
│
├── userStore.ts
├── appStore.ts

components/
utils/
hooks/

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;strong&gt;4.Feature-Based Separation in Large Applications&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Instead of grouping by type (components, screens), modern apps group by features.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;features/chat/
  ├── ChatScreen.tsx
  ├── ChatService.ts
  ├── chatStore.ts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;👉 Why this works:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Everything related to chat is in one place&lt;/li&gt;
&lt;li&gt;Easy to maintain&lt;/li&gt;
&lt;li&gt;Easy to scale&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;5.Navigation Architecture for Scalable Apps&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Expo Router gives you a file based routing system, In which your files are treated as routes, amazing right?&lt;/p&gt;

&lt;p&gt;Expo Router's file-based navigation scales elegantly because each folder level adds exactly one layer of UI. The root _layout.tsx wraps everything. The tabs layout adds the tab bar. Each tab's layout adds a stack navigator. The result is a navigation hierarchy that mirrors your product hierarchy.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0b3vmwjy19ru9h4a3x0l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0b3vmwjy19ru9h4a3x0l.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;6.Authentication Flow Architecture&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Expo Router makes auth guards natural. In the root _layout.tsx, you check auth state and render either the (auth) group or the (tabs) group. The route groups in parentheses don't affect URLs — they just let you share layouts.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;     App Start
         ↓
    Check Token
         ↓
   Is Logged In?
   ↓          ↓
  Yes         No
  ↓           ↓
Main App    Auth Screens
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;app/
│
├── _layout.tsx          ← Root layout (auth check here)
├── index.tsx            ← Splash / loader
│
├── (auth)/
│   ├── login.tsx
│   ├── signup.tsx
│
├── (tabs)/
│   ├── _layout.tsx
│   ├── home.tsx
│   ├── profile.tsx
│
store/
│   └── authStore.ts

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fesg4pfugi1zebvxs86lg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fesg4pfugi1zebvxs86lg.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;7.State management strategies for large apps&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The biggest mistake I made early on: putting everything in one state manager. Server data (API responses) and client state (selected tab, modal open) have completely different lifecycles. Mixing them creates needless complexity.&lt;/p&gt;

&lt;p&gt;The pattern that works at scale:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Zustand:- Global UI state, auth tokens, user preferences, non-server data.&lt;/li&gt;
&lt;li&gt;React Query:- All server data — with caching, background refetch, stale-while-revalidate.&lt;/li&gt;
&lt;li&gt;SQLite:- Offline persistence, message history,downloaded content metadata.&lt;/li&gt;
&lt;li&gt;Context:- Truly tree-local state only — theme provider, modal state for a single screen.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;8.API handling and networking layers&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Every API call in a large app goes through a single centralized client — never raw fetch in a component. This buys you auth token injection, automatic refresh on 401, timeout handling, and base URL configuration — all in one place.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// lib/api-client.ts
import axios from 'axios';
import { useAuthStore } from '../store/authStore';

const api = axios.create({
  baseURL: process.env.EXPO_PUBLIC_API_URL,
});

// Attach token
api.interceptors.request.use((config) =&amp;gt; {
  const token = useAuthStore.getState().token;
  if (token) config.headers.Authorization = `Bearer ${token}`;
  return config;
});

// Handle 401
api.interceptors.response.use(
  (res) =&amp;gt; res,
  async (err) =&amp;gt; {
    if (err.response?.status === 401) {
      useAuthStore.getState().logout();
    }
    return Promise.reject(err);
  }
);

export default api;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;strong&gt;9.Realtime Systems&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Real-time features make an app feel alive, but different features require completely different tech stacks behind the scenes.  &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Chat Systems (Like WhatsApp): To pass text back and forth instantly, apps use WebSockets. Unlike a standard web request where your phone asks a server for data and hangs up, a WebSocket keeps an open, continuous "phone call" running between your app and the server. The moment a message drops, it slips through this open line instantly.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Live Updates (Like Instagram Likes):If millions of people are watching a live stream, WebSockets can become too heavy for the server. Instead, engineers use Server-Sent Events (SSE). This is a one-way street where the server safely pushes updates (like new view counts or likes) to your phone without your phone needing to talk back.  &lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;3.Ride Tracking (Like Uber): Uber uses continuous geospatial telemetry. Your driver’s phone constantly streams GPS coordinates to a central hub, which instantly calculates distances using math formulas—like the Haversine or Euclidean distance formulas:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Focw201muekc96e9qllcz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Focw201muekc96e9qllcz.png" alt=" " width="366" height="58"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;10.Offline-first support and caching&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Offline-first means your app works without internet and syncs when connectivity returns. It's not optional for apps with global users — trains, elevators, rural areas happen.&lt;/p&gt;

&lt;p&gt;The mental model: write locally first, show immediately, sync in the background. A message in WhatsApp shows as "sending" the instant you tap send — it was written to SQLite locally. The server sync is background work.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdxflzw97kelzasdm57jt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdxflzw97kelzasdm57jt.png" alt=" " width="680" height="259"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;11.App startup optimization&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Large apps are slow to start — unless you're deliberate. The three biggest wins:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Keep the critical path minimal. On startup, only load what's needed to determine the auth state and show the first screen. Everything else is lazy.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Hold the splash screen. Use expo-splash-screen to keep the native splash visible while you do async setup (load tokens, prefetch user data). Only hide it when you're ready. Never show a blank white screen.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Lazy-load heavy modules. The map SDK, video player, and camera don't need to be in your initial bundle. Load them when the user navigates to those screens.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F98v4q0ljb30igmfbi0j4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F98v4q0ljb30igmfbi0j4.png" alt=" " width="680" height="197"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;12.Performance considerations in production&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Beyond startup, production apps fight a constant battle against jank. The key culprits and their fixes:&lt;/p&gt;

&lt;p&gt;Long lists. Never use a standard ScrollView for lists that could have 100+ items. Use FlashList (from Shopify) — it recycles cells like UITableView and is dramatically faster than FlatList.&lt;/p&gt;

&lt;p&gt;Image loading. Use expo-image, not the built-in Image component. It supports caching, priority loading, and progressive blur-up by default.&lt;/p&gt;

&lt;p&gt;Heavy computation on the main thread. Anything that takes more than a few milliseconds (sorting, filtering large lists, cryptography) should run in a worklet via react-native-reanimated or a background thread via expo-task-manager.&lt;/p&gt;

&lt;p&gt;Re-renders. Profile with React DevTools before optimizing. Most re-render problems come from missing useCallback/useMemo on props passed to deeply nested components — but don't add them everywhere speculatively.&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;13.Shared layouts and nested routing in Expo Router&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Each _layout.tsx file wraps all routes at its level. This means the tab bar (defined in (tabs)/_layout.tsx) stays visible as you navigate between tabs. A custom header defined in feed/_layout.tsx wraps only the feed screens. Nothing leaks between feature boundaries.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{`// app/(tabs)/_layout.tsx — tab bar lives here
export default function TabLayout() {
  return (
    &amp;lt;Tabs&amp;gt;
      &amp;lt;Tabs.Screen name="feed" options={{ title: "Feed", tabBarIcon: ... }} /&amp;gt;
      &amp;lt;Tabs.Screen name="messages" options={{ title: "Chats" }} /&amp;gt;
      &amp;lt;Tabs.Screen name="map" options={{ title: "Map" }} /&amp;gt;
    &amp;lt;/Tabs&amp;gt;
  );
}`}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When navigating from feed/index to feed/[postId], the tab bar stays because it's defined above the feed stack in the hierarchy. The post screen only adds a back button — via feed/_layout.tsx — and doesn't need to know anything about the tab bar.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;14.Scalability Challenges Across Tech Giants&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Every major app faces a unique technical monster. Here is what engineering teams are constantly fighting at scale:&lt;/p&gt;

&lt;p&gt;Instagram: The Media Processing WallInstagram's biggest challenge is decoding massive images and videos instantly on the fly. To keep your feed smooth, they aggressively compress media on server-side content delivery networks (CDNs) based on your exact screen size, and proactively pre-fetch the next three posts before you even scroll to them.  &lt;/p&gt;

&lt;p&gt;WhatsApp: The Encryption BottleneckBecause WhatsApp is strictly end-to-end encrypted, your device has to do heavy math to encrypt and decrypt every single text, photo, and voice note locally. This uses a massive amount of CPU power. To keep the app from lagging, teams offload these intense calculations away from the main user interface thread into concurrent native background threads via high-speed native interfaces. &lt;/p&gt;

&lt;p&gt;Uber: The Re-render StormWith thousands of drivers moving simultaneously, Uber receives a constant waterfall of GPS coordinates. If the map re-rendered the entire screen every time a driver moved an inch, phones would overheat and crash. Uber fixes this by completely isolating state elements—allowing only the tiny car icon to re-draw its position while the rest of the map landscape remains completely untouched. &lt;/p&gt;

&lt;p&gt;Netflix: Adaptive Streaming Under PressureNetflix has to deliver high-quality video across everything from low-end mobile phones in rural areas to 4K TVs on high-speed fiber lines. Their layout structures must adapt instantly to different screen sizes, applying aggressive, real-time content downscaling the millisecond your bandwidth drops to protect playback integrity and prevent buffering wheels.  &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;15.Tradeoffs and architectural decisions teams make at scale&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;When apps grow to serve millions of users, there is no single "perfect" piece of code—there are only tradeoffs. Engineering teams must constantly balance competing priorities to keep their systems afloat:&lt;/p&gt;

&lt;p&gt;Speed vs. Accuracy (Consistency vs. Availability): Teams must choose between showing data instantly or ensuring it is 100% accurate. For example, Instagram will show you a cached feed immediately so the app feels fast, even if it means you miss a post uploaded two seconds ago. Conversely, a banking app or Uber's ride-pricing engine must prioritize absolute accuracy over pure speed.&lt;/p&gt;

&lt;p&gt;Feature Velocity vs. App Performance: Using highly abstracted frameworks and libraries allows developers to build and ship features incredibly fast. However, it adds weight to the app bundle. At scale, companies like WhatsApp constantly evaluate when to use flexible cross-platform tools and when to spend weeks writing highly customized, raw native code to save device memory.  &lt;/p&gt;

&lt;p&gt;Monolith vs. Micro-Frontends: Keeping code in a single repository is easy to manage at first, but it slows down large teams due to overlapping code changes. Moving to a modular, feature-based architecture keeps teams independent but introduces complex setup requirements for sharing data across those features. &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Conclusion: Wrapping It All Together&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Building a modern mobile powerhouse like Instagram, WhatsApp, Uber, or Netflix requires a deep shift from just making code work to making code survive.&lt;/p&gt;

&lt;p&gt;As we have explored, architecture matters because it forms the invisible skeleton of your app—preventing performance traffic jams, protecting phone batteries, and allowing massive, multi-team engineering organizations to build simultaneously without breaking each other's features. Frameworks like Expo Router have fundamentally changed the game by aligning file structures directly with user experience layouts, making robust patterns like protected authentication flows and shared video contexts intuitive to build.  &lt;/p&gt;

&lt;p&gt;When you layer this routing with specialized state management, offline-first sync pipelines, real-time engines, and smart startup optimizations, you transform a fragile mobile application into a resilient digital ecosystem capable of handling the chaotic demands of global scale.&lt;/p&gt;

</description>
      <category>reactnative</category>
      <category>mobiledev</category>
      <category>discuss</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>Virtual DOM</title>
      <dc:creator>Swyom Sanjog</dc:creator>
      <pubDate>Tue, 05 May 2026 17:16:31 +0000</pubDate>
      <link>https://forem.com/swyom_sanjog_4908464907cc/virtual-dom-2a89</link>
      <guid>https://forem.com/swyom_sanjog_4908464907cc/virtual-dom-2a89</guid>
      <description>&lt;p&gt;Hi everyone, my name is P Swyom Sanjog. Welcome back to my blog—I hope you’re all doing well. Today, I’m bringing a new topic: &lt;strong&gt;Virtual DOM&lt;/strong&gt;. Let’s understand what the Virtual DOM is in simple terms. We’ll cover key questions like what it is, why it’s used, and how it works. So, let’s get started!&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Virtual Dom&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;So, let’s break down the topic into &lt;strong&gt;“Virtual”&lt;/strong&gt; and &lt;strong&gt;“DOM.”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Virtual&lt;/strong&gt; means something that exists digitally it’s not physically present but acts like a copy of a real object.&lt;br&gt;
&lt;strong&gt;DOM (Document Object Model)&lt;/strong&gt;, in simple terms it is a programming interface for the web pages and it represents the entire HTML document in a tree structure of objects.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff6ct8asieep6lz95yupb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff6ct8asieep6lz95yupb.png" alt=" " width="800" height="752"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;so &lt;strong&gt;virtual Dom&lt;/strong&gt; is a type of interface where it compare the changes with old Dom of the system or in simple term "an interface efficiently tracking changes in a lightweight copy of the real object."&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl5x0ip1qc7kzg6q6gyfd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl5x0ip1qc7kzg6q6gyfd.png" alt=" " width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Why the Virtual Dom exist ? what the need of it ?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Imagine you’re editing a document.You just want to change one word, but instead of editing that word, you rewrite the entire page every time. which is a slow process. That’s exactly how the real DOM can behave. &lt;/p&gt;

&lt;p&gt;The Virtual DOM is like a smart middle layer.It doesn’t replace the real DOM—it just makes working with more efficient, faster, and smoother.&lt;/p&gt;

&lt;p&gt;The virtual Dom is necessary because it make the web apps faster and smarter by avoiding unnecessary updates. lets take a real life example imagine : &lt;/p&gt;

&lt;p&gt;Real DOM → Writing directly on the final exam paper.&lt;br&gt;
Virtual DOM → First writing on rough paper then correct the mistakes then write only the final answer .&lt;/p&gt;

&lt;p&gt;**&lt;/p&gt;

&lt;h2&gt;
  
  
  Simple mini Project based on Virtual DOM concept
&lt;/h2&gt;

&lt;p&gt;**&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbtaaivi7tx3nxswqojrz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbtaaivi7tx3nxswqojrz.png" alt=" " width="800" height="440"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;result :&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe4cmwrutigj7hif8ispj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe4cmwrutigj7hif8ispj.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffz3k6zqbp49soh17bocq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffz3k6zqbp49soh17bocq.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;When you click the &lt;strong&gt;Increment&lt;/strong&gt; or &lt;strong&gt;Decrement&lt;/strong&gt; button, React doesn’t reload the whole page. Instead of it updates the &lt;code&gt;count&lt;/code&gt; using &lt;code&gt;useState&lt;/code&gt;, and then quickly creates a new version of the UI in memory this is called the Virtual DOM . It compares this new version with the previous one and notices that only the number has changed. So instead of rebuilding everything, React updates just that small part of the count text on the screen. This makes the app feel fast and smooth because only the necessary change is applied, not the entire UI.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;**&lt;/p&gt;

&lt;h2&gt;
  
  
  Simple Conclusion
&lt;/h2&gt;

&lt;p&gt;**&lt;br&gt;
React DOM helps in rendering the page on the browser faster than the native HTML pages. By only changing the specific part of the DOM tree rather than re-rendering the entire tree again . &lt;/p&gt;

&lt;p&gt;That is the core reason why Virtual DOM manipulation is prefferred over Real DOM manipulation. &lt;/p&gt;

</description>
      <category>beginners</category>
      <category>javascript</category>
      <category>tutorial</category>
      <category>webdev</category>
    </item>
    <item>
      <title>The Beginner’s Guide to React Native for Mobile Devlopment</title>
      <dc:creator>Swyom Sanjog</dc:creator>
      <pubDate>Sun, 25 Jan 2026 16:59:27 +0000</pubDate>
      <link>https://forem.com/swyom_sanjog_4908464907cc/the-beginners-guide-to-react-native-for-mobile-development-58kl</link>
      <guid>https://forem.com/swyom_sanjog_4908464907cc/the-beginners-guide-to-react-native-for-mobile-development-58kl</guid>
      <description>&lt;p&gt;Hi everyone, once again welcome to my blog. I hope you’re all doing well. I also hope you’ve read my previous blog, where I talked about my project "BookBazaar". However, I didn’t explain the tech stack—what it is and why I chose it. In this blog, I’ll talk about React Native: what it is, why I chose it, and why I didn’t go with Swift or other frameworks. Let’s get started! &lt;/p&gt;

&lt;h2&gt;
  
  
  What is React Native ?
&lt;/h2&gt;

&lt;p&gt;React native is a powerful and widely used framework for building mobile applications that work on cross-platforms like Android and IOS . Instead of developing separate apps for each platform, developers can write a single codebase and use it on both devices. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;In simple terms React Native is a framework that  people use to build mobile apps for cross platforms like Android and IOS, making the developers more faster and more efficient it is based on JavaScript and TypeScript and allow developers to create apps that feel smooth and truly native in performance and make user experience more comfortable.  &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Because of its flexibility, faster development time and strong community supports, React Native has become a popular choice for developers and companies who want to build high-quality mobile apps while saving time, effort and cost .&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz5u9n1b5ojdzq49kbpq2.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz5u9n1b5ojdzq49kbpq2.webp" alt=" " width="780" height="496"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  History of React Native
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;When Facebook first wanted to bring its service to mobile phones, they didn’t build a native app like most big tech companies. Instead, they used a mobile website built with HTML5. At first, this seemed like a good idea, but over time it caused many problems, especially with performance and user experience. The app felt slow and didn’t work as smoothly as native apps. In 2012, Mark Zuckerberg openly admitted that this was a big mistake, saying that Facebook relied too much on HTML instead of native technology.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Learning from this, Facebook’s developers started looking for a better solution. In 2013, a Facebook engineer named Jordan Walke discovered a new way to create iOS user interfaces using JavaScript. This idea was exciting because JavaScript was mostly used for web development at that time. To explore this further, Facebook organized an internal hackathon to see how much of mobile app development could be done using JavaScript.&lt;/p&gt;

&lt;p&gt;This experiment led to the creation of &lt;strong&gt;React Native&lt;/strong&gt;. At first, it was made only for &lt;strong&gt;iOS&lt;/strong&gt;, but later Facebook also added support for &lt;strong&gt;Android&lt;/strong&gt;. In &lt;strong&gt;2015&lt;/strong&gt;, React Native was shared as an open-source framework so that anyone could use it.&lt;/p&gt;

&lt;p&gt;React Native quickly became popular among developers. In just a few years, many developers from around the world started contributing to it on Github. This fast growth showed that developers trust React Native and like using it to build modern mobile apps.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Make React Native unique ?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;React Native is different from tools like &lt;strong&gt;Cordova&lt;/strong&gt; and &lt;strong&gt;PhoneGap&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Cordova and PhoneGap mostly show a &lt;strong&gt;web page inside a mobile app&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Because of this, apps made with them can feel &lt;strong&gt;slow&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;React Native does &lt;strong&gt;not&lt;/strong&gt; use web pages inside apps.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr25c23ysq8o141mo49m5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr25c23ysq8o141mo49m5.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Who Should Learn React Native?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Beginners who want to start mobile app development.&lt;/li&gt;
&lt;li&gt;Web developers who already know JavaScript.&lt;/li&gt;
&lt;li&gt;Developers who want to build apps for both Android and iOS.&lt;/li&gt;
&lt;li&gt;Students looking to learn modern and in-demand development skills.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;React Native is beginner-friendly and a good choice if you want to build real mobile apps without learning many languages.&lt;/p&gt;

&lt;h2&gt;
  
  
  How React Native Works (Simple Explanation)
&lt;/h2&gt;

&lt;p&gt;React Native works by letting developers write mobile app code using &lt;strong&gt;JavaScript or TypeScript&lt;/strong&gt;. This code decides how the app looks and behaves. React Native then connects this code with the phone’s native system and turns it into real native components like buttons, text, and views. These components run directly on Android and iOS, just like normal native apps. Because of this, React Native apps feel fast, smooth, and truly native, while developers can still use one codebase for both platforms.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F54v9l30bz3wnae920hor.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F54v9l30bz3wnae920hor.png" alt=" " width="800" height="595"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;React Native is a great choice for beginners who want to start mobile app development. It lets developers build high-quality apps faster using a single codebase. Because it uses real native components, apps feel smooth and perform well. That’s why React Native is trusted by developers and companies all around the world.&lt;br&gt;
This is everything I’ve covered about React Native so far—its basics, history, and how it works according to my knowledge. If I missed anything important, feel free to comment below! I’d love to hear your thoughts and questions. In my next blog, I’ll continue with my BookBazaar project, where I left off, and cover things I couldn’t explain in this post.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That’s all for now. Good night, and happy coding! 🌙🚀&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>android</category>
      <category>reactnative</category>
    </item>
    <item>
      <title>I Started Building My First React Native App – BookBazaar</title>
      <dc:creator>Swyom Sanjog</dc:creator>
      <pubDate>Sun, 18 Jan 2026 17:47:40 +0000</pubDate>
      <link>https://forem.com/swyom_sanjog_4908464907cc/i-started-building-my-first-react-native-app-bookbazaar-aop</link>
      <guid>https://forem.com/swyom_sanjog_4908464907cc/i-started-building-my-first-react-native-app-bookbazaar-aop</guid>
      <description>&lt;p&gt;Hello everyone 👋&lt;br&gt;
I’m a Computer Science student who recently started learning React Native, and I decided the best way to learn is by building real projects.&lt;/p&gt;

&lt;p&gt;So today, I officially started working on my first app called BookBazaar 📚&lt;/p&gt;

&lt;p&gt;🤔 What is BookBazaar?&lt;/p&gt;

&lt;p&gt;BookBazaar is a book exchange mobile app where users can explore, share, and exchange books.&lt;br&gt;
The goal of this project is not just to build an app—but to learn React Native step by step.&lt;/p&gt;

&lt;p&gt;🧭 What I Learned Today&lt;/p&gt;

&lt;p&gt;Today, I learned how the navigation system works in React Native.&lt;/p&gt;

&lt;p&gt;I explored:&lt;/p&gt;

&lt;p&gt;How screens connect with each other&lt;/p&gt;

&lt;p&gt;How Stack Navigator manages screen flow&lt;/p&gt;

&lt;p&gt;How apps move from Splash → Login → Home&lt;/p&gt;

&lt;p&gt;Instead of just watching tutorials, I learned this by actually building the navigation inside my project, which made the concepts much clearer.&lt;/p&gt;

&lt;p&gt;🧠 Challenges I Faced&lt;/p&gt;

&lt;p&gt;At first, navigation felt confusing:&lt;/p&gt;

&lt;p&gt;Too many screens&lt;/p&gt;

&lt;p&gt;Errors while navigating&lt;/p&gt;

&lt;p&gt;Understanding stack behavior&lt;/p&gt;

&lt;p&gt;But after debugging and testing step by step, things started making sense.&lt;br&gt;
This experience reminded me that errors are part of the learning process.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftw0ec5rh6zgugflhbbj0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftw0ec5rh6zgugflhbbj0.png" alt=" " width="800" height="360"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhffatsf2zzl592o9fajp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhffatsf2zzl592o9fajp.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🚀 What’s Next?&lt;/p&gt;

&lt;p&gt;Next, I plan to:&lt;/p&gt;

&lt;p&gt;Improve the UI&lt;/p&gt;

&lt;p&gt;Add Bottom Tab Navigation&lt;/p&gt;

&lt;p&gt;Work on authentication &amp;amp; data handling&lt;/p&gt;

&lt;p&gt;I’ll keep sharing my progress as I build BookBazaar.&lt;/p&gt;

&lt;p&gt;🤝 Let’s Connect&lt;/p&gt;

&lt;p&gt;If you’re also learning React Native or building your first app:&lt;/p&gt;

&lt;p&gt;Drop your suggestions 💬&lt;/p&gt;

&lt;p&gt;Share your experience&lt;/p&gt;

&lt;p&gt;Follow me for more updates on my dev journey 🚀&lt;/p&gt;

&lt;p&gt;Thanks for reading! 😊&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>learning</category>
      <category>programming</category>
      <category>buildinpublic</category>
    </item>
  </channel>
</rss>
