Wow. I mean, just wow. I mean, I don't normally gush, but this genuinely has me very excited. [music] You see, Replet has been absolutely knocking out of the park lately with rapid improvements to their autonomous agent version two, three, uh, their self-contained hosting, and now their ability to p publish mobile apps directly to the app store. It makes it a really compelling place to go to vibe out your next app. Now, it's been a hot minute since I last checked out Replet. So, I wanted to see whether I could actually get a convex project working inside of it. And it turns out, yeah, you can really easily. And not just that, I was genuinely excited about how easy it was to then get my working app directly to the app store and then also have it all powered by that real time convex goodness that we're all used to instead of the database that's baked into Replet. I think this like idea to app to app store u ability is just a massive unlock for many people, me included, that have wanted to build mobile apps but have been kind of daunted by the complexity around mobile development. So once you grab yourself a lovely cup of tea, drop me a like and sub. I'm going to show you what's involved in taking your app from Idea directly to the app store using Replet. All right. So, to get started, you're obviously going to need a Replet account. So, make sure you get that once you've logged in, created the account. This is what you can see the homepage. And also just note that you are going to need a Replet paid account of some sort. So, I've gone for the Replet core, which is $20 per month. You need that um because a you're going to need the credits for the agent probably. Um but you're also going to need it to be able to run convex in a background task, and the agent told me that it needs that for that. So now let's go ahead and build an app. So you can click here and select mobile app now and we can put in a prompt. So I've put this prompt in before. Um it's very important to say mobile app in part of the prompt. So it's please build a beautiful mobile app for tracking daily habits. I would like to store all my data in a comics database. It's also important to say this comics database part otherwise it will use the replet database which is a posgress database built into replet. Let's go ahead and start this. All right. So, it's now going ahead and constructing things for us. Uh, what we're going to want to do is we're going to want to connect uh convex to this. Now, we don't currently have an integration directly for replet. It would be nice if we had that, and I'm actually going to be working on that behind the scenes. So, but right now what we can can do though still is we can open up a shell window and we can do npx convex dev. And when we do that, npx is going to say, can we install that? I'm going to say yes. And then it's going we're going to get our usual convex uh welcome screen, which the first time you run it, we're going to say I'm going to want to log into my existing account. This is my device name. Open the browser. Yes, please. and we're going to say, "Yep, that's me." Okay, close that. And then it's going, that's it. And then we're going to say, "Okay, let's create a new project for this project." We're going to put it into mine. We're going to call this replet habits and we're going to use the cloud. Okay. So, while this is building, let's just have a little look at the uh Replet UI here. So, it's upgraded a little bit since the last used it. So the uh agent is big bar on the left hand side which you're used to from like bolt or level or something like that. And then we've got our files on the right hand side here. So it's got drizzle and stuff which we aren't going to need obviously because we're using convex. So drizzle is an OM for Postgress and it's looks like it's starting to write convex files for us. Let's have a look at the schema. So we've got habits and we've got completions and it's added indexes. Quite nice. Now, with Replet as well, you could also choose to do a plan mode instead of just a build mode. Obviously, it's just for this demo. We're trying to get this done quickly, so we're just going to build. But if you're going to build this yourself, I would recommend doing a plan mode to think through your problem and what you want to build first before you dive straight into it. Okay, so it's now finished. Uh, it's built a beautiful habit tracking app with a convex integration. It includes stuff, lots of stuff. And now it's telling me to go to Convex dev, create an account, and etc., etc. It doesn't know that I'm actually running it. I already have done that step and it's asking me for the secret uh for the the public convex URL. Now, I might be able to tell it that I'm already running it in a shell and it might work, but I'll just keep it happy uh and go into here and we'll go into the end.local which the convex dev process creates for us. Grab the URL from here and stick it into here and click continue. And then once it's done that, it should be able to then start up the preview for us to have a look at the app. Oh, I just want to note as well, like I love this when you hover over this um the little note here, it tells you how much it work it costs for that six minutes of [music] work. $1.91. So hopefully we'll get an app working for less than $2. Okay, so it's finished. It says, does everything look okay? But the app preview says something went wrong. So we can click this uh information here and it says uh that have we forgotten to run npxdev or npx comx deploy. Now this happened to me before as well and I think it's something to do with this this dev process here not picking up the fact that we started the dev process before the uh package json was built. I think we actually got an error up here about you know here. So what I found to make this work was to cancel that and just start it again. And there we go. You can see now it's created the indices for the tables, upload the functions, [music] and if we go back to this the preview and reload, there we go. We get our app. Now, it didn't do this time, but in previous runs, um it's done. It's actually uh run through the app itself in a little preview here, you can see what it did. It actually went through and uh used the app and made sure that all the functionality worked for me. And you can actually see the thinking it was going through as it was doing this. It's actually really really cool that it does this testing out the app for you [music] uh without you having to do it yourself. I thought that was a very very cool feature. But anyway, so we have our uh habit tracking app here. So we can add a habit. Okay. Uh let's add an icon on this. Drink water and we can save it and we get our habit up there. Very cool. Now as this is an expo app, we also get on the right hand side here this preview for us. So, I can take my phone, my camera, and hover over that. Tap that, and it opens up in the Expo app. And then it opens up the project for us. Downloads it, bu bundles it. And there we go. We've got now got our native mobile app running using XP Expo Expo Go preview. And we can see that we have drink water on there. And if I tap it, you can see that it checks. And thanks to Convex, everything is synced up. So on the preview uh of our web version, it also syncs and we can add a new task in here uh subscribe and we can have a smiley face and that save that and we'll see that it shows up subscribe on there. Very nice. Wonder what insights does. Oh wow, cool. That's kind of cool. But the app's not important for this demo, but it's h it's very very nice. So let's say we're now happy with our app. We want to take it to the app store. How do we do that? Well, we see this section here, ready to publish to app store. So, we can just click that and it opens up a new tab. You could also reach that by clicking plus icon here and typing publish. But, we're going to just go to the publish tab here. And we can see that it's given us a nice little app icon. So, that was actually one thing that it does in here as well, which is quite nice. Um, [music] I can't find it now, but it's it creates a um creates the images for you, which is very very nice. So it must use a different model to create these images. But anyway, so we've got an icon here and and we can see the primary URL for the app is this habit tracker convex and it's going to be on this.replet.app domain. Now you can buy domains directly through replet as well, which is nice. So I could have this as like habittrackerconvex.com if we wanted to. But for now, we'll just leave it on this free domain. And what we're going to want to do is uh leave this public. But we are what we are going to want to do is go into adjust settings. We're going to want to change the deployment type from this autoscale which is recommended. We don't need it because we don't need a an express backend because we don't need to do any server side functions or anything like that because we're using convex. All our serverside functions are on convex. But we do want to do is just select static pages. Then what we want to do is go down to this build command. And we don't need this stuff in here because we don't need the server again because our server is convex. we want to do is put in here npx convex deploy-command npx expo export platform web. So this npx convex deploy is standard if you've ever done a [music] um CI build for convex. What this is going to do is it's going to deploy our convex code. So the stuff in our convex directory and then it's going to uh do this part inside the quotes which is it's going to actually do the building of the expo web project. So then what we're going to want to do is we want to set this to dist. So once this is built, it's going to be pushed into this disc directory. And so basically then telling replet that this is where the website is going to live, the web version of this mobile app. Now to be able to push our convex code, we need to be able to give the replet build process the permission to do so. So, we're going to want to do is open up our comics dashboard and go to our project which we created, the replet habits one. We're going to want to change our deployment to the production one which is uh Rosie Otter 666. Jeez. Uh go to settings and then [music] uh we're going to want to go to down here deploy keys and we're going to create production deploy key. We'll call this replet and we want to copy that key. And then we're going head back into replet and we go to deployment secrets and we're going to say add one and it's going to be it's going be convex deployment key and paste in the key there. Now there's one more thing we want to do. So if we were to build this right now it would work our web version will point to rather than our our development um deployment which has got our drink water and subscribe on there. It would point to our production database which is good. We want to separate obviously our production data from our local development data [music] and so the web version would but when we build for mobile it won't. So one extra step we need to do to build for mobile using our production um uh deployment rather than our local one is clone our env.local file. So let's just create a let's duplicate this file. We're going to call it env.production.local. So this is um the way the end works. It's going to basically when we're building for production, it's going to pick up the the values in here rather than the ones in this one. Well, it's actually going to overwrite it. So we go into into open this up. We don't need this one, but we do want to change this deployment here from our Groovy Squid, which is our development deployment to being our production one, which is our Rosie Otter 666. So we go in here and we just replace that. Okay. Now we can go back to our publishing section. And I think we're ready to go. So click publish. So it's going to go through this provisioning, security scan, building, bundling, promote step. So um [clears throat] as far as I understand it, this is only doing the web version of the Expo app. So that's this separate build process for building the native mobile version, which you'll see in a minute. Okay. So there you go. It's built the web version of the app. So if I can click on that and I can paste in here. There we go. So we've got no data in there because this is now pointing to the prod version. I can click in here and I can say prod just to make sure. Uh give it a color whatever. Save. Okay. So we've got our one habit in there which is prod. And just to make sure if we go back to our preview. Yeah. We can see that the value the data in the preview version which is pointing to our dev deployment is separate from our prod deployment. Now here's that um place where you can buy a domain if you want to which is quite nice. So it's right in here if you didn't want this um therepplet.app URL we can buy a domain and put a custom domain on it. Now let's get this published on the app store. Well test flight specifically. So to do that is it's simple really. You just click this button and it's going to open this inline um expo launch uh iframe inside of replet. And obviously we want to choose a project. So [music] for some reason it's called this project bloom but okay no worries. And then it's going to go down to this sign in with Apple. Now I've already done this a couple of times today. So it's already signed me in. This made me a bit nervous the first time it did this. So you have to give it your Apple us uh email address and password which made me very nervous. But apparently, you know, it says that it doesn't ever pass [music] pass the password. Doesn't set the password. It just does like a local verification. So, okay, fine. And you're obviously also going to need an Apple developer account, developer program, which I think costs $99, which is just the Apple tax you have to pay, unfortunately. Anyway, now we can create our app. Let's call it Yep. our app replet bloom. Fine. Oh, okay. So, it says uh I've already been using another account, so let's just call it Bloom 2. Okay, [snorts] create app. All right, so now it's preparing the app. Okay, so this step where it does the Apple certificate should happen automatically for you if you haven't done this before. Now, the problem is I've done a few apps now and when you uh it gets this section and then it errors out and it says you reach the maximum number of active distribution certificates. And the problem is, as I understand it, on the Apple developer page, you can only ever have two certificates, which is frustrating. And for some reason, you can't just add other apps to your existing certificate. I think there are ways you can do it manually through Expo. Um, but for now what I've found I can do is I can just revoke this certificate, one of the other certificates and then I just create another one again and then create a pro provisioning profile. Again, this step should just automatically happen for you if you haven't done it already. And then we're done. And then we can just click ready to launch. So launched app store and that's it. It's now Expose EPS, which is their CI build process, is now building our app, uh, our native version of our app, and it's pushing it to the store for us. And it's bounced back to Replet, which is saying it's going to take 45 minutes. So, just wait a minute while that does that. [music] I should just note I'm kind of new to doing this replet um, stuff still. So, if there's anything any mistakes I made in this video where I was saying things about like the Apple developer certificate, for example, and it's wrong, I will add a correction in the pin comment down below. Okay. And there we go. It says it's published V1. And if I open up my phone and I go to my emails, I can see that I have an invite to Bloom 2 view and test flight. Now, obviously, you have to have the Test Flight app installed, but it's free. And I can click install and open. And there we go. We have prod which is our prod data. And obviously we can go into our dashboard to make double make sure. We can go to our data tab. Go to our habits. Oh, and we're in our development deployment. We check our production deployment. Go to our habits. And there's our prod. Where's [music] that? Our prod. There it is. We can change that. Add. Yep. Confirm. We can add a couple exclamation marks in there. And then on mobile device. There we go. Instantaneously updates. Awesome. Well, there we have it. So, in my opinion, that is without a doubt the best way to go from idea to working mobile app. I mean, we got this in Test Flight to get it to actually on the App Store. You have to go through the Apple approval process, which would take days or maybe a week, and I don't want to do that for this video, but it's just a few clicks on the Apple dashboard to be able to um take your app from Testfly to production. I personally am just amazed at how fast I was able to go from that to mobile app. And I didn't even need a Mac to do this. That's the amazing thing. As a dirty Windows user, I could just do this all from my happy lovely Windows environment without having to mess around in Mac. Replet has a mobile app. So I could have done this all from the Replet mobile app, which means I could just do all development while I'm out and about. We're living in crazy crazy times. So, as I mentioned at the start of this video, this is obviously it could we could make this a bit nicer by having a native convex integration. I think this is so powerful that I'm going to push internally for us to be able to do that. So rather than it forcing you down down your throat using their Postgress database, we can have an option just to say okay just use a convex database and then we can get maybe the convex dashboard baked right into the replet interface as well. But if you have any ideas the way this could be improved, please do drop me a comment down below. I read every single one and try and reply to most. I'm very excited to hear what you think about this process and let me know if I've got anything wrong. Again, I will try and update in a pinned comment if I got anything wrong in in here. But I hope you enjoy this video. Until next time, thanks for watching. Cheerio.
Wow. Just wow. I don't normally gush, but this genuinely has me excited.
Replit has been knocking it out of the park lately: rapid improvements to its autonomous agent (versions two and three), self-contained hosting, and now the ability to publish mobile apps directly to the App Store. That combination makes it one of the better AI mobile app builders around for vibing out your next app.
It had been a while since I last checked Replit out, so I wanted to see whether I could get a Convex project running inside it. Turns out you can, easily. I was surprised how fast I got a working app onto the App Store, powered by real-time Convex data instead of the database Replit bakes in by default.
I think this idea-to-App-Store pipeline is a big deal for anyone who's wanted to build mobile apps but been put off by how complex mobile development gets, myself included. Here's what's involved in taking an app from idea to the App Store using Replit as an AI mobile app builder, with Convex as the backend.
Setting up Replit and starting the build
To get started, you need a Replit account, and specifically a paid one. I used Replit Core, at $20 a month, because you need credits to run the agent and to run Convex in a background task.
Once you're in, click to build an app, select "mobile app," and write a prompt. Mine was: "Please build a beautiful mobile app for tracking daily habits. I would like to store all my data in a Convex database." It matters that the prompt says "mobile app" and "Convex database" explicitly. Leave out "Convex" and Replit defaults to its own built-in Postgres database instead.
Start the build, and while it's constructing the app, you need to connect Convex to the project. Replit doesn't have a direct Convex integration yet, though I'm hoping to change that (more on that at the end). For now you open a shell window and run npx convex dev. It asks to install the CLI, prompts you to log into your account through the browser, and then lets you create a new project. I called mine replit-habits and pointed it at the cloud.
While that's running, it's worth a quick tour of the updated Replit UI. The agent sits in a big bar on the left, similar to Bolt or Lovable, with your files on the right. The scaffold includes Drizzle by default, an ORM for Postgres, which you don't need because you're using Convex instead. Once the agent finishes generating the schema, you can see it wrote a habits table and a completions table, with indexes already added. That lines up with how Convex expects you to define your schema up front.
Replit also gives you the option of plan mode instead of build mode. For a demo, moving straight to build is faster. For anything real, though, I'd recommend plan mode so the agent thinks through the problem before it starts writing code.
Wiring up the Convex connection
Once the agent finishes, it tells you to go create a Convex account, not realizing you're already running one locally. Rather than explain that to the agent, the simpler fix is to copy the Convex URL out of the dev process's .env.local file. Paste it in when the agent asks for the public Convex URL.
I love that Replit shows you the cost of each step as you go. Hovering over a completed step showed $1.91 for about six minutes of agent work. A small thing, but it's the kind of transparency that makes iterating with an agent feel less like a black box.
After that step finished, the app preview broke with a generic "something went wrong" message. It hinted that I might have forgotten to run npx convex dev or npx convex deploy. I'd seen this exact failure before. The dev process had started before package.json was fully built, so it never picked up the right config. Canceling the dev process and starting it again fixed it. Once it restarted, it created the indexes, uploaded the functions, and reloading the preview brought the app up cleanly.
From there, Replit walked through the app in its own preview to confirm everything worked. That's a genuinely useful feature. You can watch its reasoning as it clicks through the UI it just built.
Testing real-time sync across web and native
With the app running, I added a habit. I picked an icon, named it "Drink water," saved it, and watched it show up.
Because this is an Expo app, the preview panel includes a QR code. Scanning it with Expo Go on my phone downloaded and bundled the project as a native app, and "Drink water" appeared there too. Tapping it to check it off updated instantly. Switching back to the web preview and adding a new task, "subscribe," with its own emoji, it appeared on the phone immediately as well. That's Convex's reactive queries at work. Subscriptions update automatically whenever the underlying data changes, so there's no polling or manual refresh logic to write on either the web or native client.
Publishing the web build
Once the app itself worked, the next step was publishing. Clicking "ready to publish" opens Replit's publish flow, which had already generated an app icon and some marketing images. It assigns a free domain (mine was habit-tracker-convex.replit.app), though you can buy a custom one through Replit if you want.
The default deployment type is "Autoscale," which assumes you need a server. I switched it to "Static Pages" instead, because there's no Express backend to run here. All the server-side logic lives in Convex.
In the build command field, I removed the default and replaced it with:
1npx convex deploy && npx expo export --platform web
2
npx convex deploy pushes the code in the convex/ directory to production, and npx expo export builds the Expo project for the web. I set the output directory to dist, since that's where the Expo web export lands, and told Replit that's where the site lives.
For Replit's build process to push Convex code, it needs its own credentials. In the Convex dashboard, I switched to the project's production deployment (mine was named "Rosie Otter 666" by Convex's auto-generated naming) and went to Settings → Deploy Keys to generate a production deploy key. I called it "replit" and copied it into Replit's Deployment Secrets as CONVEX_DEPLOYMENT_KEY.
That alone isn't quite enough, though, because the web build and any native mobile builds need to agree on which Convex deployment they're targeting. The web build correctly points at production once the deploy key is set, but mobile builds can still default to the development deployment unless you tell them otherwise. Convex handles this with environment variables scoped per file. I duplicated .env.local into .env.production.local, then changed the deployment value inside it from the development deployment ("Groovy Squid") to the production one ("Rosie Otter 666").
With that in place, clicking Publish ran through provisioning, a security scan, the build, bundling, and promotion. Opening the published site showed an empty app, since it was now correctly pointing at production instead of the dev data I'd been testing against. Adding a habit called "prod" confirmed it. The production and development environments were now cleanly separated, exactly how Convex expects you to manage dev versus prod.
Shipping to TestFlight
The last piece was getting a native build onto TestFlight. Replit has an embedded Expo/EAS flow for this. Clicking the publish button opens an Expo launch panel inside Replit itself. I picked a project name (mine was "Bloom") and signed in with my Apple ID and password. That does require an Apple Developer Program account, which runs $99 a year. Replit claims the sign-in is verified locally rather than transmitted anywhere.
Creating and preparing the app is normally automatic on a first run, including generating the Apple distribution certificate. I hit one snag. Apple caps you at two active distribution certificates, and I'd already hit that limit, so I had to revoke an old one before Replit could generate a new provisioning profile. Once that resolved, I clicked "Ready to Launch," which kicked off Expo's EAS, its own CI build system. That builds the native binary and pushes it to the App Store. Replit estimated about 45 minutes for that step.
While it built, I got an email inviting me to the app on TestFlight. Installing it and opening it showed the production data I'd added earlier. Making a change in the Convex dashboard updated the app on my phone instantly, the same real-time behavior I'd seen between the web preview and Expo Go earlier.
Getting from TestFlight to the actual App Store still requires Apple's review process, which can take anywhere from a few days to a week. I didn't run that step for this video, but submitting for review from there is only a few clicks in Apple's own dashboard.
Takeaways
I'm honestly amazed at how fast this AI mobile app builder got me to a working mobile app, and I did the whole thing on Windows, without a Mac. Replit also has its own mobile app, so in principle you could keep iterating on a project from your phone.
The one thing that would make this meaningfully better is a native Convex integration inside Replit, instead of routing around the built-in Postgres database by hand. I'm going to push for that internally. Ideally Replit would offer Convex as a first-class option from the start, maybe even with the Convex dashboard embedded directly in the Replit interface.
Real-time data that just works across web and native, shipped without touching a backend server once, that's the part I keep coming back to.
All gas, no breakages
Convex is the reactive backend platform that keeps up with you and your agents. Database, functions, workflow, sync, search, file storage, and more. All TypeScript, zero glue.