Skip to content
Journal

Mobile

7 posts
  1. Push Notifications, Deep Linking and Device APIs in React Native: The Seams Nobody DocumentsPush notifications, deep linking and device detection each have a tidy quick-start page. In production they are one feature, and the bugs live in the seams: the cold-start race between a notification tap and a router that has not mounted yet, the channel you cannot edit after creation, and the URL you should not trust just because it arrived in a push payload.EngineeringReact Native11 min
  2. Ads and One-Time Purchases in React Native: A Working Guide to RevenueCat, AdMob and the Failures That Cost Money SilentlyThe free app with a remove-ads purchase is the most common indie model there is, and almost every guide to it stops at the SDK calls. This is the rest: consent ordering, entitlement resolution, interstitial pacing, and the four ways an integration earns nothing while looking perfectly healthy.EngineeringReact Native16 min
  3. Automating App Store and Play Submissions: What the APIs Will Do, What They Silently Refuse, and the Guideline That Punishes SuccessShipping thirty-four apps through two stores from a terminal taught me that the build is the easy fifth of the problem. The hard parts are a write that returns 200 and stores nothing, a screenshot rejected after it uploads, and a spam guideline that gets stricter the better your automation works.AutomationDevOps13 min
  4. Autonomous CI/CD: Letting an Agent Triage the Build Without Letting It ShipMobile release engineering is mostly the same six failures on repeat — a provisioning profile, a Gradle version, a flaky simulator. That is exactly the shape of work an agent is good at, provided you are ruthless about which half of the pipeline it can touch.AutomationCI/CD7 min
  5. Swift 6 Strict Concurrency and Kotlin Multiplatform: Two Ways to Not Have a Data RaceSwift 6.2 inverted its concurrency defaults — main actor by default, escape on purpose — and it changed migration from a slog into something tractable. Meanwhile KMP shares the logic that would otherwise be written twice. Here is how the two fit together.SwiftConcurrency6 min
  6. Local-First Sync Engines: CRDTs, SQLite and Where the Write Boundary GoesOffline-first is not a caching problem, it is a distributed systems problem you moved onto a phone. The real decision is not which CRDT library — it is where writes become authoritative, and every sync engine answers that differently.ArchitectureEngineering8 min
  7. React Native's New Architecture: JSI, Fabric and the Bridgeless TurboModuleThe bridge is gone — removed outright, not deprecated. What replaced it is a set of C++ abstractions with real performance characteristics, and a new generation of native modules that compile straight to JSI bindings.ArchitecturePerformance7 min