- Home
- Skills
- Mobile Development
- New App from a Fork (Flutter & React Native)
More screenshots
Works with the AI tools you already use
New App from a Fork (Flutter & React Native)
Start a new Flutter, React Native or Expo app from one you already have, cut every Firebase, AdMob, EAS and bundle id it inherited, and carry it to TestFlight and Google Play.
$15
New App from a Fork (Flutter & React Native)
Example session with this skill installed
Make a new app called Chore Jar from my-app-template. It's a simple counter for kids' chores.
- Read your context and instructions
- Compiled the new app from
What the skill printed
The residue check, run straight after the copy and before the rename:
Scanned 208 files in ~/apps/chore-jar
Tokens: basic-app, basicApp, BasicApp, basicapp, com.example.basicapp.RunnerTests, 123456789012, ca-app-pub-0000000000000000~1111111111, ca-app-pub-0000000000000000~1111111111
FAIL '123456789012' x12
android/app/google-services.json:3 "project_number": "123456789012",
android/app/google-services.json:10 "mobilesdk_app_id": "1:123456789012:android:a1b2c3d4e5f6a7b8c9d0e1",
firebase.json:7 "appId": "1:123456789012:android:a1b2c3d4e5f6a7b8c9d0e1",
firebase.json:14 "appId": "1:123456789012:ios:a1b2c3d4e5f6a7b8c9d0e1",
firebase.json:23 "android": "1:123456789012:android:a1b2c3d4e5f6a7b8c9d0e1",
... 7 more
FAIL 'basic-app' x15
.firebaserc:3 "default": "basic-app"
android/app/google-services.json:4 "project_id": "basic-app",
android/app/google-services.json:5 "storage_bucket": "basic-app.firebasestorage.app"
firebase.json:6 "projectId": "basic-app",
firebase.json:13 "projectId": "basic-app",
... 10 more
note 'basic-app' x1
CLAUDE.md:22 `lib/firebase_options.dart` points at a Firebase project alias (`basic-app`)
FAIL 'basicApp' x1
scripts/rename_app.sh:30 readonly OLD_CAMEL="basicApp" # iOS test target bundle id
FAIL 'basicapp' x15
android/app/build.gradle.kts:20 namespace = "com.example.basicapp"
android/app/build.gradle.kts:31 applicationId = "com.example.basicapp"
android/app/google-services.json:12 "package_name": "com.example.basicapp"
android/app/src/main/kotlin/com/example/basic_app/MainActivity.kt:1 package com.example.basicapp
ios/Runner.xcodeproj/project.pbxproj:521 PRODUCT_BUNDLE_IDENTIFIER = com.example.basicapp;
... 10 more
note 'basicapp' x1
scripts/release_android.sh:8 # - Google Play Console app created with package com.example.basicapp
FAIL 'ca-app-pub-0000000000000000~1111111111' x1
android/app/src/main/AndroidManifest.xml:32 android:value="ca-app-pub-0000000000000000~1111111111" />
FAIL 'ca-app-pub-0000000000000000~1111111111' x1
ios/Runner/Info.plist:28 <string>ca-app-pub-0000000000000000~1111111111</string>
FAIL 'com.example.basicapp.RunnerTests' x3
ios/Runner.xcodeproj/project.pbxproj:539 PRODUCT_BUNDLE_IDENTIFIER = com.example.basicapp.RunnerTests;
ios/Runner.xcodeproj/project.pbxproj:558 PRODUCT_BUNDLE_IDENTIFIER = com.example.basicapp.RunnerTests;
ios/Runner.xcodeproj/project.pbxproj:575 PRODUCT_BUNDLE_IDENTIFIER = com.example.basicapp.RunnerTests;
FAIL = rename it. regen = rerun the generator / pub get / pod install. note = docs or a comment; fine if it names the parent on purpose, stale if it describes the parent as this app.
Every FAIL line is a value the copy still shares with its parent.
Connects securely to your tools. The creator never sees your data.
About this skill
When you copy one of your Flutter, React Native or Expo apps to start a new one, the copy keeps the parent's Firebase project number, AdMob ids, bundle ids and sign-in client ids, and nothing warns you. The new app's crashes and analytics land in the old app's console, and its ads earn against the wrong app, while the analyzer is clean and every test passes.
This skill gives Claude Code an order to work in and scripts that check each step.
What it does
- Asks what it needs before starting: the name, where the art comes from, whether there are ads or coins, and anything touching the camera or children's data.
- Helps you choose which app to fork from, and warns against forking a fork (a rename script tuned for the parent can rewrite nothing in the grandchild and still print success).
- Copies the parent's working tree into a new folder and commits it. The parent is never written to.
- Prints the identity the parent's files actually carry, so the rename uses the values those files hold.
- After the rename, finds every leftover of the parent's identity in the fork, file names included.
- Fails if the fork shares any Firebase, AdMob, Shorebird, sign-in or bundle id with any other app in your folder.
- Diffs
flutter analyzeagainst the parent by lint name, so the baseline is a delta. - Replaces the feature, gives the app its own look, and runs it on a simulator so you see it working.
- Walks the finishing list in order: icon and splash, polish, perf, app-similarity, listing-accuracy, ship-ios, play-release.
React Native and Expo
The same steps work for React Native and Expo apps. The copy skips node_modules, Pods, .expo and build output, and the residue and hygiene checks know the leftovers specific to those projects: the parent's EAS projectId in app.json, the expo-updates URL, the ascAppId in eas.json, the scheme, the Android applicationId and Kotlin package folders, iOS target and bundle id, Firebase files and the AdMob app ids in the app.json plugin config. The baseline diff uses tsc and ESLint counts by rule instead of flutter analyze.
What you need
Claude Code, Python 3.9+, git, and Flutter or a React Native / Expo project with its node_modules installed. No packages to install. Apps with no Firebase, ads or Shorebird work too: those checks find nothing to flag and the steps are skipped.
What it won't do
It doesn't create Firebase projects, AdMob apps or store records; those are console steps on your accounts, and it stops and tells you when one is due. It doesn't ship a rename script; it uses yours (or a pub package such as package_rename) and then proves the rename worked.
Part of the Indie Mobile Release Pipeline (Flutter & React Native) bundle ($39 for four skills: new-app, bug-hunt, ship-ios, daily-update).
I build small apps on my own and have a shelf of them on the App Store and Google Play. Each rule in this skill comes from a fork of mine that shipped pointing at its parent.
How to use
Skills on Agensi run inside your AI agent. Copy the prompt, paste it into your agent, and it connects to Agensi and installs this skill for you. If a payment is needed, your agent shows it to you first.
Reviews
No reviews yet
Be one of the first to try it. Every listed skill passes our trust checks below.
Security scanned
Passed our 8-point scan before listing
Fresh listing
Recently published to Agensi
30-day refund
Not a fit? Get your money back
Trust & safety
Security scanned
Verified clean 4 days ago
- Passed all security checks, Safe to install