Blog

Notes on mobile engineering

Field notes on React Native, shipping to the App Store & Google Play, and building apps that hold up in production.

6 min read

Offline, API Down, or Slow: Show Saved Data and the Right Message

Why connected is not reachable, why reachable is not your API being up, how to write a safe NetInfo banner, and how to seed TanStack queries from disk using initialData.

6 min read

One Notification Tap Opened the Screen Twice

Why cold starts deliver incoming URLs twice through getInitialURL and the url event listener, how to implement a consume-once guard, and how to queue intents until navigation is ready.

7 min read

Why Customers Came Back as Guests, and What Logout Must Remove

Why bare redux-persist migrations drop auth state on every boot, how to delete deprecated keys safely, and how to build a user state reset registry for clean sign-outs.

7 min read

Why the Cart Quantity Jumps Back After You Tap +

Why rapid stepper taps create out-of-order network race conditions, how to implement dual-state pending tracking, and how to collapse multiple taps into a single confirmed save in React Native.

10 min read

Attach a Photo Without a Dead Button or a "No File" Error

How to handle all four permission states in React Native, guide blocked users to Settings, support Android 13 READ_MEDIA_IMAGES, and configure Axios multipart boundaries cleanly.

9 min read

Why Save Kept Spinning: Request Timeouts and Offline States

Why Axios defaults to waiting indefinitely, how to scope per-request timeouts to best-effort lookups, and how to build fallback states so network delays never freeze your checkout.

11 min read

Why My Form Forgot the Input and Sent It Twice

How to structure form state with Formik and Yup, display field-level validation errors, retain typed inputs across API failures, and prevent duplicate submissions with shared button guards and idempotency keys.

9 min read

The Android Update That Broke My Form Layout

Why Android 15 edge-to-edge enforcement ignores adjustResize, how one native values-v35 resource rescues your forms, and how to migrate to inset-aware layouts before Android 16.

7 min read

My App Froze Without Crashing: Two Modals at Once

Understand UIKit presentation conflicts in React Native, why setTimeout fails, and how to queue modal presentation safely with useSyncExternalStore.

9 min read

Why My Home List Rendered Everything at Launch

A FlatList item can contain a whole section. Control initial work, diagnose repeated row renders, and apply memoization where it helps.