<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Aakash Verma</title>
    <description>The latest articles on DEV Community by Aakash Verma (@batmanofweb).</description>
    <link>https://dev.to/batmanofweb</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4157864%2Ff2bb08a7-fe95-4e7b-ae8c-8ca94ff74fc7.jpg</url>
      <title>DEV Community: Aakash Verma</title>
      <link>https://dev.to/batmanofweb</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/batmanofweb"/>
    <language>en</language>
    <item>
      <title>In-App Purchases in a Lovable App: Stripe or Apple?</title>
      <dc:creator>Aakash Verma</dc:creator>
      <pubDate>Sun, 25 Oct 2026 00:04:52 +0000</pubDate>
      <link>https://dev.to/batmanofweb/in-app-purchases-in-a-lovable-app-stripe-or-apple-4fhj</link>
      <guid>https://dev.to/batmanofweb/in-app-purchases-in-a-lovable-app-stripe-or-apple-4fhj</guid>
      <description>&lt;p&gt;If your Lovable app sells a subscription or unlocks features, the web version can keep using Stripe, but the iPhone app usually can't. Apple's guideline 3.1.1 says that to "unlock features or functionality within your app", like subscriptions or premium content, "you must use in-app purchase". The one big exception since 2025 is the United States storefront, where apps may link out to their own checkout. Everything below was checked against &lt;a href="https://developer.apple.com/app-store/review/guidelines/" rel="noopener noreferrer"&gt;Apple's App Review Guidelines&lt;/a&gt; on October 23, 2026.&lt;/p&gt;

&lt;p&gt;This catches Lovable founders more than most, because the web app already works. Stripe Checkout opens, the webhook flips &lt;code&gt;is_pro&lt;/code&gt; in Supabase, done. Then the same flow ships inside a Capacitor app, and the review comes back citing 3.1.1.&lt;/p&gt;

&lt;h2&gt;
  
  
  What actually counts
&lt;/h2&gt;

&lt;p&gt;Apple cares about what is being sold, not how.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Digital things used inside the app need in-app purchase:&lt;/strong&gt; subscriptions, credits, premium features, content. A Lovable SaaS with a Pro plan is squarely in this group.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Physical goods and real-world services don't:&lt;/strong&gt; a shop selling t-shirts, a booking app for haircuts, a marketplace taking a cut of a delivery. Keep Stripe for those, inside the app too.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Things bought elsewhere can be used in the app.&lt;/strong&gt; Under 3.1.3(b), someone who subscribed on your website can sign in on the iPhone and get Pro, as long as the subscription is also available as an in-app purchase in the app. That last condition is the one people skip.&lt;/p&gt;

&lt;p&gt;And the US exception: on the US storefront, guideline 3.1.1(a) now says entitlements "are not required" for buttons and external links to other ways to pay. So a US-only app can show "Upgrade on our website" and send people to Stripe. In every other storefront that button is still a rejection unless you hold Apple's External Purchase Link entitlement where it's offered. Most Lovable apps sell worldwide, so most of them need in-app purchase anyway.&lt;/p&gt;

&lt;h2&gt;
  
  
  What each option costs
&lt;/h2&gt;

&lt;p&gt;On a $9.99 a month subscription:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/.%2Flovable-app-in-app-purchases%2Fsubscription-split.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/.%2Flovable-app-in-app-purchases%2Fsubscription-split.webp" alt="A $9.99 subscription split three ways: Stripe on the web keeps $9.40 for you, Apple in-app purchase at 15% keeps $8.49, at 30% keeps $6.99" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Stripe on your website:&lt;/strong&gt; 2.9% + 30¢ per US card payment (&lt;a href="https://stripe.com/pricing" rel="noopener noreferrer"&gt;Stripe pricing&lt;/a&gt;), so $0.59, and you keep $9.40. Stripe Billing adds 0.7% if you use it for the subscription logic.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Apple in-app purchase:&lt;/strong&gt; 15% if you're in the &lt;a href="https://developer.apple.com/app-store/small-business-program/" rel="noopener noreferrer"&gt;App Store Small Business Program&lt;/a&gt; (under $1 million in proceeds the year before, and new developers qualify), so you keep $8.49. Above $1 million it's the standard 30%. You have to apply for the 15%; it isn't automatic.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Google Play&lt;/strong&gt; has its own billing rules and service fee; check &lt;a href="https://support.google.com/googleplay/android-developer/answer/9858738" rel="noopener noreferrer"&gt;Google's payments policy&lt;/a&gt; for your countries before assuming Stripe is fine on Android.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The 15% hurts a bit less once you remember what it buys: on a phone the purchase sheet is Face ID and done, with no card form to type into. I'd still keep the web checkout for people who find you on the web. Same price everywhere is the simplest policy; some apps charge more in the app to cover the fee, which Apple allows.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where RevenueCat fits
&lt;/h2&gt;

&lt;p&gt;The hard part of in-app purchase isn't the purchase sheet. It's knowing, in your Supabase database, who is subscribed right now, across Apple, Google and Stripe, with renewals, refunds and grace periods. You can build that yourself with App Store Server Notifications and Google's real-time developer notifications. Or you use &lt;a href="https://www.revenuecat.com/pricing/" rel="noopener noreferrer"&gt;RevenueCat&lt;/a&gt;, which does exactly that and has a Capacitor SDK (&lt;code&gt;@revenuecat/purchases-capacitor&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;Its pricing, checked today: free up to $2,500 of monthly tracked revenue, then 1% of what it tracks. For a Lovable app that's starting out, that's free for a long time, and by the time you pay $25 a month for it you're making $2,500. I'd use it. The thing I don't like is that "is this user Pro?" now lives in a third place, so we always mirror the entitlement into a Supabase column with a webhook, and the app's RLS policies read that column, not an SDK call.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it plays out in a real project
&lt;/h2&gt;

&lt;p&gt;The order we use: set up the products in App Store Connect and Google Play Console first (they need tax and banking info, and Apple reviews each new subscription with the app), add the SDK to the Capacitor project, keep the existing Stripe flow on the web, and hide the Stripe button inside the iOS app outside the US. The paywall screen in the app needs the price, the period and links to your terms and privacy policy, or review sends it back.&lt;/p&gt;

&lt;p&gt;If a 3.1.1 rejection is what brought you here, our &lt;a href="https://lovable2app.com/app-store-rejection-fix/" rel="noopener noreferrer"&gt;App Store rejection fix&lt;/a&gt; is $350 flat and resubmitted within 3 days. If the app isn't in the stores yet, payments are part of &lt;a href="https://lovable2app.com/publish-lovable-app/" rel="noopener noreferrer"&gt;publishing your Lovable app&lt;/a&gt; to both stores.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://lovable2app.com/blog/lovable-app-in-app-purchases/" rel="noopener noreferrer"&gt;lovable2app.com&lt;/a&gt;. Aakash Verma, software developer and founder of Lovable 2 Live.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>inapppurchases</category>
      <category>appstore</category>
      <category>capacitor</category>
      <category>stripe</category>
    </item>
    <item>
      <title>Lovable on Coolify: Host It on Your Server</title>
      <dc:creator>Aakash Verma</dc:creator>
      <pubDate>Fri, 23 Oct 2026 23:49:11 +0000</pubDate>
      <link>https://dev.to/batmanofweb/lovable-on-coolify-host-it-on-your-server-had</link>
      <guid>https://dev.to/batmanofweb/lovable-on-coolify-host-it-on-your-server-had</guid>
      <description>&lt;p&gt;You can move a Lovable app onto your own server with Coolify: point Coolify at the GitHub repo Lovable syncs to, build it as a static Vite site with &lt;code&gt;dist&lt;/code&gt; as the publish directory, add one Nginx line so page refreshes don't 404, and put your domain on it. As of October 2026 self-hosted Coolify is free, Coolify Cloud is $5 a month for up to two servers, and the server itself is the real bill (Hetzner's CAX21, 4 ARM cores and 8 GB, is €10.49 a month after their June price rise).&lt;/p&gt;

&lt;p&gt;That moves the front end. Whether it moves the whole app depends on where your database lives, and that's the part most "self-host Lovable" threads skip.&lt;/p&gt;

&lt;h2&gt;
  
  
  What actually moves
&lt;/h2&gt;

&lt;p&gt;A Lovable project is two things wearing one name. There's the React app Lovable writes (Vite, TypeScript, Tailwind), which compiles to a folder of static files. And there's the backend: on Lovable Cloud that's a Supabase project Lovable runs for you, with your tables, auth users, storage buckets and edge functions.&lt;/p&gt;

&lt;p&gt;Coolify takes the first one easily. The second one stays exactly where it is unless you move it on purpose. So after a Coolify deploy you have your own server serving the pages, and the pages still talk to Lovable Cloud for every login and every query. That's a perfectly good setup if what you wanted was your own hosting, your own headers and no Lovable badge. It is not "off Lovable".&lt;/p&gt;

&lt;p&gt;If you want the data on your side too, there are two roads. Move it to a Supabase project you own (that's the &lt;a href="https://lovable2live.com/cloud-to-supabase/" rel="noopener noreferrer"&gt;Cloud to Supabase migration&lt;/a&gt; we do in 1 to 2 days), or run self-hosted Supabase as a Coolify service on the same box. The second one is cheaper on paper and more work forever after: you own the backups, the Postgres upgrades and the 3 a.m. disk alert. Lovable also can't manage a self-hosted database, so new tables and policies become a developer's job instead of a chat message.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Coolify settings that work for a Lovable repo
&lt;/h2&gt;

&lt;p&gt;Coolify's own minimum is 2 CPU cores, 2 GB of RAM and 10 GB of disk, on Ubuntu, Debian or most other Linux distributions, amd64 or arm64. The install is one command on a fresh server:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://cdn.coollabs.io/coolify/install.sh | bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It prints the next steps when it finishes. Then, in the dashboard:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Add a new resource from your GitHub repo (install Coolify's GitHub App so it gets push webhooks; Lovable's GitHub sync pushes to the default branch, so every Lovable edit redeploys).&lt;/li&gt;
&lt;li&gt;Build pack &lt;strong&gt;Nixpacks&lt;/strong&gt;, Site type &lt;strong&gt;Static&lt;/strong&gt;, Publish directory &lt;code&gt;dist&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Add your &lt;code&gt;VITE_&lt;/code&gt; variables if the repo doesn't already carry them in &lt;code&gt;.env&lt;/code&gt;. In Coolify's environment variables screen, leave &lt;strong&gt;Build time&lt;/strong&gt; set to &lt;em&gt;Available during build&lt;/em&gt;, because Vite bakes these into the JavaScript at build time. A variable that's only available at runtime does nothing for a static site.&lt;/li&gt;
&lt;li&gt;Generate the Nginx config under General and add the single-page fallback (below), then deploy.&lt;/li&gt;
&lt;li&gt;Add your domain and let Coolify's proxy fetch the certificate.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/.%2Flovable-coolify%2Flovable-coolify-settings.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/.%2Flovable-coolify%2Flovable-coolify-settings.webp" alt="Terminal-style card with the install command and the five Coolify settings for a Lovable app: Nixpacks, Static, dist, build-time VITE variables, try_files fallback" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The refresh 404 everyone hits once
&lt;/h2&gt;

&lt;p&gt;Lovable apps use client-side routing. Nginx doesn't know that. Open &lt;code&gt;/dashboard&lt;/code&gt; from the home page and it works, because React Router handled it in the browser. Hit refresh on &lt;code&gt;/dashboard&lt;/code&gt; and Nginx looks for a file called &lt;code&gt;dashboard&lt;/code&gt;, finds nothing and returns its plain white "404 Not Found" page.&lt;/p&gt;

&lt;p&gt;The last founder who showed me this had already blamed Cloudflare, then the DNS, then Coolify. It's one line in the &lt;code&gt;location /&lt;/code&gt; block:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nginx"&gt;&lt;code&gt;&lt;span class="k"&gt;try_files&lt;/span&gt; &lt;span class="nv"&gt;$uri&lt;/span&gt; &lt;span class="nv"&gt;$uri&lt;/span&gt;&lt;span class="n"&gt;/&lt;/span&gt; &lt;span class="n"&gt;/index.html&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Coolify copies the Nginx config into the image at build time, so you have to redeploy after changing it. A restart reuses the old image and the 404 stays, which is a fun extra hour if nobody tells you.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it costs, honestly
&lt;/h2&gt;

&lt;p&gt;For the front end alone, self-hosting saves less than people expect. Static files are cheap to serve anywhere, and Lovable's own hosting is included in the plan you're probably keeping anyway, because you still build in Lovable. The money starts to matter when the backend moves too: a Lovable Cloud instance at the bigger sizes costs more per month than a whole 8 GB server running Coolify plus self-hosted Supabase.&lt;/p&gt;

&lt;p&gt;So here's my actual opinion. If your Lovable Cloud bill is small, don't self-host for the money. Do it if you need control (headers, a region, a server you can SSH into, one bill for several apps). If the bill is large, move the backend first, because that's where the savings are, and decide about the front end after.&lt;/p&gt;

&lt;p&gt;Not sure which camp you're in? The free &lt;a href="https://lovable2live.com/tools/lovable-cost-check/" rel="noopener noreferrer"&gt;Lovable cost check&lt;/a&gt; reads your repo and prices four ways forward, including the Coolify server route, next to what you pay now.&lt;/p&gt;

&lt;h2&gt;
  
  
  Things that break after the move
&lt;/h2&gt;

&lt;p&gt;Auth redirect URLs are the big one. Supabase only sends magic links and OAuth callbacks to URLs on its allow list, and your new domain isn't on it until someone adds it. Do that before you switch DNS, not after the first user writes in saying the login link opens the old site.&lt;/p&gt;

&lt;p&gt;Edge functions don't come along. They keep running where your backend runs, and the front end on Coolify calls them there, which is fine until you move the backend and forget them.&lt;/p&gt;

&lt;p&gt;And Lovable's preview keeps working, because it never needed your server in the first place. That's handy: you keep building in Lovable, push, and Coolify ships it a minute later.&lt;/p&gt;

&lt;p&gt;If you would rather have someone set this up with the database move done properly, that is a fixed-price job for us: &lt;a href="https://lovable2live.com/lovable-own-server/" rel="noopener noreferrer"&gt;your Lovable app on your own server&lt;/a&gt; is $500 to set up, plus the Cloud move if you need it. Or &lt;a href="https://lovable2live.com/contact/" rel="noopener noreferrer"&gt;tell us about your app&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://lovable2live.com/blog/lovable-coolify/" rel="noopener noreferrer"&gt;lovable2live.com&lt;/a&gt;. Aakash Verma, software developer and founder of Lovable 2 Live.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>lovable</category>
      <category>coolify</category>
      <category>selfhosting</category>
      <category>hosting</category>
    </item>
    <item>
      <title>How to Use TestFlight for Your Lovable App</title>
      <dc:creator>Aakash Verma</dc:creator>
      <pubDate>Fri, 23 Oct 2026 00:34:52 +0000</pubDate>
      <link>https://dev.to/batmanofweb/how-to-use-testflight-for-your-lovable-app-4341</link>
      <guid>https://dev.to/batmanofweb/how-to-use-testflight-for-your-lovable-app-4341</guid>
      <description>&lt;p&gt;To use TestFlight with a Lovable app, wrap it with Capacitor, archive the iOS project in Xcode and upload the build to App Store Connect, then add testers on the app's TestFlight tab: up to 100 internal testers from your App Store Connect team with no review, or up to 10,000 external testers by email or public link once Apple has reviewed your first build. Each build can be tested for 90 days (Apple's TestFlight docs, checked October 20, 2026).&lt;/p&gt;

&lt;p&gt;That's the whole mechanism. What follows is the part the docs don't tell you, which is how a web app built in Lovable behaves when real people install it from TestFlight instead of opening a preview link.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why bother, when Lovable already has a preview
&lt;/h2&gt;

&lt;p&gt;Because the preview is a website and TestFlight is the app. Everything that goes wrong on iOS goes wrong in the native shell: the keyboard covering your login button, the status bar sitting on top of your header, a deep link opening Safari instead of the app, push permission prompts that never appear. None of that shows up in the Lovable preview on your phone's browser.&lt;/p&gt;

&lt;p&gt;TestFlight is also the dress rehearsal for App Review. The first external build goes through Apple's review against the same App Review Guidelines, so a WebView-shaped app that would get a 4.2 rejection tends to hit trouble here first, while nothing public is at stake.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting the build up
&lt;/h2&gt;

&lt;p&gt;You need a paid Apple Developer account ($99 a year) and a Mac with Xcode. From the Capacitor project:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm run build
npx cap &lt;span class="nb"&gt;sync &lt;/span&gt;ios
npx cap open ios
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In Xcode, pick &lt;strong&gt;Any iOS Device (arm64)&lt;/strong&gt; as the target, then &lt;strong&gt;Product → Archive&lt;/strong&gt;. When the Organizer opens, choose &lt;strong&gt;Distribute App&lt;/strong&gt; and the App Store Connect option. Xcode signs and uploads it. Expect the build to sit in "Processing" in App Store Connect for anywhere from five minutes to an hour.&lt;/p&gt;

&lt;p&gt;Two things stop first uploads more than anything else. The build number has to go up every single time (Xcode's &lt;strong&gt;Build&lt;/strong&gt; field, not the version), and the export compliance question will be waiting for you. Most Lovable apps only use standard HTTPS, which Apple treats as exempt encryption, and you can answer once in &lt;code&gt;Info.plist&lt;/code&gt; with &lt;code&gt;ITSAppUsesNonExemptEncryption&lt;/code&gt; set to &lt;code&gt;NO&lt;/code&gt; so it stops asking. If your app does its own cryptography, answer honestly instead.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/.%2Ftestflight-lovable-app%2Ftestflight-lovable-paths.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/.%2Ftestflight-lovable-app%2Ftestflight-lovable-paths.webp" alt="TestFlight path for a Lovable app: Lovable to Capacitor to Xcode archive to App Store Connect, splitting into internal testers with no review and external testers after the first review" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Internal or external: pick based on who's testing
&lt;/h2&gt;

&lt;p&gt;Internal testers have to be users in your App Store Connect team with a role like Admin, Developer, App Manager or Marketing. Up to 100 of them. Builds reach them as soon as processing finishes, and you can set new builds to go to them automatically. This is for you, your cofounder and the freelancer who's fixing the safe-area padding.&lt;/p&gt;

&lt;p&gt;External testers are everyone else, up to 10,000. You create a group, add a build, and that first build goes to App Review. Apple's page says a review is required only for the first build and later ones "may not require a full review", which in practice means most updates go out fast and now and then one sits for a day. Invite people by email, or turn on a public link and paste it wherever your users are. You can also limit the public link by device type and OS version, which is handy if you only want iPhone users on a recent iOS.&lt;/p&gt;

&lt;p&gt;We had a founder send the public link to a 2,000-person waitlist on a Friday night. Good news: 340 installs over the weekend. Bad news: the app's sign-up email still pointed at the Lovable preview domain, so every confirmation link opened a browser tab instead of the app, and the TestFlight feedback inbox filled with screenshots of the same broken page. Test the auth emails with two people before you test with two thousand.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reading what testers send you
&lt;/h2&gt;

&lt;p&gt;Testers on current TestFlight can send feedback from inside your app by taking a screenshot, and it lands in the TestFlight Feedback section of App Store Connect with the device and OS attached. That's genuinely useful for layout bugs, because "the button is cut off" arrives with the iPhone model that cuts it off.&lt;/p&gt;

&lt;p&gt;App Store Connect also shows sessions and crashes per build. A Capacitor app that crashes on launch usually has a missing permission string (camera, photo library, location) in &lt;code&gt;Info.plist&lt;/code&gt;. iOS kills the app the moment it asks for that permission without one, and in TestFlight it looks like a crash with no explanation.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 90-day thing
&lt;/h2&gt;

&lt;p&gt;Every build stops working 90 days after upload, and testers see it expire. If you're using TestFlight as a slow-motion soft launch, which plenty of people do, you need to upload a fresh build before that date or your testers get locked out. Upload a new build every few weeks anyway. Testers stay in their groups across builds, so nobody needs to be re-invited.&lt;/p&gt;

&lt;h2&gt;
  
  
  When it's ready for the real store
&lt;/h2&gt;

&lt;p&gt;Once a build has been through external testing without nasty surprises, you submit the same build for App Store review from the app's distribution page. No new upload needed. How the launch runs in both stores is on &lt;a href="https://lovable2app.com/publish-lovable-app/" rel="noopener noreferrer"&gt;publish your Lovable app to the App Store and Google Play&lt;/a&gt;. If you'd rather not fight Xcode signing and the review notes yourself, we help with the submission and the reviewer's questions on every package (&lt;a href="https://lovable2app.com/#pricing" rel="noopener noreferrer"&gt;see the packages&lt;/a&gt;), or just &lt;a href="https://lovable2app.com/contact/" rel="noopener noreferrer"&gt;ask us&lt;/a&gt; what your app needs.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://lovable2app.com/blog/testflight-lovable-app/" rel="noopener noreferrer"&gt;lovable2app.com&lt;/a&gt;. Aakash Verma, software developer and founder of Lovable 2 Live.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>testflight</category>
      <category>ios</category>
      <category>capacitor</category>
      <category>lovable</category>
    </item>
    <item>
      <title>Lovable Cloud Pricing: How to Cut the Bill</title>
      <dc:creator>Aakash Verma</dc:creator>
      <pubDate>Thu, 22 Oct 2026 01:13:22 +0000</pubDate>
      <link>https://dev.to/batmanofweb/lovable-cloud-pricing-how-to-cut-the-bill-49k3</link>
      <guid>https://dev.to/batmanofweb/lovable-cloud-pricing-how-to-cut-the-bill-49k3</guid>
      <description>&lt;p&gt;Lovable Cloud pricing has no price list of its own: your app's database, storage, traffic and backend code are paid in &lt;strong&gt;run credits&lt;/strong&gt; from the same balance you build with, and top-up credits cost $0.30 each on Pro and $0.60 on Business (Lovable's docs, checked October 19, 2026). To cut the bill, open &lt;strong&gt;More → Cloud → Usage&lt;/strong&gt;, see which category leads, and fix that one first. It is almost always the instance size, a scheduled job that never lets the backend sleep, or files nobody deletes.&lt;/p&gt;

&lt;p&gt;That's the short version. The rest is how to read the page and what to change, because the fixes are not equal and some of them cost you more than they save.&lt;/p&gt;

&lt;h2&gt;
  
  
  Read the Usage view before you touch anything
&lt;/h2&gt;

&lt;p&gt;The Usage view charts your project's run credits per day for the last 30 days (you can switch to 90) and sorts the spend into six buckets: &lt;strong&gt;Database&lt;/strong&gt; (split into &lt;em&gt;Database server&lt;/em&gt; and &lt;em&gt;Database storage&lt;/em&gt;), &lt;strong&gt;AI&lt;/strong&gt;, &lt;strong&gt;Compute&lt;/strong&gt;, &lt;strong&gt;Network&lt;/strong&gt;, &lt;strong&gt;Storage&lt;/strong&gt; and &lt;strong&gt;Realtime&lt;/strong&gt;. The number next to each bucket is credits, not dollars. Multiply by what you pay per credit if you want a dollar figure.&lt;/p&gt;

&lt;p&gt;Two things on that page catch people. First, the total shows how much of it your monthly grant covered. Right now every Free, Pro and Business workspace gets 20 credits a month for Cloud and 4 for AI features in deployed apps. Lovable labels both "temporary, subject to change", so don't build a budget on them. Second, if the project burned more than 5 run credits in the last 7 days, owners and admins get an &lt;strong&gt;Optimize your usage&lt;/strong&gt; button. It starts a chat that investigates the spend, and that chat is normal build usage, so it costs credits too.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/.%2Flovable-cloud-pricing%2Flovable-cloud-bill-decision-tree.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/.%2Flovable-cloud-pricing%2Flovable-cloud-bill-decision-tree.webp" alt="Decision tree for cutting a Lovable Cloud bill, starting from the biggest bucket in the Usage view" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The fixes, in the order they usually pay off
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Check which instance you're really on.&lt;/strong&gt; Lovable renamed the database sizes on July 31, 2026: the old Medium is now called Large, the old Large is X-Large, the old X-Large is 2X-Large, and a new, smaller Medium sits between Small and Large. Hourly prices didn't change, but plenty of founders who "picked Medium" in the spring are paying for what the dialog now calls Large without knowing it. Go to &lt;strong&gt;More → Cloud → Overview → Advanced settings&lt;/strong&gt;, open &lt;strong&gt;Manage instance&lt;/strong&gt;, and read the &lt;strong&gt;Estimated cost&lt;/strong&gt; under each size. Lovable bases those estimates on your last 30 days of usage, which makes them more honest than any number I could give you here.&lt;/p&gt;

&lt;p&gt;Don't downsize on a hunch, though. The CPU, Memory and Disk cards above it show 24 hourly segments, and a highlighted one means the database was close to its limit that hour. One red hour after a launch email is fine. A week of red afternoons means the instance is too small and shrinking it will make the app slow, which costs more in lost users than the credits you saved. A resize takes a few minutes with a short restart, so do it at night.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Find the job that keeps the lights on.&lt;/strong&gt; Lovable pauses idle Cloud projects automatically, which is why a side project with no traffic costs close to nothing. That automatic pause does not apply to projects with scheduled jobs. We looked at a booking app last month where Compute was the top bucket every single day, including days with zero bookings. The cause was a job that ran every minute to expire unpaid reservations. Nobody had touched it since the first prompt that created it. Moved to once an hour, the daily Compute line dropped to a sliver and the app behaved exactly the same. Open &lt;strong&gt;Jobs&lt;/strong&gt; in the Cloud tab and look at the schedule column before anything else.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Delete files, because paused isn't free.&lt;/strong&gt; Stored files keep using credits even while a project is paused. If your app lets users upload photos and never cleans up abandoned drafts, Storage grows forever. A cleanup job that runs daily (yes, a job, but a cheap one) or a size limit on uploads fixes it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix the slow queries.&lt;/strong&gt; A query that scans a whole table on every page load shows up as Database server time. Ask Lovable in the chat to find the slowest queries and add indexes. This one costs build credits up front and pays back slowly, so do it after the three above.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pick a cheaper model for AI features.&lt;/strong&gt; The AI bucket is charged per call by model and tokens. A support bot that sends the whole chat history with every message on the biggest model is the classic one. A smaller model for the first answer and shorter context usually halves it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The top-up price trap on Business
&lt;/h2&gt;

&lt;p&gt;This one is just arithmetic. A one-time top-up is $15 for 50 credits on Pro and $30 for 50 credits on Business, so a Business workspace pays twice as much for every extra credit its live app burns. If you upgraded to Business for SSO or team features and your app's Cloud usage runs past the plan's credits every month, compare that against a bigger Pro plan before the next renewal.&lt;/p&gt;

&lt;p&gt;Whatever plan you're on, set a &lt;strong&gt;monthly spend limit&lt;/strong&gt; on auto top-up (&lt;strong&gt;Workspace settings → Plans &amp;amp; credit usage → Add credits → Auto top-up&lt;/strong&gt;). Without one, a bot hammering your signup form can top you up all weekend. With one, the worst case is the backend pausing until you add credits, and your published site stays up while that happens.&lt;/p&gt;

&lt;h2&gt;
  
  
  When trimming isn't the answer
&lt;/h2&gt;

&lt;p&gt;Some apps are simply busy, and that's the good problem. Once the Usage view shows Database server and Network as the two biggest lines on normal traffic, you're paying Lovable's markup on infrastructure you could run on your own Supabase project, with a bill in dollars you can read line by line. Our &lt;a href="https://lovable2live.com/tools/lovable-cost-check/" rel="noopener noreferrer"&gt;free Lovable cost check&lt;/a&gt; scans your repo and shows what the same app would cost on its own backend, and &lt;a href="https://lovable2live.com/cloud-to-supabase/" rel="noopener noreferrer"&gt;moving from Lovable Cloud to Supabase&lt;/a&gt; takes us one to two days with your data and users included. Prices are on the &lt;a href="https://lovable2live.com/pricing/" rel="noopener noreferrer"&gt;pricing page&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you'd rather someone else read the Usage page with you, &lt;a href="https://lovable2live.com/contact/" rel="noopener noreferrer"&gt;send us a note&lt;/a&gt; with a screenshot of it.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://lovable2live.com/blog/lovable-cloud-pricing/" rel="noopener noreferrer"&gt;lovable2live.com&lt;/a&gt;. Aakash Verma, software developer and founder of Lovable 2 Live.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>lovable</category>
      <category>lovablecloud</category>
      <category>pricing</category>
      <category>costs</category>
    </item>
    <item>
      <title>What It Costs to Turn Lovable Into an App</title>
      <dc:creator>Aakash Verma</dc:creator>
      <pubDate>Tue, 20 Oct 2026 23:54:40 +0000</pubDate>
      <link>https://dev.to/batmanofweb/what-it-costs-to-turn-lovable-into-an-app-24ho</link>
      <guid>https://dev.to/batmanofweb/what-it-costs-to-turn-lovable-into-an-app-24ho</guid>
      <description>&lt;p&gt;Turning a Lovable app into an iPhone and Android app costs $124 in store fees in the first year ($99 a year for Apple's Developer Program, $25 once for Google Play) plus the build itself, which with us is a fixed $300, $600 or $1,000 depending on how many screens the app has. So a typical 10-screen Lovable app lands at about $724 for year one, and $99 a year after that, before the stores take their cut of any sales.&lt;/p&gt;

&lt;p&gt;People searching "how much does it cost to make an app" get quotes from $5,000 to $150,000, and those numbers are real for apps built from nothing. Your situation is different. The screens, the logic and the Supabase backend already exist in your Lovable project, and most of the cost of an app is building those.&lt;/p&gt;

&lt;h2&gt;
  
  
  The fees you can't avoid
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Apple: $99 a year.&lt;/strong&gt; That's the &lt;a href="https://developer.apple.com/programs/" rel="noopener noreferrer"&gt;Apple Developer Program&lt;/a&gt;. You need it for TestFlight and the App Store, and it renews every year. If the app stops being paid for, it disappears from the store. Enrolling as a company instead of a person also needs a D-U-N-S number. The number is free, but getting one can take a week or more, and nobody warns you about that until you're stuck on the form.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Google: $25, once.&lt;/strong&gt; The &lt;a href="https://support.google.com/googleplay/android-developer/answer/6112435" rel="noopener noreferrer"&gt;Google Play Console registration fee&lt;/a&gt; is a one-time US$25. The catch is time, not money: a new personal developer account has to run a closed test with at least 12 testers for 14 days before Google lets the app go to production. Line up those 12 people early. Your friends will forget to open the test link.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The cut, if you sell anything.&lt;/strong&gt; Both stores take 15% of digital sales for developers under $1 million a year (Apple's &lt;a href="https://developer.apple.com/app-store/small-business-program/" rel="noopener noreferrer"&gt;Small Business Program&lt;/a&gt; has to be joined, it isn't automatic). If your Lovable app sells a subscription through Stripe, the native version may have to sell it through in-app purchase instead, and that changes your margins and some of your code. Physical goods and services, like bookings or deliveries, can keep Stripe.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/.%2Flovable-app-to-mobile-app-cost%2Flovable-app-year-one-cost.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/.%2Flovable-app-to-mobile-app-cost%2Flovable-app-year-one-cost.webp" alt="Year-one cost of a Lovable app on iPhone and Android as a step chart: store fees, the build, and the Apple renewal at month 12" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The build: where the real money goes
&lt;/h2&gt;

&lt;p&gt;There are two ways to do it, and the price difference between them is smaller than people expect.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Capacitor, from the same code.&lt;/strong&gt; Your Lovable project becomes the app. We add the native pieces Apple wants to see before it approves anything (push notifications, a proper splash screen, offline handling, the share sheet), build it for both stores, and submit it. You keep building in Lovable, and every change ships to the web and to the apps. This is the default for most founders because it doesn't fork the codebase. You can &lt;a href="https://lovable2app.com/blog/capacitor-vs-react-native-lovable/" rel="noopener noreferrer"&gt;compare it with React Native here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A native rebuild in React Native or Flutter.&lt;/strong&gt; Same Supabase backend, new front end. It makes sense for apps people live in all day: a feed, chat, maps, video. It's more work for us, but we price both paths the same, so pick the one that suits the app.&lt;/p&gt;

&lt;p&gt;Our packages, for either path: &lt;strong&gt;$300&lt;/strong&gt; up to 5 screens, &lt;strong&gt;$600&lt;/strong&gt; up to 15, &lt;strong&gt;$1,000&lt;/strong&gt; for 25 and more. Count your screens honestly. A settings page with three tabs is three screens. The full breakdown is on the &lt;a href="https://lovable2app.com/" rel="noopener noreferrer"&gt;home page&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you'd rather do it yourself, the build costs you nothing but time. Capacitor is free, and you can build Android on any laptop. For iOS you need a Mac with Xcode, and a few evenings to get through signing certificates, provisioning profiles and App Store Connect. One founder told us they spent a full weekend on the "No signing certificate found" error alone, and then the first submission came back under guideline 4.2 because the app was a plain wrapper. That rejection is the common one, and &lt;a href="https://lovable2app.com/blog/apple-guideline-4-2-lovable-webview-rejection/" rel="noopener noreferrer"&gt;it's fixable&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it costs after launch
&lt;/h2&gt;

&lt;p&gt;Less than you'd think, but not zero.&lt;/p&gt;

&lt;p&gt;Push notifications through Firebase Cloud Messaging are free. Your Supabase or Lovable Cloud bill doesn't change much because app users hit the same backend as web users. What does cost money is keeping up with the platforms. Apple and Google raise their minimum SDK targets every year, Capacitor ships a major version roughly yearly (Capacitor 8 came out this year), and an app that isn't updated for a year or two gets flagged or pulled. Budget a small update once or twice a year. For most apps that's a day of work, not a rebuild.&lt;/p&gt;

&lt;p&gt;The other running cost is review time. Every update goes through Apple's review again, usually in a day, occasionally with a rejection over a screenshot or a missing account-deletion button. That costs time rather than money, but it's real.&lt;/p&gt;

&lt;h2&gt;
  
  
  The honest total
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Year one&lt;/th&gt;
&lt;th&gt;Every year after&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Store fees&lt;/td&gt;
&lt;td&gt;$124&lt;/td&gt;
&lt;td&gt;$99&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Build with us (10 screens, $600 package)&lt;/td&gt;
&lt;td&gt;$600&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Platform updates&lt;/td&gt;
&lt;td&gt;a day of work, if a new OS lands&lt;/td&gt;
&lt;td&gt;a day of work, once or twice&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Store cut on digital sales&lt;/td&gt;
&lt;td&gt;15% under $1M&lt;/td&gt;
&lt;td&gt;15% under $1M&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Around $724 to get a 10-screen Lovable app onto both stores, versus five figures for an app built from scratch. The difference is the work you already did in Lovable.&lt;/p&gt;

&lt;p&gt;Want a fixed quote for yours? &lt;a href="https://lovable2app.com/contact/" rel="noopener noreferrer"&gt;Tell us about the app&lt;/a&gt; and how many screens it has.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://lovable2app.com/blog/lovable-app-to-mobile-app-cost/" rel="noopener noreferrer"&gt;lovable2app.com&lt;/a&gt;. Aakash Verma, software developer and founder of Lovable 2 Live.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>lovable</category>
      <category>mobileapp</category>
      <category>appcost</category>
      <category>appstore</category>
    </item>
    <item>
      <title>Lovable Hosting: What You Get and Pay For</title>
      <dc:creator>Aakash Verma</dc:creator>
      <pubDate>Tue, 20 Oct 2026 01:09:31 +0000</pubDate>
      <link>https://dev.to/batmanofweb/lovable-hosting-what-you-get-and-pay-for-4fok</link>
      <guid>https://dev.to/batmanofweb/lovable-hosting-what-you-get-and-pay-for-4fok</guid>
      <description>&lt;p&gt;People ask us about Lovable hosting as if it were a separate product you pick, like Netlify or Vercel. It isn't. When you hit Publish, Lovable hosts the app, and there is no hosting plan to compare, no server size to choose and no bill that says "hosting" on it. That is mostly good news. The part that confuses people is everything around it: which bits cost credits, what a custom domain needs, and what actually happens when you try to host a Lovable app somewhere else.&lt;/p&gt;

&lt;p&gt;Everything below was checked against Lovable's own docs on October 17, 2026.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Lovable hosting gives you
&lt;/h2&gt;

&lt;p&gt;Publishing takes a snapshot of your project and puts it live on a &lt;code&gt;lovable.app&lt;/code&gt; address. HTTPS is set up for you, including on a custom domain, and the site is served from locations around the world, so a visitor in Sydney isn't waiting on a server in Virginia. The snapshot part matters more than people expect: whatever you change after publishing stays in the editor until you click &lt;strong&gt;Publish changes&lt;/strong&gt;. Half the "my fix didn't go live" messages we get are this.&lt;/p&gt;

&lt;p&gt;Publishing to &lt;code&gt;lovable.app&lt;/code&gt; is free on every plan. A custom domain needs a paid plan. Your plan doesn't cap visitors or bandwidth either, with one exception: on the Free plan, apps created from May 13, 2026 get 1,000 server requests per project per 10 seconds, and anyone over that sees an "App temporarily unavailable" page for a minute. Fine for a side project, a bit nervy if you're about to be on a podcast.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hosting is free. The backend isn't.
&lt;/h2&gt;

&lt;p&gt;This is the line to remember. Lovable's docs say a live site doesn't consume credits on its own. What costs money is the work your app does while it runs: database reads and writes, file storage, network traffic, edge functions and any AI calls your users trigger. Those all draw from the same credit balance you build with, under the name run credits. There is a temporary grant of 20 Cloud credits a month on Free, Pro and Business, plus 4 for AI, and anything above that comes out of your credits.&lt;/p&gt;

&lt;p&gt;So "how much does Lovable hosting cost" has an annoying answer. The pages are free, and the app behind them is metered. A brochure site with a contact form costs close to nothing. A marketplace where every page load runs six queries and a thumbnail resize does not, and that bill grows with your users, not with how much you build. If you want the number for your own app, the free &lt;a href="https://lovable2live.com/tools/lovable-cost-check/" rel="noopener noreferrer"&gt;Lovable cost check&lt;/a&gt; reads your repo and estimates what running it costs on Lovable Cloud and on three other setups.&lt;/p&gt;

&lt;p&gt;Running out of credits doesn't take the site down, by the way. The pages stay up, but anything that leans on the backend or AI can pause until credits come back, and a paused backend might need you to open More, Cloud, Overview and click Wake up. A site that loads with every form broken is arguably worse than one that's down.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hosting a Lovable app somewhere else
&lt;/h2&gt;

&lt;p&gt;You own the code, and you can host it anywhere. How hard that is depends on which of two stacks your project is on, and most guides online were written before the second one existed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/.%2Flovable-hosting%2Flovable-hosting-two-stacks.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/.%2Flovable-hosting%2Flovable-hosting-two-stacks.webp" alt="Two Lovable stacks side by side: older React + Vite apps go to any static host, TanStack Start apps need a host that runs server code" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Older React + Vite apps&lt;/strong&gt; build to a folder of static files in &lt;code&gt;dist/&lt;/code&gt;. Any static host works: Netlify, Cloudflare Pages, an S3 bucket behind CloudFront, plain Nginx. The only gotcha is client-side routing. Without a fallback to &lt;code&gt;index.html&lt;/code&gt;, every deep link like &lt;code&gt;/dashboard/settings&lt;/code&gt; returns a 404 on refresh, and you'll find out from a user, not from testing the home page.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TanStack Start apps&lt;/strong&gt;, which is every project created from May 13, 2026, render on the server. They need a host that runs code, not one that only serves files. The build uses Nitro, which picks a preset for the platform it detects. Vercel, Netlify and Cloudflare Pages are detected automatically. For a VPS or a container you build with &lt;code&gt;NITRO_PRESET=node-server npm run build&lt;/code&gt; and run it with Node 22.&lt;/p&gt;

&lt;p&gt;We had a founder last month who moved a new TanStack Start app to Netlify by dragging the &lt;code&gt;dist&lt;/code&gt; folder into the deploy box, the way he'd done with an older project. The home page loaded fine, so he switched the domain. Every server function returned a 404, which meant signup was broken for about six hours before anyone wrote in. Static upload versus a real build from the repo, and the difference didn't show up on the one page he checked.&lt;/p&gt;

&lt;p&gt;To find out which stack you're on, open &lt;code&gt;package.json&lt;/code&gt; in the Code tab. If it lists &lt;code&gt;@tanstack/react-start&lt;/code&gt;, you're on the new one.&lt;/p&gt;

&lt;h2&gt;
  
  
  The frontend is the easy half
&lt;/h2&gt;

&lt;p&gt;Moving the pages takes an afternoon. What people really want, nine times out of ten, is to stop paying run credits for the database, and that means moving the backend. If you only move the frontend, your app keeps talking to Lovable Cloud, and the metered part of the bill doesn't change at all.&lt;/p&gt;

&lt;p&gt;The environment variables are where this bites. A TanStack Start app on Cloud needs four values on the new host: &lt;code&gt;VITE_SUPABASE_URL&lt;/code&gt; and &lt;code&gt;VITE_SUPABASE_PUBLISHABLE_KEY&lt;/code&gt; for the browser, &lt;code&gt;SUPABASE_URL&lt;/code&gt; and &lt;code&gt;SUPABASE_PUBLISHABLE_KEY&lt;/code&gt; for the server. The &lt;code&gt;VITE_&lt;/code&gt; ones are baked in at build time, so setting them after the build does nothing. Then add your new URL to the sign-in redirect list, or login will bounce people back to the old domain.&lt;/p&gt;

&lt;p&gt;Moving the backend is a different job: your database, users, storage files, edge functions and secrets go to your own Supabase project, and the app gets pointed at it. Lovable's export covers the database and users, but the rest you carry over by hand. That's the job we do as a fixed-price &lt;a href="https://lovable2live.com/cloud-to-supabase/" rel="noopener noreferrer"&gt;Cloud to Supabase migration&lt;/a&gt;, and you can keep building in Lovable afterwards.&lt;/p&gt;

&lt;h2&gt;
  
  
  Should you leave Lovable hosting at all?
&lt;/h2&gt;

&lt;p&gt;Mostly no. If your app is a frontend plus a modest backend, Lovable hosting is fast, has HTTPS and a CDN, and costs you nothing until the backend works hard. We'd leave it alone.&lt;/p&gt;

&lt;p&gt;Move the frontend when you need your own deployment pipeline, a compliance rule says where the app must run, or you're adding a second app that shares the codebase. Move the backend when run credits have become a real line on your bill, or when you need things Cloud doesn't give you: your own Postgres extensions, direct database access for a reporting tool, a staging copy of production data.&lt;/p&gt;

&lt;p&gt;If you're somewhere in between and not sure which half is costing you, run the &lt;a href="https://lovable2live.com/tools/lovable-cost-check/" rel="noopener noreferrer"&gt;cost check&lt;/a&gt; first. If you'd rather hand the whole move to someone, our &lt;a href="https://lovable2live.com/pricing/" rel="noopener noreferrer"&gt;pricing&lt;/a&gt; is on the site.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://lovable2live.com/blog/lovable-hosting/" rel="noopener noreferrer"&gt;lovable2live.com&lt;/a&gt;. Aakash Verma, software developer and founder of Lovable 2 Live.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>lovablehosting</category>
      <category>lovablecloud</category>
      <category>deployment</category>
    </item>
    <item>
      <title>Lovable to React Native: What Carries Over</title>
      <dc:creator>Aakash Verma</dc:creator>
      <pubDate>Mon, 19 Oct 2026 02:57:34 +0000</pubDate>
      <link>https://dev.to/batmanofweb/lovable-to-react-native-what-carries-over-2hoi</link>
      <guid>https://dev.to/batmanofweb/lovable-to-react-native-what-carries-over-2hoi</guid>
      <description>&lt;p&gt;"It's already React, so moving my Lovable app to React Native should be quick, right?"&lt;/p&gt;

&lt;p&gt;We hear some version of this every week, and the answer is "partly". Lovable gives you React, TypeScript, Tailwind, shadcn/ui and Supabase. React Native shares exactly one of those with the web in any meaningful way, and it's the first one. Knowing which parts survive the move is most of the estimate.&lt;/p&gt;

&lt;h2&gt;
  
  
  The parts you keep
&lt;/h2&gt;

&lt;p&gt;More than people expect, as long as the Lovable code wasn't written with everything crammed into components.&lt;/p&gt;

&lt;p&gt;Your Supabase backend doesn't move at all. Same tables, same row level security policies, same edge functions. The mobile app is just another client. &lt;code&gt;@supabase/supabase-js&lt;/code&gt; runs fine in React Native, you need &lt;code&gt;import 'react-native-url-polyfill/auto'&lt;/code&gt; at the top of the client file and that's about it.&lt;/p&gt;

&lt;p&gt;TypeScript types, the generated &lt;code&gt;Database&lt;/code&gt; type from Supabase, zod schemas, date helpers, price formatting, validation rules: all of that copies straight into a &lt;code&gt;shared/&lt;/code&gt; folder. So do the TanStack Query hooks, if Lovable used them (it usually does). A hook like &lt;code&gt;useOrders()&lt;/code&gt; that calls Supabase and returns data has nothing web-specific in it.&lt;/p&gt;

&lt;p&gt;If your business logic lives in those hooks, you're in good shape. If it lives inside a 600-line &lt;code&gt;Dashboard.tsx&lt;/code&gt; mixed with JSX and &lt;code&gt;className&lt;/code&gt; strings, the first job is pulling it out, and we do that on the web codebase before writing a single native screen.&lt;/p&gt;

&lt;h2&gt;
  
  
  The parts you rewrite
&lt;/h2&gt;

&lt;p&gt;Every screen. There's no way around it and nobody should sell you one.&lt;/p&gt;

&lt;p&gt;React Native has no &lt;code&gt;div&lt;/code&gt;, no &lt;code&gt;span&lt;/code&gt;, no CSS. It has &lt;code&gt;View&lt;/code&gt;, &lt;code&gt;Text&lt;/code&gt;, &lt;code&gt;Pressable&lt;/code&gt; and a style system that looks like CSS but isn't. Tailwind classes can come along through NativeWind, which we use on most projects because it lets the team keep thinking in &lt;code&gt;px-4 rounded-xl&lt;/code&gt;, but plenty of classes don't map and grid layout doesn't exist.&lt;/p&gt;

&lt;p&gt;shadcn/ui is the bigger loss. It's built on Radix, and Radix is DOM all the way down. Every Dialog, DropdownMenu, Popover, Toast and Select in your Lovable app needs a native replacement. Some are easy (a Select becomes a bottom sheet, which is better on a phone anyway). Some aren't. A data table with sorting and column resizing is a week on its own, and usually the right answer is a different design for mobile rather than a port.&lt;/p&gt;

&lt;p&gt;Routing moves from &lt;code&gt;react-router-dom&lt;/code&gt; to Expo Router. File-based, so the structure feels familiar, but deep links and the back stack behave differently and you'll want to plan them rather than discover them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Auth is where the first week goes
&lt;/h2&gt;

&lt;p&gt;This is the one that catches everybody, and it caught us on our first Lovable conversion too.&lt;/p&gt;

&lt;p&gt;On the web, Supabase stores the session in &lt;code&gt;localStorage&lt;/code&gt; and handles OAuth by redirecting the browser and reading the token from the URL. Neither exists in React Native. You set up the client like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="nf"&gt;createClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;anonKey&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;storage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;AsyncStorage&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;autoRefreshToken&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;persistSession&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;detectSessionInUrl&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and then Google sign-in needs either &lt;code&gt;expo-auth-session&lt;/code&gt; with a custom scheme redirect, or the native &lt;code&gt;@react-native-google-signin/google-signin&lt;/code&gt; package with its own iOS and Android client IDs in Google Cloud. The redirect URL you had in Supabase's auth settings for the web won't work. You add &lt;code&gt;myapp://auth-callback&lt;/code&gt; and allow it.&lt;/p&gt;

&lt;p&gt;We had a client whose Google login worked perfectly in Expo Go and failed silently in the TestFlight build. No error, the browser sheet just closed and nothing happened. The custom scheme in &lt;code&gt;app.json&lt;/code&gt; was &lt;code&gt;myapp&lt;/code&gt;, the redirect in Supabase was &lt;code&gt;myApp://&lt;/code&gt;, and iOS treats schemes as case-sensitive in exactly that spot. Half a day.&lt;/p&gt;

&lt;p&gt;Then there's Apple. If your app offers Google sign-in, App Store guideline 4.8 means you need Sign in with Apple too (or an equivalent privacy-focused option). Supabase supports it, but it needs an Apple service ID, a key file and about an hour of clicking around developer.apple.com. Plan for it from day one, it's the most common reason we see a first submission bounce.&lt;/p&gt;

&lt;p&gt;Store tokens in &lt;code&gt;expo-secure-store&lt;/code&gt; instead of AsyncStorage if your app handles anything sensitive. It has a 2 KB per-value limit on some platforms, which a Supabase session can exceed, so you end up splitting the value or encrypting into AsyncStorage with a key from SecureStore. Annoying, but it's a known pattern.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrap first, rewrite later?
&lt;/h2&gt;

&lt;p&gt;Sometimes, yes. If the goal is to get into the stores this month to test demand, wrapping the Lovable web app in Capacitor is faster and cheaper, and we'll say so. It's also the route most likely to get a guideline 4.2 rejection from Apple if the app is just a website in a frame, so the wrap needs real native features: push notifications, a native tab bar, offline handling.&lt;/p&gt;

&lt;p&gt;React Native with Expo is what we'd pick when the app is the product, when people will open it daily, or when you need things a web view does badly: background location, smooth lists of thousands of rows, camera work, widgets. EAS Build means you don't need a Mac on every developer's desk, and over-the-air updates let you ship fixes without waiting for review.&lt;/p&gt;

&lt;p&gt;How long the React Native version takes depends far more on how messy the web code is, and how many shadcn components need a native rethink, than on the number of screens.&lt;/p&gt;

&lt;p&gt;If you want a straight answer on which route fits your app, &lt;a href="https://lovable2app.com/contact/" rel="noopener noreferrer"&gt;send us the Lovable project&lt;/a&gt; and we'll look at the code before quoting.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://lovable2app.com/blog/lovable-to-react-native/" rel="noopener noreferrer"&gt;lovable2app.com&lt;/a&gt;. Aakash Verma, software developer and founder of Lovable 2 Live.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>reactnative</category>
      <category>expo</category>
      <category>lovable</category>
      <category>mobileapp</category>
    </item>
    <item>
      <title>Lovable Supabase: Bring Your Own Project</title>
      <dc:creator>Aakash Verma</dc:creator>
      <pubDate>Sun, 18 Oct 2026 00:57:58 +0000</pubDate>
      <link>https://dev.to/batmanofweb/lovable-supabase-bring-your-own-project-4bb9</link>
      <guid>https://dev.to/batmanofweb/lovable-supabase-bring-your-own-project-4bb9</guid>
      <description>&lt;p&gt;Every new Lovable project gets Lovable Cloud by default, and Cloud is Supabase underneath. So "Lovable Supabase" means two different things depending on who's asking. Most people mean the integration: you connect a Supabase project that you own, Supabase bills you, and Lovable builds against it. That is the setup this post is about, because it's the one we put clients on when an app is going to have real users.&lt;/p&gt;

&lt;p&gt;If your app already runs on Cloud and you want out, skip to the end. That is a different job.&lt;/p&gt;

&lt;h2&gt;
  
  
  Connecting it takes two people (sometimes)
&lt;/h2&gt;

&lt;p&gt;The docs split the connection into two steps, and they're split for a reason.&lt;/p&gt;

&lt;p&gt;First, someone links a Supabase organization to the Lovable workspace. Only workspace owners and admins can do that. You'll find it on the Connectors page, or under More, then Cloud, inside a project. Once an org is linked, everyone in the workspace can see its projects, even people with no Supabase account of their own.&lt;/p&gt;

&lt;p&gt;Second, anyone with edit access connects a Lovable project to one Supabase project from that org. In the Cloud view it's the "Already have a Supabase project? Connect it here" link, then Connect next to the project you want.&lt;/p&gt;

&lt;p&gt;This is where agencies and freelancers get stuck. A founder invites a developer as an editor, the developer goes to connect Supabase, and the "Add Organization" button is greyed out. Nothing is broken. The founder has to do step one, or make the developer an admin. We've had a call stall for twenty minutes on exactly that.&lt;/p&gt;

&lt;p&gt;Do it at the start if you can. Connecting your own project to a brand new Lovable app is ten minutes. Lovable has no one-click migration between Cloud and your own Supabase, in either direction, so choosing late costs real work.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Lovable does once it's connected
&lt;/h2&gt;

&lt;p&gt;Pretty much what it does on Cloud, but in your project, where you can see it.&lt;/p&gt;

&lt;p&gt;Schema changes come up in chat as SQL and only run when you approve them. Each one is saved as a file under &lt;code&gt;supabase/migrations/&lt;/code&gt; in the repo, and the TypeScript types get regenerated. I like this more than the Cloud flow. You end up with a real migration history in Git, and any developer can read it and replay it on a staging project with the Supabase CLI. Data inserts and updates also need your approval, which is slower but has saved at least one client from a "clean up the test users" prompt that matched real users too.&lt;/p&gt;

&lt;p&gt;Edge functions get written and deployed straight to your project. Lovable reads their logs when something fails, and you can watch them yourself under Edge Functions in the Supabase dashboard. Secrets go in through a masked input, get stored in your project, and Lovable never reads the values back or puts them in code. That's fine. Just know where they live: Supabase dashboard, Edge Functions, Secrets. Not in Lovable.&lt;/p&gt;

&lt;p&gt;Auth is wired to Supabase Auth for email and password. Social logins you turn on yourself in the Supabase dashboard under Authentication, and then Lovable adds the button.&lt;/p&gt;

&lt;p&gt;Lovable also runs its security checks after schema changes, including RLS coverage. Don't treat that as a sign-off. The docs themselves tell you to check every table's policies in the Supabase dashboard before going live, and missing policies are still the most common hole we find in audits. A table with RLS enabled and a &lt;code&gt;using (true)&lt;/code&gt; select policy passes a lot of automated checks.&lt;/p&gt;

&lt;h2&gt;
  
  
  The bits that stay on Cloud
&lt;/h2&gt;

&lt;p&gt;This list is in the docs but people skim past it. With your own Supabase connected, these Lovable features don't apply:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the in-editor Database, Users, Storage, Secrets, Jobs, Usage and Logs views (you use the Supabase dashboard instead)&lt;/li&gt;
&lt;li&gt;managed backups and instance resizing&lt;/li&gt;
&lt;li&gt;auth emails sent by Cloud&lt;/li&gt;
&lt;li&gt;managed Google sign-in and SAML SSO&lt;/li&gt;
&lt;li&gt;signed-in browser testing, and PII scanning of your data&lt;/li&gt;
&lt;li&gt;built-in payments on older React + Vite apps&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Two of those cause real problems.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Email.&lt;/strong&gt; On Cloud, signup confirmations and password resets just arrive. On your own Supabase they go through Supabase's default SMTP, and that server is a toy: 2 messages an hour, and it refuses to send to any address that isn't on your Supabase team. So it works perfectly while you test with your own email, then your first real user never gets a confirmation link. Set up custom SMTP (Resend, Postmark, SES, whatever you like) under Authentication before launch. It's fifteen minutes of work and the most common "nobody can sign up" ticket we see.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Google sign-in.&lt;/strong&gt; Cloud's managed Google login has no equivalent here. You create an OAuth client in Google Cloud Console, paste the client ID and secret into the Supabase Google provider, and add the Supabase callback URL to the client. Then publish the consent screen. If it's left in Testing, only the test users you listed can log in, and everyone else gets an "access blocked" page that looks like your app is broken.&lt;/p&gt;

&lt;h2&gt;
  
  
  Don't share one Supabase project between two Lovable projects
&lt;/h2&gt;

&lt;p&gt;The docs warn about this and I'll repeat it louder. If two Lovable projects connect to the same Supabase project, they overwrite each other's secrets, including &lt;code&gt;LOVABLE_API_KEY&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;A founder we worked with remixed their app to make a "staging" copy and connected the remix to the same Supabase project as production. Felt sensible, same data, quick to test. The remix wrote its own &lt;code&gt;LOVABLE_API_KEY&lt;/code&gt; over the production one, and the production app's AI summary feature started failing with 401s the next morning. Nothing in the production project had changed. It took a while to find, because who looks at a staging remix when prod breaks?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/.%2Flovable-supabase%2Flovable-supabase-shared-project-secrets.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/.%2Flovable-supabase%2Flovable-supabase-shared-project-secrets.webp" alt="A staging remix connected to the same Supabase project overwrites LOVABLE_API_KEY, and the production app gets 401 errors" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Staging gets its own Supabase project. Free tier is fine for that.&lt;/p&gt;

&lt;h2&gt;
  
  
  Disconnecting is gentler than it sounds
&lt;/h2&gt;

&lt;p&gt;Disconnect in the Cloud view and Lovable just stops deploying edge functions and reading your schema. Your code stays in the repo and your data stays in Supabase. You can reconnect later. One gotcha: &lt;code&gt;supabase/config.toml&lt;/code&gt; keeps the project ref from whichever project the code was last linked to. If you point the app at a different project, check that file, or the CLI deploys to the old one.&lt;/p&gt;

&lt;h2&gt;
  
  
  Already on Lovable Cloud?
&lt;/h2&gt;

&lt;p&gt;Then connecting a Supabase project isn't a switch you flip, so check first whether it saves you anything: the free &lt;a href="https://lovable2live.com/tools/lovable-cost-check/" rel="noopener noreferrer"&gt;Lovable cost check&lt;/a&gt; compares your current bill with the same app on your own Supabase. You have to move the data, users, files, functions and secrets out of a project you don't own, and the export doesn't take all of that with it. The &lt;a href="https://lovable2live.com/blog/lovable-cloud-to-supabase-migration-checklist/" rel="noopener noreferrer"&gt;Cloud to Supabase migration checklist&lt;/a&gt; shows what breaks, and we do the move as a fixed-scope job, see &lt;a href="https://lovable2live.com/cloud-to-supabase/" rel="noopener noreferrer"&gt;Lovable Cloud to Supabase migration&lt;/a&gt;. If you're starting fresh and want it set up properly from day one (SMTP, Google OAuth, RLS, staging), &lt;a href="https://lovable2live.com/contact/" rel="noopener noreferrer"&gt;tell us about the app&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://lovable2live.com/blog/lovable-supabase/" rel="noopener noreferrer"&gt;lovable2live.com&lt;/a&gt;. Aakash Verma, software developer and founder of Lovable 2 Live.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>lovablesupabase</category>
      <category>supabase</category>
      <category>lovablebackend</category>
    </item>
    <item>
      <title>Capacitor 8 Upgrade for Lovable Apps</title>
      <dc:creator>Aakash Verma</dc:creator>
      <pubDate>Sat, 17 Oct 2026 00:35:28 +0000</pubDate>
      <link>https://dev.to/batmanofweb/capacitor-8-upgrade-for-lovable-apps-jg6</link>
      <guid>https://dev.to/batmanofweb/capacitor-8-upgrade-for-lovable-apps-jg6</guid>
      <description>&lt;p&gt;If you wrapped your Lovable app with Capacitor in the last year, it's almost certainly on Capacitor 7, and Capacitor 7 targets Android API 35. Since August 31, 2026, Google Play only accepts new apps and app updates that target Android 16, API 36. Your app stays in the store. You just can't ship a bug fix until you move. Google lets you request an extension, and that extension ends November 1, 2026.&lt;/p&gt;

&lt;p&gt;So the Capacitor 8 upgrade isn't optional, and we've done a run of them for Lovable apps lately. The actual upgrade is mostly one command. What eats the afternoon is everything around it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fix your machine before you touch the project
&lt;/h2&gt;

&lt;p&gt;Capacitor 8 wants newer tools than most people have installed, and &lt;code&gt;npx cap migrate&lt;/code&gt; doesn't check most of them for you. From the official update guide:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Node 22 or newer&lt;/li&gt;
&lt;li&gt;Xcode 26.0+ for iOS, and the iOS deployment target goes up to 15.0&lt;/li&gt;
&lt;li&gt;Android Studio Otter (2025.2.1) or newer&lt;/li&gt;
&lt;li&gt;JDK 21. The migrate command prints "Capacitor 8 requires JDK 21 or higher. Some steps may fail." if you're on 17, and then carries on anyway&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Android Studio one catches people. Open a migrated project in an older Android Studio and Gradle sync dies with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;The project is using an incompatible version (AGP 8.13.0) of the Android Gradle plugin. Latest supported version is AGP 8.12.2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's not your project being broken. It's your IDE being two months old. Update Android Studio first and you never see it.&lt;/p&gt;

&lt;p&gt;On the Lovable side there's nothing to do. Lovable doesn't know Capacitor exists. Your &lt;code&gt;android/&lt;/code&gt; and &lt;code&gt;ios/&lt;/code&gt; folders live in your GitHub repo (or on your laptop), and Lovable keeps editing &lt;code&gt;src/&lt;/code&gt; as before. Do the upgrade on a branch, though. If Lovable pushes to &lt;code&gt;main&lt;/code&gt; while you're halfway through, you'll be untangling a merge in &lt;code&gt;package-lock.json&lt;/code&gt;, which is nobody's idea of fun.&lt;/p&gt;

&lt;h2&gt;
  
  
  Running the migration
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm i &lt;span class="nt"&gt;-D&lt;/span&gt; @capacitor/cli@latest
npx cap migrate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It asks "Capacitor 8 sets a deployment target of iOS 15 and Android 16 (SDK 36). Are you sure you want to migrate?", asks which package manager you use, and then does a surprising amount. It bumps &lt;code&gt;@capacitor/core&lt;/code&gt;, &lt;code&gt;cli&lt;/code&gt;, &lt;code&gt;ios&lt;/code&gt;, &lt;code&gt;android&lt;/code&gt; and every official &lt;code&gt;@capacitor/*&lt;/code&gt; plugin to &lt;code&gt;^8.0.0&lt;/code&gt;. It sets &lt;code&gt;minSdkVersion = 24&lt;/code&gt;, &lt;code&gt;compileSdkVersion = 36&lt;/code&gt; and &lt;code&gt;targetSdkVersion = 36&lt;/code&gt; in &lt;code&gt;android/variables.gradle&lt;/code&gt;, along with all the AndroidX versions. It moves Gradle to 8.14.3, the Android Gradle plugin to 8.13.0 and Kotlin to 2.2.20. It sets the iOS deployment target to 15.0 in the Xcode project (and the Podfile, if you use CocoaPods). It adds &lt;code&gt;density&lt;/code&gt; to &lt;code&gt;android:configChanges&lt;/code&gt; in the manifest, so the WebView stops reloading when the app is resized. Then it runs &lt;code&gt;cap sync&lt;/code&gt; and lists the plugins you use that have breaking changes.&lt;/p&gt;

&lt;p&gt;It will not touch your web code or &lt;code&gt;capacitor.config.ts&lt;/code&gt;, and it won't help with third-party plugins. That last one is where most of our time goes. One client app had a community in-app purchase plugin pinned to a version with a Capacitor 7 peer dependency, and &lt;code&gt;npm install&lt;/code&gt; refused to resolve until we bumped it, and the newer version had renamed two methods. Check every non-&lt;code&gt;@capacitor/&lt;/code&gt; plugin in your &lt;code&gt;package.json&lt;/code&gt; before you start, and look at its changelog for an 8.x release. If one has no 8.x release yet, that's your real blocker, not Capacitor.&lt;/p&gt;

&lt;h2&gt;
  
  
  The config key that silently stops working
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;android.adjustMarginsForEdgeToEdge&lt;/code&gt; is gone in Capacitor 8. A lot of wrapped apps set it to &lt;code&gt;'auto'&lt;/code&gt; or &lt;code&gt;'force'&lt;/code&gt; last year as the quick fix for Android 15 drawing content under the status bar. After the upgrade the key does nothing, there's no error, and your header slides back under the clock.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/.%2Fcapacitor-8-upgrade%2Fcapacitor-8-edge-to-edge-before-after.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/.%2Fcapacitor-8-upgrade%2Fcapacitor-8-edge-to-edge-before-after.webp" alt="Before and after on Android 16: with the removed config key the header sits under the clock, with safe-area CSS it sits below it"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The replacement is CSS. Capacitor 8 ships a System Bars API inside &lt;code&gt;@capacitor/core&lt;/code&gt; (there is no &lt;code&gt;@capacitor/system-bars&lt;/code&gt; package to install, people keep trying), and it injects &lt;code&gt;--safe-area-inset-top&lt;/code&gt; and friends so you can pad your fixed header and bottom nav. The status bar plugin's &lt;code&gt;setOverlaysWebView()&lt;/code&gt; and &lt;code&gt;setBackgroundColor()&lt;/code&gt; don't work on Android 16 at all. I went through the CSS for this in the &lt;a href="https://lovable2app.com/blog/capacitor-splash-screen-status-bar/" rel="noopener noreferrer"&gt;splash screen and status bar post&lt;/a&gt;, so I won't repeat it here. Just delete the dead config key so the next person doesn't think it's doing something.&lt;/p&gt;

&lt;h2&gt;
  
  
  Smaller things that bit us
&lt;/h2&gt;

&lt;p&gt;Geolocation's &lt;code&gt;timeout&lt;/code&gt; option now applies to every request. Before, on Android, it only applied in some cases. If you had a 5 second timeout that "worked fine", it may start throwing on slow GPS fixes indoors. Bump it or handle the error.&lt;/p&gt;

&lt;p&gt;Android Studio will offer to upgrade the Android Gradle plugin to 9. Say no for now. If you already said yes, older builds of the haptics and keyboard plugins fail with "&lt;code&gt;getDefaultProguardFile('proguard-android.txt')&lt;/code&gt; is no longer supported since it includes &lt;code&gt;-dontoptimize&lt;/code&gt;". Version 8.0.1 of both fixes it.&lt;/p&gt;

&lt;p&gt;Swift Package Manager is now the default for new iOS projects. Existing ones stay on CocoaPods, which is fine. But if you ever delete &lt;code&gt;ios/&lt;/code&gt; and run &lt;code&gt;npx cap add ios&lt;/code&gt; again, you get an SPM project with no &lt;code&gt;App.xcworkspace&lt;/code&gt;, and any Fastlane or CI config that points at the workspace breaks with "No .xcworkspace file found". Either point it at &lt;code&gt;App.xcodeproj&lt;/code&gt; or re-add with &lt;code&gt;npx cap add ios --packagemanager CocoaPods&lt;/code&gt;. I'd move to SPM eventually. Not in the same week as a forced Play Store upgrade.&lt;/p&gt;

&lt;p&gt;Test on a real Android 16 phone before you upload. The emulator is fine for most of it, but we've seen a bottom tab bar sitting behind the gesture bar that only showed up on a physical Pixel.&lt;/p&gt;

&lt;p&gt;If you'd rather hand this off, it's the kind of job we do in a couple of days, including the plugin archaeology. &lt;a href="https://lovable2app.com/contact/" rel="noopener noreferrer"&gt;Send us the repo&lt;/a&gt; or see the &lt;a href="https://lovable2app.com/#pricing" rel="noopener noreferrer"&gt;app packages&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://lovable2app.com/blog/capacitor-8-upgrade/" rel="noopener noreferrer"&gt;lovable2app.com&lt;/a&gt;. Aakash Verma, software developer and founder of Lovable 2 Live.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>capacitor8</category>
      <category>capacitor</category>
      <category>android</category>
      <category>lovable</category>
    </item>
    <item>
      <title>How Much Does Lovable Cost Per Month?</title>
      <dc:creator>Aakash Verma</dc:creator>
      <pubDate>Fri, 16 Oct 2026 01:37:32 +0000</pubDate>
      <link>https://dev.to/batmanofweb/how-much-does-lovable-cost-per-month-o4</link>
      <guid>https://dev.to/batmanofweb/how-much-does-lovable-cost-per-month-o4</guid>
      <description>&lt;p&gt;How much does Lovable cost? You can &lt;a href="https://lovable2live.com/blog/is-lovable-free/" rel="noopener noreferrer"&gt;start for $0&lt;/a&gt;. The moment you want your own domain, you're on Pro, and Pro starts at $25 a month. That's the number on the pricing page, and for a landing page it's roughly the whole bill.&lt;/p&gt;

&lt;p&gt;For an app people actually log into, the plan is only the first line. Since Lovable moved everything onto one credit balance in June 2026, the same credits that pay for your prompts also pay for your app running: the database, file storage, traffic, edge functions and any AI calls your users trigger. So the real Lovable cost per month is "the tier you need for building plus the tier you need for running", and the second part grows with your users, not with you.&lt;/p&gt;

&lt;p&gt;I wrote about &lt;a href="https://lovable2live.com/blog/lovable-pricing/" rel="noopener noreferrer"&gt;where the credits go when you build&lt;/a&gt; a few days ago. This one is about the whole monthly bill.&lt;/p&gt;

&lt;h2&gt;
  
  
  The prices this is built on
&lt;/h2&gt;

&lt;p&gt;All from Lovable's own docs, checked on October 14, 2026:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Free&lt;/th&gt;
&lt;th&gt;Pro&lt;/th&gt;
&lt;th&gt;Business&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Monthly price (100 credits)&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;td&gt;$25&lt;/td&gt;
&lt;td&gt;$50&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bigger tiers&lt;/td&gt;
&lt;td&gt;none&lt;/td&gt;
&lt;td&gt;200 for $50, 400 for $100, up to 10,000 for $2,250&lt;/td&gt;
&lt;td&gt;about double the Pro price&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Top-up credits&lt;/td&gt;
&lt;td&gt;none&lt;/td&gt;
&lt;td&gt;$15 per 50&lt;/td&gt;
&lt;td&gt;$30 per 50&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Daily build credits&lt;/td&gt;
&lt;td&gt;5 a day, max 30 a month&lt;/td&gt;
&lt;td&gt;5 a day&lt;/td&gt;
&lt;td&gt;5 a day&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Monthly Cloud grant&lt;/td&gt;
&lt;td&gt;20 credits&lt;/td&gt;
&lt;td&gt;20 credits&lt;/td&gt;
&lt;td&gt;20 credits&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Monthly AI grant&lt;/td&gt;
&lt;td&gt;4 credits&lt;/td&gt;
&lt;td&gt;4 credits&lt;/td&gt;
&lt;td&gt;4 credits&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Custom domain, code editing, no badge&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Annual billing knocks off two months. The Cloud and AI grants are labelled "temporary offering, subject to change", so don't build a business plan on them. Business is mostly SSO, team controls and the Lovable API; a solo founder rarely needs it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three example bills
&lt;/h2&gt;

&lt;p&gt;These are illustrations built from the prices above, not anyone's invoice. Your real numbers are in &lt;strong&gt;More → Cloud → Usage&lt;/strong&gt; inside the project.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/.%2Flovable-cost%2Flovable-cost-three-monthly-bills.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/.%2Flovable-cost%2Flovable-cost-three-monthly-bills.webp" alt="Three example monthly Lovable bills as stacked bars: a landing page at about $26, a booking app at about $51, and an AI app with paying users at $100 to $115, with build credits, run credits and outside costs in different colours" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A landing page or portfolio.&lt;/strong&gt; Pro at $25. A static-ish site with a contact form stays inside the 20-credit Cloud grant almost every month, so hosting costs you nothing extra. Add the domain from your registrar, about a dollar a month. Call it $26.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A booking app with a few hundred users.&lt;/strong&gt; You're still shipping changes every week, say 120 credits of building. The app itself uses around 70 run credits a month for its database, a bit of storage and the confirmation emails; the grant covers 20 of those. That's about 170 credits, which means the 200-credit Pro tier at $50. Your transactional email can sit on a free tier (Resend gives 3,000 emails a month), so the total is roughly $51.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;An app with paying users and an AI feature.&lt;/strong&gt; This is where it moves. Building is maybe 150 credits. The database has been resized to a bigger instance because the dashboard got slow, so Cloud is closer to 180 credits. The AI summaries your users click run through Lovable's AI gateway and cost another 60 or so (the 4-credit AI grant barely registers). Around 390 credits a month puts you on the 400 tier at $100, and in a busy month you'll buy a $15 top-up on top. $100 to $115, before Stripe's cut.&lt;/p&gt;

&lt;p&gt;One founder I worked with had exactly that third shape and couldn't work out why their "$25 plan" was charging $100. Nothing was broken. The app had customers.&lt;/p&gt;

&lt;h2&gt;
  
  
  The costs that aren't on Lovable's page
&lt;/h2&gt;

&lt;p&gt;These turn up on a different card statement, so people forget them when they say "Lovable costs $25":&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The domain.&lt;/strong&gt; Bought through Lovable or elsewhere, it's yours to pay for every year.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Your own Supabase&lt;/strong&gt;, if you brought one instead of using Lovable Cloud. Supabase Pro is $25 a month and includes $10 of compute. Then your database stops eating Lovable credits, but you pay Supabase instead.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Email beyond the free tiers.&lt;/strong&gt; Auth emails from the built-in sender are fine for testing, and most launched apps move to Resend or Postmark. (&lt;a href="https://lovable2live.com/blog/lovable-email/" rel="noopener noreferrer"&gt;Why auth emails fail&lt;/a&gt; covers that.)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stripe&lt;/strong&gt;: 2.9% + 30¢ per US card charge on standard pricing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;App stores&lt;/strong&gt;, if you wrap it as a mobile app: Apple charges $99 a year, Google $25 once.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What happens if the credits run out
&lt;/h2&gt;

&lt;p&gt;Your published site stays up. AI features in the app stop answering, and apps on Lovable Cloud can pause until you add credits. That's the bit that hurts, because your users find out before you do. On Pro you can turn on auto top-up with a monthly spend limit: set it. A $45 top-up is cheaper than a weekend of "is your app down?" emails.&lt;/p&gt;

&lt;h2&gt;
  
  
  When the bill is worth cutting
&lt;/h2&gt;

&lt;p&gt;If most of your credits go to building, there's not much to cut: that's the product working as designed. If most go to running, you have options. Moving the database from Lovable Cloud to your own Supabase project turns a variable credit drain into a flat $25, and you keep building in Lovable exactly as before. For the booking app above it saves nothing. For the third app it usually does, and the bigger the instance, the more.&lt;/p&gt;

&lt;p&gt;Don't guess which one you are. Our free &lt;a href="https://lovable2live.com/tools/lovable-cost-check/" rel="noopener noreferrer"&gt;Lovable cost check&lt;/a&gt; reads your repo (read-only, private repos work) and shows what the same app would cost on four setups, with the one-time cost of each. If the answer is "move the database", that's our &lt;a href="https://lovable2live.com/cloud-to-supabase/" rel="noopener noreferrer"&gt;Cloud to Supabase migration&lt;/a&gt;, fixed price from $150.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://lovable2live.com/blog/lovable-cost/" rel="noopener noreferrer"&gt;lovable2live.com&lt;/a&gt;. Aakash Verma, software developer and founder of Lovable 2 Live.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>lovablecost</category>
      <category>lovablepricing</category>
      <category>lovablecloud</category>
      <category>lovablecredits</category>
    </item>
    <item>
      <title>Capacitor Push Notifications for Lovable</title>
      <dc:creator>Aakash Verma</dc:creator>
      <pubDate>Thu, 15 Oct 2026 00:40:20 +0000</pubDate>
      <link>https://dev.to/batmanofweb/capacitor-push-notifications-for-lovable-2boe</link>
      <guid>https://dev.to/batmanofweb/capacitor-push-notifications-for-lovable-2boe</guid>
      <description>&lt;p&gt;Push is the feature that usually makes founders give up on the PWA route and wrap their Lovable app properly. A web app on iPhone only gets push after the user adds it to the home screen, and almost nobody does. Wrap the same React code in Capacitor and you get real push notifications on iOS and Android. Getting Capacitor push notifications working takes an afternoon if you know the traps, and about three days if you don't.&lt;/p&gt;

&lt;p&gt;Here's the version with the traps. (If your reminder only depends on a time the app already knows, like a booking, skip the server entirely and use &lt;a href="https://lovable2app.com/blog/capacitor-local-notifications/" rel="noopener noreferrer"&gt;Capacitor local notifications&lt;/a&gt;.)&lt;/p&gt;

&lt;h2&gt;
  
  
  The token you get on iOS is not the token you think
&lt;/h2&gt;

&lt;p&gt;The official plugin is &lt;code&gt;@capacitor/push-notifications&lt;/code&gt; (v8 at the time of writing). You call &lt;code&gt;register()&lt;/code&gt;, you listen for the &lt;code&gt;registration&lt;/code&gt; event, and you get a token. On Android that's a Firebase Cloud Messaging token. On iOS it's a raw APNs token.&lt;/p&gt;

&lt;p&gt;That difference wrecks people. Your backend sends through FCM because that's what every tutorial uses, the Android test works on the first try, and every iOS send comes back with an invalid registration error. FCM can't do anything with an APNs token.&lt;/p&gt;

&lt;p&gt;You have two ways out. Send iOS notifications straight to APNs and Android through FCM, which means two sending paths, two sets of credentials and twice the debugging. Or swap the official plugin for Capawesome's &lt;code&gt;@capacitor-firebase/messaging&lt;/code&gt;, which pulls in the Firebase iOS SDK and hands you an FCM token on both platforms. We use the second one on almost every Lovable app we ship. One token format, one API call, one table. The cost is a heavier iOS build with Firebase pods in it, and I'll take that trade every time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Apple's side
&lt;/h2&gt;

&lt;p&gt;You need a paid Apple Developer account anyway, so: open Certificates, Identifiers &amp;amp; Profiles, find your App ID, and tick Push Notifications. Then go to Keys, create a key with Apple Push Notifications service enabled, and download the &lt;code&gt;.p8&lt;/code&gt; file. You can download it exactly once. Put it in your password manager before you do anything else.&lt;/p&gt;

&lt;p&gt;In Firebase, open Project settings, then Cloud Messaging, and upload that &lt;code&gt;.p8&lt;/code&gt; with its Key ID and your Team ID.&lt;/p&gt;

&lt;p&gt;Use the key, not a certificate. Firebase still accepts the older &lt;code&gt;.p12&lt;/code&gt; push certificates, and they're split into development and production. That split causes the classic bug. We took over an app from a founder whose push worked perfectly when they ran it from Xcode and never once arrived on TestFlight. They had uploaded a development certificate. Debug builds from Xcode talk to the APNs sandbox, TestFlight and App Store builds talk to production APNs, and their production slot was empty. A &lt;code&gt;.p8&lt;/code&gt; key works for both, doesn't expire every year, and makes the whole category of problem go away.&lt;/p&gt;

&lt;p&gt;In Xcode, add the Push Notifications capability under Signing &amp;amp; Capabilities, and make sure &lt;code&gt;AppDelegate.swift&lt;/code&gt; forwards &lt;code&gt;didRegisterForRemoteNotificationsWithDeviceToken&lt;/code&gt; and &lt;code&gt;didFailToRegisterForRemoteNotificationsWithError&lt;/code&gt; to Capacitor. The plugin docs have the exact snippet. If you skip it, &lt;code&gt;register()&lt;/code&gt; resolves and the &lt;code&gt;registration&lt;/code&gt; event simply never fires, with no error anywhere. Lovely.&lt;/p&gt;

&lt;p&gt;Test on a real iPhone. Don't burn an hour on the simulator.&lt;/p&gt;

&lt;h2&gt;
  
  
  Android's side
&lt;/h2&gt;

&lt;p&gt;Shorter. Download &lt;code&gt;google-services.json&lt;/code&gt; from Firebase and put it in &lt;code&gt;android/app/&lt;/code&gt;. Then two things people forget.&lt;/p&gt;

&lt;p&gt;Android 13 and later need the &lt;code&gt;POST_NOTIFICATIONS&lt;/code&gt; runtime permission, so call &lt;code&gt;checkPermissions()&lt;/code&gt; and &lt;code&gt;requestPermissions()&lt;/code&gt; before &lt;code&gt;register()&lt;/code&gt;. Older tutorials skip this because they were written for Android 12, and on a Pixel 8 you get a token, a successful send, and nothing on screen.&lt;/p&gt;

&lt;p&gt;And create a notification channel with &lt;code&gt;createChannel()&lt;/code&gt; if you want control over importance and sound. Android 8+ files every notification under a channel, and the user can mute channels separately, so give "Order updates" and "Marketing" different channels from day one. Users who can mute your promos will keep your order updates on.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sending from a Lovable backend
&lt;/h2&gt;

&lt;p&gt;Your Lovable app already has a Supabase backend (Lovable Cloud or your own project), so the natural home for sending is an Edge Function.&lt;/p&gt;

&lt;p&gt;Make a &lt;code&gt;device_tokens&lt;/code&gt; table with &lt;code&gt;user_id&lt;/code&gt;, &lt;code&gt;token&lt;/code&gt;, &lt;code&gt;platform&lt;/code&gt; and &lt;code&gt;updated_at&lt;/code&gt;, with RLS so users can only insert and delete their own rows. Upsert the token every time the app starts, because tokens change after reinstalls and restores. The Edge Function signs a short-lived OAuth token with your Firebase service account and calls the FCM HTTP v1 endpoint. The old FCM "server key" API is gone, so any snippet that sends an &lt;code&gt;Authorization: key=...&lt;/code&gt; header is out of date. Delete it.&lt;/p&gt;

&lt;p&gt;When FCM answers a send with &lt;code&gt;UNREGISTERED&lt;/code&gt;, delete that token row. Skip this and after six months half your table is dead tokens and your send logs are a wall of errors you've trained yourself to ignore.&lt;/p&gt;

&lt;p&gt;Keep the service account JSON in Edge Function secrets. I've seen it pasted into a Lovable chat prompt, which puts it in the project history. Don't.&lt;/p&gt;

&lt;h2&gt;
  
  
  Things the plugin won't do
&lt;/h2&gt;

&lt;p&gt;It doesn't support iOS silent push (background "content-available" pushes that wake the app). If you need background sync triggered by the server, that's native code or a different plugin.&lt;/p&gt;

&lt;p&gt;On Android, data-only messages don't reach your &lt;code&gt;pushNotificationReceived&lt;/code&gt; listener if the app was killed. Send a notification payload for anything the user must see.&lt;/p&gt;

&lt;p&gt;When the app is open in the foreground, iOS shows nothing by default. Set &lt;code&gt;presentationOptions&lt;/code&gt; in &lt;code&gt;capacitor.config.ts&lt;/code&gt; to something like &lt;code&gt;["badge", "sound", "alert"]&lt;/code&gt; or your users will miss every push that arrives while they're using the app, which is exactly when your chat feature needs them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ask at the right moment
&lt;/h2&gt;

&lt;p&gt;iOS gives you one system permission prompt. If the user taps "Don't Allow", the only way back is Settings, and nobody goes to Settings.&lt;/p&gt;

&lt;p&gt;So don't ask on first launch. One booking app we built asked on the splash screen and roughly a third of users said yes. We moved the prompt to right after someone booked their first appointment, with a plain line above it: "Want a reminder the day before?" Most people said yes, because now the notification was obviously for them. Same app, same users, the prompt just showed up when it made sense.&lt;/p&gt;

&lt;p&gt;Push is usually the first native feature we add when we turn a Lovable app into a real iOS and Android app, and it's a big part of why &lt;a href="https://lovable2app.com/blog/pwa-vs-native-app-lovable/" rel="noopener noreferrer"&gt;native beats a PWA&lt;/a&gt; for most products. If you're still choosing a wrapper, read &lt;a href="https://lovable2app.com/blog/capacitor-vs-react-native-lovable/" rel="noopener noreferrer"&gt;Capacitor vs React Native&lt;/a&gt; first. Or &lt;a href="https://lovable2app.com/contact/" rel="noopener noreferrer"&gt;tell us about your app&lt;/a&gt; and we'll wire it up for you.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://lovable2app.com/blog/capacitor-push-notifications-lovable/" rel="noopener noreferrer"&gt;lovable2app.com&lt;/a&gt;. Aakash Verma, software developer and founder of Lovable 2 Live.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>capacitorpushnotifications</category>
      <category>lovable</category>
      <category>mobileapp</category>
      <category>capacitor</category>
    </item>
    <item>
      <title>Lovable Cloud: What You Actually Get</title>
      <dc:creator>Aakash Verma</dc:creator>
      <pubDate>Wed, 14 Oct 2026 00:17:39 +0000</pubDate>
      <link>https://dev.to/batmanofweb/lovable-cloud-what-you-actually-get-17cm</link>
      <guid>https://dev.to/batmanofweb/lovable-cloud-what-you-actually-get-17cm</guid>
      <description>&lt;p&gt;Lovable Cloud is the backend Lovable switches on for you the first time your app needs to save something. Ask for a login page or a table of orders and it appears: a database, auth, file storage, edge functions, a place for API keys. Lovable's docs say it plainly, it runs on Supabase's open-source foundation. So when people ask us "what database does Lovable use", the answer is Postgres, inside a Supabase project that Lovable owns and you rent.&lt;/p&gt;

&lt;p&gt;That one sentence explains most of what follows, good and bad.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's in the Cloud tab
&lt;/h2&gt;

&lt;p&gt;Open your project, go to Cloud, and you get a cut-down Supabase dashboard with Lovable's names on it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Database&lt;/strong&gt;: your tables, row editing, the RLS policies, and backup restores.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Users&lt;/strong&gt;: who has signed up, and which sign-in methods are on.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Storage&lt;/strong&gt;: buckets and the files in them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Edge functions&lt;/strong&gt;: the server-side code (Stripe webhooks, emails, anything with a secret key).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Secrets&lt;/strong&gt;, &lt;strong&gt;Logs&lt;/strong&gt;, plus Emails, Jobs, an SQL editor, Usage and Advanced settings.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's a decent set. The SQL editor alone saves a lot of "please add a column" prompts. What you don't get is the real Supabase dashboard, the &lt;code&gt;service_role&lt;/code&gt; key, or a direct Postgres connection string you can hand to another tool. That gap doesn't matter while you're building. It starts to matter the day you want a BI tool on your data, a second app on the same database, or a contractor who works in a normal IDE.&lt;/p&gt;

&lt;h2&gt;
  
  
  The settings that will bite you later
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Region is forever.&lt;/strong&gt; You pick Americas, Europe or Asia Pacific (or "Closest to me") through the "Where project data is stored" setting, and once Cloud is enabled on a project it can't be changed or moved. If your customers are in Germany and the project got created on a US default, the only fix is a new project and a data move. Check this before you have real users, not after.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The instance is small until you pay.&lt;/strong&gt; Advanced settings lists six sizes: Tiny, Mini, Small, Medium, Large and X-Large. Free projects sit on Tiny. The docs don't publish CPU or RAM numbers for any of them, which I find annoying, so you're judging by the resource health cards (CPU, Memory, Disk over the last 24 hours, with "pressure" segments when you hit the ceiling). A resize takes a few minutes and briefly drops the database while it restarts. Do it at 3am your users' time, not during a launch.&lt;/p&gt;

&lt;p&gt;Also, the names moved on July 31, 2026. Old Medium became Large, old Large became X-Large, and a new Medium was slotted in between. If you read a forum post from before August about "Medium being enough", it was talking about a different box.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Disk only grows.&lt;/strong&gt; Database storage has an 8 GB minimum, can be raised up to four times in 24 hours, and can't be shrunk. Same rule as Supabase itself.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dangerous migrations are off by default.&lt;/strong&gt; Each Cloud tool has Always allow, Ask each time or Never allow. Most default to Always allow. The one that defaults to Never allow is "Execute backward incompatible database migrations", which covers dropping or renaming tables and columns. Leave it there. If the agent wants to rename &lt;code&gt;profiles.name&lt;/code&gt; to &lt;code&gt;profiles.full_name&lt;/code&gt;, you want to see that coming.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Lovable Cloud is billed
&lt;/h2&gt;

&lt;p&gt;Cloud doesn't have its own invoice any more. Database, storage, compute, network, realtime and the AI features in your app all spend Run credits from the same balance you build with. Free, Pro and Business each get a 20-credit monthly Cloud grant and a 4-credit AI grant on top, and neither rolls over.&lt;/p&gt;

&lt;p&gt;The part that matters for a live product: when the balance hits zero, the published site stays up but the Cloud backend can pause. Paused means no database, no auth, no storage, no edge functions. Your landing page loads and nobody can log in. We wrote up the full credit math in our &lt;a href="https://lovable2live.com/blog/lovable-pricing/" rel="noopener noreferrer"&gt;Lovable pricing post&lt;/a&gt;, so I won't repeat it here. If you'd rather see it for your own app, the free &lt;a href="https://lovable2live.com/tools/lovable-cost-check/" rel="noopener noreferrer"&gt;Lovable cost check&lt;/a&gt; scans your repo and estimates what Cloud costs you against running the same backend yourself.&lt;/p&gt;

&lt;p&gt;Usage lives under More, Cloud, Usage, broken down by category for up to 90 days. Look at it once a week if you have paying users. It's the only early warning you get.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the export takes, and what it leaves behind
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/.%2Flovable-cloud%2Flovable-cloud-export-included-excluded.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/.%2Flovable-cloud%2Flovable-cloud-export-included-excluded.webp" alt="Lovable Cloud export: tables, users and password hashes go; storage files, edge functions and secrets stay behind" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Lovable Cloud has a native export now, which is a real improvement. It gives you the whole database, structure and data, including user accounts and their password hashes. So your users won't need to reset passwords when you move, as long as the destination is Supabase Auth, which reads the same bcrypt hashes.&lt;/p&gt;

&lt;p&gt;It does not include your storage files, your edge function code, or your secrets. Sign-in provider settings (the Google OAuth client, redirect URLs) and API keys have to be set up again at the destination too. There are hard limits: databases up to 15 GB, export files up to 5 GB, one export per 24 hours, and the backend has to be running when you start it. A project paused for zero credits has to be woken up first.&lt;/p&gt;

&lt;p&gt;We had a founder come to us last month with a "finished" export and a new Supabase project already set up. Tables, rows, users, all there. Then their first customer tried to open an invoice PDF and got a 404, because the 2,300 PDFs were in a Cloud storage bucket that the export never touched. The database rows still pointed at the old bucket URLs. Not hard to fix, but it's exactly the kind of thing you find on a Monday morning from an angry email.&lt;/p&gt;

&lt;p&gt;And don't press Remove until you've checked everything. "Remove Lovable Cloud" deletes the instance permanently, and exports can't be downloaded after it's gone.&lt;/p&gt;

&lt;h2&gt;
  
  
  Is Lovable Cloud enough?
&lt;/h2&gt;

&lt;p&gt;For a prototype, a demo, or an internal tool with a dozen users, yes. Leave it alone and build. It's genuinely convenient, and the alternative (wiring up your own Supabase on day one) is work you don't need yet.&lt;/p&gt;

&lt;p&gt;It stops being enough when any of these are true: you need the &lt;code&gt;service_role&lt;/code&gt; key or a direct connection for another service, you want your backend bill separate from your build credits, you care which region your data lives in and got it wrong, or your app can't afford to go dark because someone on the team used up the credits on a redesign. Moving from Cloud to your own Supabase is manual (Lovable's docs say so, there's no one-click switch), and the &lt;a href="https://lovable2live.com/blog/lovable-cloud-vs-supabase/" rel="noopener noreferrer"&gt;comparison of Lovable Cloud vs Supabase&lt;/a&gt; goes through the trade-offs side by side.&lt;/p&gt;

&lt;p&gt;If you're past that point, our &lt;a href="https://lovable2live.com/cloud-to-supabase/" rel="noopener noreferrer"&gt;Lovable Cloud to Supabase migration&lt;/a&gt; moves the database, users, storage files, functions and secrets for a fixed price, and you keep building in Lovable afterwards. The &lt;a href="https://lovable2live.com/tools/lovable-cloud-migration-check/" rel="noopener noreferrer"&gt;free migration checker&lt;/a&gt; tells you how big the job is first.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://lovable2live.com/blog/lovable-cloud/" rel="noopener noreferrer"&gt;lovable2live.com&lt;/a&gt;. Aakash Verma, software developer and founder of Lovable 2 Live.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>lovablecloud</category>
      <category>lovabledatabase</category>
      <category>supabase</category>
      <category>lovablebackend</category>
    </item>
  </channel>
</rss>
