Astrology app shipped to both stores in one day
Prachyam Studios needed App Store and Play Store presence for their Rishi Talks astrology brand without rebuilding the existing WordPress site as a native app. A thin native shell delivers better mobile UX — no browser chrome, native splash screen, proper back-navigation — while all content stays managed through WordPress. The entire app was designed, built, debugged, and shipped within a single day: three commits, both Android APK and iOS builds confirmed working on 2025-10-27.
The app loads https://rishi-talks.com in a full-screen react-native-webview with no browser chrome. Beyond the basic wrapper, it implements a typed cross-platform offline-state machine, automatic retry, splash screen held to first page load, link confinement, and a custom user-agent for analytics segmentation. A Gamezop HTML5 game revenue-share integration — proposed by Karanveer in a Prachyam revenue meeting — was added to both the WordPress site and the mobile app, creating a new ad revenue channel with zero game-development cost.
The constraint was speed: the website was already live and Prachyam needed app store presence quickly. The technical challenge was building a wrapper that felt native rather than a browser tab — handling offline states gracefully, managing Android's hardware back button, preventing the white-flash between splash and first page load, and keeping all navigation within the app rather than leaking to the system browser.
The app is a single Expo SDK 54 screen (app/index.tsx) using Expo Router 6 for file-based routing. react-native-webview 13.15.0 handles rendering with React Native 0.81.5 and React 19.1. The New Architecture is enabled (newArchEnabled: true) along with the React Compiler experiment. EAS Build provides three profiles — development (dev-client), preview (internal APK), and production (auto-increment for store submission). No backend or database exists in-app; cacheEnabled: true on the WebView uses the system HTTP cache. The offline-detection layer classifies errors using a matrix of iOS numeric codes (-2, -1009, -1003) and Android description string-matching, isolating genuine connectivity failures from HTTP errors or in-page JS errors.
Holding the splash screen to onLoadEnd. SplashScreen.preventAutoHideAsync() is called immediately and SplashScreen.hideAsync() fires only when the WebView's first page load completes, eliminating the flash of unstyled content that a timer-based approach cannot avoid.
Typed error matrix instead of a single catch-all. Checking nativeEvent.code against known iOS values and string-matching Android descriptions means HTTP 404s and in-page JS errors do not falsely trigger the offline screen — only genuine connectivity failures do.
OfflineScreen replaces the render tree, not overlays it. Unmounting the WebView while offline prevents background reconnect attempts and WebView resource consumption, and makes the offline/online transition a clean state flip rather than an overlay toggle.
Gamezop over in-house games. Prachyam had an audience but no game-development capacity. Gamezop's revenue-share model required only a JS embed on the WordPress site, which passes through the WebView transparently — zero ongoing engineering cost, new revenue line.
Both Android and iOS builds were confirmed working on the same day the project started. The EAS project was handed to Prachyam Studios ready for store submission. The Gamezop integration added an ad revenue channel to both the website and the app at no development cost beyond the time to embed the SDK. The typed offline-detection approach proved robust enough that the same pattern was noted as a default for any future WebView wrapper project.
commits, all same day
network error codes handled cross-platform
game-dev cost for new revenue channel
Expo SDK 55 React Native app with Reanimated 4, self-hosted Supabase, and a custom OdometerText animation
Revenue-share HTML5 game hub embedded into the Prachyam OTT platform via Flutter WebView and React
Did this resonate?