Vibe code to app stores
Which Guide Should I Use?
4 min read
You built something with a vibe coding tool and you want it on the Play Store or App Store. The guide you need depends on what kind of app you have — and if you're not sure, this page will help you figure it out.
Step 1: What tool did you use?
Bolt.new, Lovable, bolt.diy, v0, Replit, or similar — these tools generate web apps. Your project is HTML, CSS, and JavaScript running in a browser. Go to Web Apps — Capacitor. ✓
A tool that generated a Flutter project — your project has a pubspec.yaml file and Dart code (.dart files). Go to Flutter.
A tool that generated a React Native or Expo project — your project has an app.json or app.config.js and imports from react-native. Go to React Native & Expo.
Not sure? Keep reading.
Step 2: Look inside your project
Download or export your project and unzip it. Open the folder and look for these files:
| If you see this... | You have this | Use this guide |
|---|---|---|
package.json with a "build" script that outputs HTML | A web app | Web Apps — Capacitor |
index.html at the root with no build step needed | A web app | Web Apps — Capacitor |
pubspec.yaml and .dart files | A Flutter app | Flutter |
app.json or app.config.js and imports from react-native | A React Native / Expo app | React Native & Expo |
If you still see package.json but you're not sure if it's a web app or React Native app, open it and look at the "dependencies" list:
- Contains
react-nativeorexpo→ React Native & Expo guide - Contains
react,vue,svelte,vite, ornext(but notreact-native) → Web Apps guide
What's the difference anyway?
Web apps run in a browser. Vibe coding tools like Bolt.new produce web apps — the output is HTML, CSS, and JavaScript. To publish a web app as a mobile app, you wrap it in a native shell using Capacitor, which embeds your web app in a full-screen WebView. The result works, but it looks and feels exactly like your website does on mobile. If your site is mobile-friendly, the app will be too.
React Native apps are written in JavaScript/TypeScript but render native UI components — not a browser. The result looks and feels more like a native app. Vibe coding tools that target React Native generate .tsx files that import from react-native, not from the web platform.
Flutter apps are written in Dart and compile to fully native code. Flutter has its own rendering engine. The result is the most "native-feeling" of the three, but it's a completely different programming environment. Vibe tools that target Flutter generate .dart files.
Which approach is best?
For most vibe-coded apps, Capacitor (web app) is the right starting point. It's the fastest path from "I have a Bolt.new project" to "it's on the Play Store," and it requires no code changes to your existing app.
The trade-offs:
| Web Apps (Capacitor) | React Native | Flutter | |
|---|---|---|---|
| Works with Bolt.new / Lovable output | Yes | No | No |
| Feels native | Depends on your CSS | Yes | Yes |
| Build complexity | Low | Medium | Medium |
| Apple App Store approval | Harder (needs native features) | Easier | Easier |
| Google Play approval | Easy | Easy | Easy |
On Apple's App Store: Apple rejects plain WebView wrappers that don't add native functionality beyond what a website provides. If you're targeting iOS, you'll need to add at least some native integration (push notifications, biometric login, etc.) to pass review. See the Android & iOS on macOS guide for details.