RORK LABJP
PLAY — Google Play's target API level 36 requirement took effect yesterday, August 31. From today, new apps and updates must target Android 16VISIBILITY — Apps still on API 35 stay listed but disappear for users on newer Android versions. No error is raised; new installs simply fade, which makes the change easy to missEXTENSION — If you missed the deadline, an extension through November 1, 2026 can be requested in Play Console — best filed alongside a concrete migration planAPPLE — On the Apple side, the event lands September 9 and iOS 27 is reported to ship September 14. Testing generated apps on iOS 27 hardware before release week is time well spentEXPO — Expo released expo-paste-input on August 28, a native module that brings image, GIF, and sticker paste to React Native TextInputEAS — EAS Observe reached general availability on August 20, putting crash and performance monitoring on the same EAS platform as builds and updatesPLAY — Google Play's target API level 36 requirement took effect yesterday, August 31. From today, new apps and updates must target Android 16VISIBILITY — Apps still on API 35 stay listed but disappear for users on newer Android versions. No error is raised; new installs simply fade, which makes the change easy to missEXTENSION — If you missed the deadline, an extension through November 1, 2026 can be requested in Play Console — best filed alongside a concrete migration planAPPLE — On the Apple side, the event lands September 9 and iOS 27 is reported to ship September 14. Testing generated apps on iOS 27 hardware before release week is time well spentEXPO — Expo released expo-paste-input on August 28, a native module that brings image, GIF, and sticker paste to React Native TextInputEAS — EAS Observe reached general availability on August 20, putting crash and performance monitoring on the same EAS platform as builds and updates
Articles/Dev Tools
Dev Tools/2026-07-14Advanced

Designing Seams That Survive AI Regeneration in Rork

Every follow-up prompt to Rork can quietly wipe out logic you wrote by hand. Protecting it with prompts is a patch, not a fix. Here is how to separate generated code from code you own, and draw a boundary that regeneration cannot reach, with working Zustand and service-layer examples.

Rork547Architecture22Design5State Management7Zustand4Long-term Maintenance2React Native234

Premium Article

Right after Rork added a third screen for me, the billing check I had hand-written the week before was simply gone. The new screen looked clean. But underneath it, the branch that was supposed to hide ads from paying users had reverted to a generic default.

This happens on almost every follow-up prompt. The well-known workaround is to append "don't change the existing logic" to your instructions, and I leaned on it for a long time too. But there is a ceiling on what a prompt can protect. Rork reads the whole codebase each time and rebuilds the screen into whatever it judges optimal. The move that actually holds is to get the thing you want to protect out of the prompt entirely, and into the design instead. That shift, and how to implement it, is what this article is about.

Stop protecting with prompts, protect with a boundary

The reason your code reverts on a follow-up is the very nature of generative AI: it regenerates the whole thing, not a diff. I cover the mechanics in "Fixing the code-overwrite problem in Rork", where the conclusion was to spell out the protected scope in your prompt. For day-to-day work, that is enough.

The trouble is that the list of things worth protecting grows as your app grows. Billing checks, data fetching and shaping, network retries, local-storage consistency. Re-listing all of that in every prompt is not realistic, and the one time you forget an item, it disappears.

So flip the approach. What the AI regenerates is the screen. Then move the logic you care about out of the screen. Leave only the call site behind, and put the real implementation in a separate file. However many times the AI rebuilds the screen, as long as that one call survives, the implementation stays untouched.

Drawing the boundary in the design means physically splitting the caller and the callee into different files and different directories. It is protection by structure, not by the politeness of your wording.

What the AI owns, what you keep

Start by splitting the code into two layers.

LayerOwnerContentsRegeneration
PresentationAI (Rork)Screens, layout, styling, navigationRebuild as often as you like
DomainYouState, data fetching, billing checks, business rulesOff-limits to the AI

The dividing line is simple. If it does not hurt when it gets rebuilt, give it to the AI; if a rebuild would hurt, keep it yourself. Button position and color belong to the former. A purchased-or-not check, where a mistake maps straight to money or trust, belongs to the latter.

This distinction is not about good code versus bad code. It is about how often something changes and how much it hurts when it breaks. Appearance changes often and forgives small breakage you can fix in a minute. Business rules change rarely and, when they break, quietly leak losses. So you protect them differently. That is where the design begins.

Thank you for reading this far.

Continue Reading

What follows includes implementation code, benchmarks, and practical content we hope you'll find useful. This site runs without ads — server and development costs are supported entirely by members like you. If it's been helpful, we'd be truly grateful for your support.

WHAT YOU'LL LEARN
The two-layer rule for AI-owned vs. you-owned code: let screens be rebuilt, keep the domain safe
A boundary regeneration cannot reach (service layer, Zustand store, type contract) in copy-ready code
The directory layout and prompts that let you say rebuild just this screen without fear
Secure payment via Stripe · Cancel anytime

Unlock This Article

Get full access to the rest of this article. Buy once, read anytime. This site is ad-free — your support goes directly toward keeping it running.

or
Unlock all articles with Membership →
Share

Thank You for Reading

Rork Lab is ad-free, supported entirely by members like you. We publish practical guides daily with implementation code, benchmarks, and production-ready patterns. If you've found it useful, we'd love to have you on board.

  • Copy-paste ready implementation code
  • New advanced guides published daily
  • $5/mo or $15 for lifetime access
View Membership →

Related Articles

Dev Tools2026-08-01
Every Experiment Kept Landing on the Same Devices: Hash Choice and Salt Position, Measured Across a Million IDs
On-device experiment assignment looked fine in isolation, then collapsed the moment two experiments ran side by side. Here is what one million IDs revealed about four hash functions, why the culprit was the concatenation order rather than hash quality, and the implementation I settled on, with the measured numbers.
Dev Tools2026-07-24
Collapsing Duplicate Requests Into One: A Reference-Counted Single-Flight Layer
When several components fire the same API call at launch, you get a burst of identical requests. Here is a single-flight layer that shares one in-flight promise instead: how to build the key that decides the folding, the trap of handing out a failed promise forever, the trap of one caller's abort cancelling everyone, and the test that keeps it all from regressing, with the real network numbers alongside.
Dev Tools2026-07-24
Resolving App Config in Three Layers: Merging Defaults, User, and Remote With Bounded Overrides
A single type-safe layer that merges compiled defaults, user preferences, and remote config. So a broken remote value never takes your app down, each key gets its own override strength, plus schema validation and range clamping, built from a real production incident.
📚RECOMMENDED BOOKS
Build a Large Language Model (From Scratch)
Sebastian Raschka
LLM Dev
Prompt Engineering for LLMs
Berryman & Ziegler
Prompting
AI Engineering
Chip Huyen
AI Eng
* Contains affiliate links
See all →