All Articles
Quietly Dialing Back Heavy Work When the Device Gets Hot or Enters Low Power Mode
How to watch ProcessInfo's thermalState and Low Power Mode and degrade heavy work in stages when the device is hot or the battery is low, with working Swift code.
When EAS Update Ships but the Bug Won't Die — Why OTA Stalls Silently, and How I Operate Around It
EAS Update can succeed and still fail to reach a slice of your users. These are field notes on runtimeVersion drift, updates that publish but never get adopted, and choosing the right rollback — with the instrumentation that actually helped on my Rork apps.
Pushing Rork Max's AI Beyond Vibe Coding — Patterns That Actually Improve Implementation Quality
A deep-dive on using Rork Max as an implementation partner: prompt patterns, context management, choosing between plain Rork and Rork Max, building without burning credits, and verifying AI-written native code before App Store submission — drawn from solo indie experience.
Building a Breathing-Paced Haptic for a Meditation App with CoreHaptics
Canned expo-haptics buzzes can't produce the swell of a breath. Here is how to call CoreHaptics continuous events and parameter curves from an Expo native module to build a haptic synced to 4-7-8 breathing, with working Swift and TypeScript code.
Receiving On-Device AI Output as Typed Data with Foundation Models Guided Generation
How to receive Foundation Models output as typed Swift structs instead of free text, with working code for Guided Generation and Tool Calling on-device.
The Post You Wrote Offline Shows Up Twice — Designing a Send Outbox That Survives Retries
Persisting a queue and replaying it isn't enough — a lost response turns into a duplicate write. Here's a send outbox with idempotency keys, temp-to-server ID remapping, and poison-message quarantine, in working TypeScript.
On-Device Translation in a Rork Max App with iOS 18 — Free, Offline, Multilingual
Add free, offline, real-time translation to a Rork Max Swift app using the iOS 18 Translation framework. Covers checking language availability, batch translation, and avoiding empty results — all with working Swift code.
What Your App Should Do When Someone Turns On Reduce Motion — A Motion-Respecting Layer in Expo
When a user enables iOS Reduce Motion or Android Remove Animations, how should your app respond? Combine AccessibilityInfo with Reanimated's ReduceMotion to replace heavy motion with a calmer alternative instead of simply switching it off.
DAU Went Up but Retention Didn't — Rebuilding Gamification That Actually Sticks in Rork Apps
Points, badges, and leaderboards lift DAU, but retention is a different story. Field notes on a server-authoritative point ledger, streaks that forgive, and leaderboards that don't crush newcomers — with working code for Rork apps.
Why Your Prices Show as “¥1234” on Some Phones — A Formatting Layer That Doesn't Trust Intl Alone in Expo
Same code, yet one device shows “¥1,480” and another “¥1480.” In Expo / Hermes, Intl leans on each device's locale data, so output can drift by OS and engine. Here is a resilient formatting layer that centralizes currency, number, date, and timezone handling and falls back gracefully where Intl is incomplete — with working code.
Why Wallpapers Look Dull on Device: Taming Display P3 in the Delivery Pipeline
The same wallpaper looked dull once set on device. The culprit was a mix-up between wide-gamut Display P3 and sRGB. Beyond embedding profiles, here is how to tell whether the pixels are truly wide-gamut, a pre-delivery gate script, and the Android wide-color story, across six wallpaper apps.
The Private Screen That Lingers in the App Switcher — Hiding the Snapshot iOS Takes the Moment You Background Your App
When you send a React Native app generated by Rork to the background, iOS photographs the current screen for the App Switcher and writes it to disk. Journals and personal input screens linger there in plain sight. This walks through the iOS privacy overlay (why inactive, not background), Android's FLAG_SECURE, scoping it to sensitive screens only, and screenshot detection — all in working code.