#web-app — Public Fediverse posts
Live and recent posts from across the Fediverse tagged #web-app, aggregated by home.social.
-
Quilt
En un post anterior hablaba de las compras innecesarias y esta WebApp llamada Quilt creda por Daniel viene al caso. La app nació por la culpa de una compra: el autor la creó luego de haber comprado unos AirPods cuando ya contaba con unos buenos auriculares Sony.
Se propuso entonces crear una app en donde debías renunciar a otros gustos hasta llegar a “devolverte” ese gasto:
“Cuando te gastas más de lo habitual en algo, lo apuntas (también funciona si tienes pensado comprar algo en el futuro). Y luego, cada vez que renuncias a un pequeño capricho — pides el plato más barato, te saltas el café de fuera, eliges el vino de la casa — lo registras. La app va descubriendo un patrón de cuadros (descubriendo una foto de Rico) hasta que la compra queda saldada.”
La idea me parece genial, como se describe la app “No es una app de ahorro. Es una app de reconciliación financiera.”, como para que “amigues” con tus gasto innecesario y disfrutes de tu compra.
Si querés saber más de la webapp puedes leer la presentación que hizo Daniel sobre ella.
-
Quilt
En un post anterior hablaba de las compras innecesarias y esta WebApp llamada Quilt creda por Daniel viene al caso. La app nació por la culpa de una compra: el autor la creó luego de haber comprado unos AirPods cuando ya contaba con unos buenos auriculares Sony.
Se propuso entonces crear una app en donde debías renunciar a otros gustos hasta llegar a “devolverte” ese gasto:
“Cuando te gastas más de lo habitual en algo, lo apuntas (también funciona si tienes pensado comprar algo en el futuro). Y luego, cada vez que renuncias a un pequeño capricho — pides el plato más barato, te saltas el café de fuera, eliges el vino de la casa — lo registras. La app va descubriendo un patrón de cuadros (descubriendo una foto de Rico) hasta que la compra queda saldada.”
La idea me parece genial, como se describe la app “No es una app de ahorro. Es una app de reconciliación financiera.”, como para que “amigues” con tus gasto innecesario y disfrutes de tu compra.
Si querés saber más de la webapp puedes leer la presentación que hizo Daniel sobre ella.
-
Quilt
En un post anterior hablaba de las compras innecesarias y esta WebApp llamada Quilt creda por Daniel viene al caso. La app nació por la culpa de una compra: el autor la creó luego de haber comprado unos AirPods cuando ya contaba con unos buenos auriculares Sony.
Se propuso entonces crear una app en donde debías renunciar a otros gustos hasta llegar a “devolverte” ese gasto:
“Cuando te gastas más de lo habitual en algo, lo apuntas (también funciona si tienes pensado comprar algo en el futuro). Y luego, cada vez que renuncias a un pequeño capricho — pides el plato más barato, te saltas el café de fuera, eliges el vino de la casa — lo registras. La app va descubriendo un patrón de cuadros (descubriendo una foto de Rico) hasta que la compra queda saldada.”
La idea me parece genial, como se describe la app “No es una app de ahorro. Es una app de reconciliación financiera.”, como para que “amigues” con tus gasto innecesario y disfrutes de tu compra.
Si querés saber más de la webapp puedes leer la presentación que hizo Daniel sobre ella.
-
i am going to try layering .svg elements in a web app
-
i am going to try layering .svg elements in a web app
-
i am going to try layering .svg elements in a web app
-
i am going to try layering .svg elements in a web app
-
i am going to try layering .svg elements in a web app
-
New #Saulala Beta update!
- Important pipeline improvements
- UI/UX improvements
- A workaround for iPhone RAW MAX files.#photography #donationware #pwa #webapp
Slightly more info on the forum:
https://saulala.discourse.group/t/saulala-pwa-beta-updates-main-thread/73/last(Saulala is a web-app, made for developing camera-native (raw) files using AgX)
Run it: https://app.saulala.com
-
New #Saulala Beta update!
- Important pipeline improvements
- UI/UX improvements
- A workaround for iPhone RAW MAX files.#photography #donationware #pwa #webapp
Slightly more info on the forum:
https://saulala.discourse.group/t/saulala-pwa-beta-updates-main-thread/73/last(Saulala is a web-app, made for developing camera-native (raw) files using AgX)
Run it: https://app.saulala.com
-
New #Saulala Beta update!
- Important pipeline improvements
- UI/UX improvements
- A workaround for iPhone RAW MAX files.#photography #donationware #pwa #webapp
Slightly more info on the forum:
https://saulala.discourse.group/t/saulala-pwa-beta-updates-main-thread/73/last(Saulala is a web-app, made for developing camera-native (raw) files using AgX)
Run it: https://app.saulala.com
-
New #Saulala Beta update!
- Important pipeline improvements
- UI/UX improvements
- A workaround for iPhone RAW MAX files.#photography #donationware #pwa #webapp
Slightly more info on the forum:
https://saulala.discourse.group/t/saulala-pwa-beta-updates-main-thread/73/last(Saulala is a web-app, made for developing camera-native (raw) files using AgX)
Run it: https://app.saulala.com
-
🎁 WishList – لیست آرزوهای خودت رو بساز و با دوستات به اشتراک بذار!
یه وباپلیکیشن ساده و خودمیزبان (self-hosted) که باهاش میتونی:
✨ پروفایل شخصی بسازی
✨ آرزوهات رو با لینک خرید ثبت کنی
✨ دوستات آرزوهات رو رزرو کنن تا هدیه تکراری نخرن
✨ اعلان دریافت کنی وقتی کسی آرزوت رو رزرو میکنه
✨ پنل مدیریت برای کنترل کاربران و آرزوها
✨ API کامل برای برنامهنویسهاکاملاً آزاد و تحت پروانه AGPLv3
برای اطلاعات بیشتر و نصب:
https://framagit.org/rnjbr/wishlist -
🎁 WishList – لیست آرزوهای خودت رو بساز و با دوستات به اشتراک بذار!
یه وباپلیکیشن ساده و خودمیزبان (self-hosted) که باهاش میتونی:
✨ پروفایل شخصی بسازی
✨ آرزوهات رو با لینک خرید ثبت کنی
✨ دوستات آرزوهات رو رزرو کنن تا هدیه تکراری نخرن
✨ اعلان دریافت کنی وقتی کسی آرزوت رو رزرو میکنه
✨ پنل مدیریت برای کنترل کاربران و آرزوها
✨ API کامل برای برنامهنویسهاکاملاً آزاد و تحت پروانه AGPLv3
برای اطلاعات بیشتر و نصب:
https://framagit.org/rnjbr/wishlist -
🎁 WishList – لیست آرزوهای خودت رو بساز و با دوستات به اشتراک بذار!
یه وباپلیکیشن ساده و خودمیزبان (self-hosted) که باهاش میتونی:
✨ پروفایل شخصی بسازی
✨ آرزوهات رو با لینک خرید ثبت کنی
✨ دوستات آرزوهات رو رزرو کنن تا هدیه تکراری نخرن
✨ اعلان دریافت کنی وقتی کسی آرزوت رو رزرو میکنه
✨ پنل مدیریت برای کنترل کاربران و آرزوها
✨ API کامل برای برنامهنویسهاکاملاً آزاد و تحت پروانه AGPLv3
برای اطلاعات بیشتر و نصب:
https://framagit.org/rnjbr/wishlist -
🎁 WishList – لیست آرزوهای خودت رو بساز و با دوستات به اشتراک بذار!
یه وباپلیکیشن ساده و خودمیزبان (self-hosted) که باهاش میتونی:
✨ پروفایل شخصی بسازی
✨ آرزوهات رو با لینک خرید ثبت کنی
✨ دوستات آرزوهات رو رزرو کنن تا هدیه تکراری نخرن
✨ اعلان دریافت کنی وقتی کسی آرزوت رو رزرو میکنه
✨ پنل مدیریت برای کنترل کاربران و آرزوها
✨ API کامل برای برنامهنویسهاکاملاً آزاد و تحت پروانه AGPLv3
برای اطلاعات بیشتر و نصب:
https://framagit.org/rnjbr/wishlist -
Vaadin 25.2: Build UIs in plain language, and call the browser from Java
-
Vaadin 25.2: Build UIs in plain language, and call the browser from Java
-
Vaadin 25.2: Build UIs in plain language, and call the browser from Java
-
Vaadin 25.2: Build UIs in plain language, and call the browser from Java
-
Vaadin 25.2: Build UIs in plain language, and call the browser from Java
-
📰 «Loxik, cinco divertidos juegos diarios en español»
🔗 https://proxy.jesusysustics.com/2026/06/30884/ Loxik: una colección de juegos diarios de palabras y lógica, en español https://www.microsiervos.com/archivo/juegos-y-diversion/loxik-juegos-palabras-logica-espanol.html────────────────────
Por si no tuviéramos suficientes juegos diarios, llega Loxik para añadir cinco nuevas opciones adictivas y en español. No inventa nada nuevo sino que son juegos ya clásicos diosponibles en inglés que le dan un girito al Wordle (en algunos casos, un giro literal) que añade variedad y los acerca a público hispanohablante.
Todos los juegos son bastante intuitivos, pero por si no pillamos la dinámica tenemos sus normas al iniciarnos por primera vez. También cuenta con un tablero de puntuaciones para comparar tus resultados con los de otros participantes y un calendario para ver los acertijos de días anteriores. Y, por supuesto, funciona perfectamente tanto en el navegador de escritorio como de móvil.
#️⃣ #colección #diario #didáctico #educativo #juego #navegadorWeb #teléfonoMóvil #webapp -
New #Saulala Beta update!
- Fixed a Pixel .DNG bug in the pipeline
- Auto-cropping for DNG-lens-distortion-corrected images
- New "High Purity" viewport mode might help you detect potential issues related to high-purity areas.#photography #donationware #pwa #webapp
Slightly more info on the forum:
https://saulala.discourse.group/t/saulala-pwa-beta-updates-main-thread/73/last(Saulala is a web-app, made for developing camera-native (raw) files using AgX)
Run it: https://app.saulala.com
-
New #Saulala Beta update!
- Fixed a Pixel .DNG bug in the pipeline
- Auto-cropping for DNG-lens-distortion-corrected images
- New "High Purity" viewport mode might help you detect potential issues related to high-purity areas.#photography #donationware #pwa #webapp
Slightly more info on the forum:
https://saulala.discourse.group/t/saulala-pwa-beta-updates-main-thread/73/last(Saulala is a web-app, made for developing camera-native (raw) files using AgX)
Run it: https://app.saulala.com
-
New #Saulala Beta update!
- Fixed a Pixel .DNG bug in the pipeline
- Auto-cropping for DNG-lens-distortion-corrected images
- New "High Purity" viewport mode might help you detect potential issues related to high-purity areas.#photography #donationware #pwa #webapp
Slightly more info on the forum:
https://saulala.discourse.group/t/saulala-pwa-beta-updates-main-thread/73/last(Saulala is a web-app, made for developing camera-native (raw) files using AgX)
Run it: https://app.saulala.com
-
New #Saulala Beta update!
- Fixed a Pixel .DNG bug in the pipeline
- Auto-cropping for DNG-lens-distortion-corrected images
- New "High Purity" viewport mode might help you detect potential issues related to high-purity areas.#photography #donationware #pwa #webapp
Slightly more info on the forum:
https://saulala.discourse.group/t/saulala-pwa-beta-updates-main-thread/73/last(Saulala is a web-app, made for developing camera-native (raw) files using AgX)
Run it: https://app.saulala.com
-
Con PairDrop puoi inviare file, immagini e testo dal browser senza installare app complicate. Perfetto per chi usa Linux e dispositivi misti. #Linux #FileSharing #OpenSource #WebApp #P2P
-
Con PairDrop puoi inviare file, immagini e testo dal browser senza installare app complicate. Perfetto per chi usa Linux e dispositivi misti. #Linux #FileSharing #OpenSource #WebApp #P2P
-
Con PairDrop puoi inviare file, immagini e testo dal browser senza installare app complicate. Perfetto per chi usa Linux e dispositivi misti. #Linux #FileSharing #OpenSource #WebApp #P2P
-
Con PairDrop puoi inviare file, immagini e testo dal browser senza installare app complicate. Perfetto per chi usa Linux e dispositivi misti. #Linux #FileSharing #OpenSource #WebApp #P2P
-
Con PairDrop puoi inviare file, immagini e testo dal browser senza installare app complicate. Perfetto per chi usa Linux e dispositivi misti. #Linux #FileSharing #OpenSource #WebApp #P2P
-
Battery Tester Gets An App Upgrade
https://fed.brid.gy/r/https://hackaday.com/2026/06/18/battery-tester-gets-an-app-upgrade/
-
Battery Tester Gets An App Upgrade
https://fed.brid.gy/r/https://hackaday.com/2026/06/18/battery-tester-gets-an-app-upgrade/
-
Hello EOMasters, The journey is going on. Do you want to join?
Read my new blog post about TerraFlux. A new web based #EarthObservation application.#remotesensing #geospatial #gis #webapp
https://www.eomasters.org/post/terraflux-prototyping-a-new-webbased-earth-observation-application
-
Hello EOMasters, The journey is going on. Do you want to join?
Read my new blog post about TerraFlux. A new web based #EarthObservation application.#remotesensing #geospatial #gis #webapp
https://www.eomasters.org/post/terraflux-prototyping-a-new-webbased-earth-observation-application
-
Testing posting to Wafrn, from webapp on my Poco X3 NFC phone, running on Ubuntu Touch 24.04.2 RC beta.
#linuxmobile #ubuntutouch #ubports #wafrn #fediverse #mastodon #socialmedia #foss #webapp #dogs #dogsofmastodon #cuteanimals -
Testing posting to Wafrn, from webapp on my Poco X3 NFC phone, running on Ubuntu Touch 24.04.2 RC beta.
#linuxmobile #ubuntutouch #ubports #wafrn #fediverse #mastodon #socialmedia #foss #webapp #dogs #dogsofmastodon #cuteanimals -
Testing posting to Wafrn, from webapp on my Poco X3 NFC phone, running on Ubuntu Touch 24.04.2 RC beta.
#linuxmobile #ubuntutouch #ubports #wafrn #fediverse #mastodon #socialmedia #foss #webapp #dogs #dogsofmastodon #cuteanimals -
Testing posting to Wafrn, from webapp on my Poco X3 NFC phone, running on Ubuntu Touch 24.04.2 RC beta.
#linuxmobile #ubuntutouch #ubports #wafrn #fediverse #mastodon #socialmedia #foss #webapp #dogs #dogsofmastodon #cuteanimals -
Testing posting to Wafrn from webapp on my Poco X3 NFC phone running on Ubuntu Touch 24.04.2 RC beta.
#linuxmobile #ubuntutouch #ubports #wafrn #fediverse #mastodon #socialmedia #foss #webapp -
Testing posting to Wafrn from webapp on my Poco X3 NFC phone running on Ubuntu Touch 24.04.2 RC beta.
#linuxmobile #ubuntutouch #ubports #wafrn #fediverse #mastodon #socialmedia #foss #webapp -
Testing posting to Wafrn from webapp on my Poco X3 NFC phone running on Ubuntu Touch 24.04.2 RC beta.
#linuxmobile #ubuntutouch #ubports #wafrn #fediverse #mastodon #socialmedia #foss #webapp -
CockaDoo Mode 🐔
Im CockaDoo-Modus in #TwoDoo erhältst du morgens und abends 3 Fragen, um in einen wachen Mindset zu kommen. Ziehe den Kakadu-Kopf auf die Antwort.
Neu ist der "External Flame" Modus, mit dem du Events feiern kannst, die ausserhalb von TwoDoo passieren: zB Kursanmeldung, Verkauf
-
CockaDoo Mode 🐔
Im CockaDoo-Modus in #TwoDoo erhältst du morgens und abends 3 Fragen, um in einen wachen Mindset zu kommen. Ziehe den Kakadu-Kopf auf die Antwort.
Neu ist der "External Flame" Modus, mit dem du Events feiern kannst, die ausserhalb von TwoDoo passieren: zB Kursanmeldung, Verkauf
-
CockaDoo Mode 🐔
Im CockaDoo-Modus in #TwoDoo erhältst du morgens und abends 3 Fragen, um in einen wachen Mindset zu kommen. Ziehe den Kakadu-Kopf auf die Antwort.
Neu ist der "External Flame" Modus, mit dem du Events feiern kannst, die ausserhalb von TwoDoo passieren: zB Kursanmeldung, Verkauf
-
CockaDoo Mode 🐔
Im CockaDoo-Modus in #TwoDoo erhältst du morgens und abends 3 Fragen, um in einen wachen Mindset zu kommen. Ziehe den Kakadu-Kopf auf die Antwort.
Neu ist der "External Flame" Modus, mit dem du Events feiern kannst, die ausserhalb von TwoDoo passieren: zB Kursanmeldung, Verkauf
-
CockaDoo Mode 🐔
Im CockaDoo-Modus in #TwoDoo erhältst du morgens und abends 3 Fragen, um in einen wachen Mindset zu kommen. Ziehe den Kakadu-Kopf auf die Antwort.
Neu ist der "External Flame" Modus, mit dem du Events feiern kannst, die ausserhalb von TwoDoo passieren: zB Kursanmeldung, Verkauf
-
Wer #Bluesky nutzen, aber nicht den #US-Hauptzugang des sozialen Netzwerks verwenden möchte, findet seit einigen Wochen mit @eurosky.social eine europäische Alternative. Mit #mu bzw. mu.social gibt es nun auch eine Konkurrenz zur offiziellen Bluesky-Website und #WebApp, die von #Eurosky ins Leben gerufen wurde. Sie steht seit gestern zur kostenlosen Nutzung in einer ersten #Betaversion zur Verfügung.
Mehr Aktuelles zu Eurosky und Bluesky: https://www.appgefahren.de/?p=400850
#appgefahren #Apple #AppleBlog #iPhone #iPad #Mac #Fediverse #SocialMedia
-
Wer #Bluesky nutzen, aber nicht den #US-Hauptzugang des sozialen Netzwerks verwenden möchte, findet seit einigen Wochen mit @eurosky.social eine europäische Alternative. Mit #mu bzw. mu.social gibt es nun auch eine Konkurrenz zur offiziellen Bluesky-Website und #WebApp, die von #Eurosky ins Leben gerufen wurde. Sie steht seit gestern zur kostenlosen Nutzung in einer ersten #Betaversion zur Verfügung.
Mehr Aktuelles zu Eurosky und Bluesky: https://www.appgefahren.de/?p=400850
#appgefahren #Apple #AppleBlog #iPhone #iPad #Mac #Fediverse #SocialMedia
-
Wer #Bluesky nutzen, aber nicht den #US-Hauptzugang des sozialen Netzwerks verwenden möchte, findet seit einigen Wochen mit @eurosky.social eine europäische Alternative. Mit #mu bzw. mu.social gibt es nun auch eine Konkurrenz zur offiziellen Bluesky-Website und #WebApp, die von #Eurosky ins Leben gerufen wurde. Sie steht seit gestern zur kostenlosen Nutzung in einer ersten #Betaversion zur Verfügung.
Mehr Aktuelles zu Eurosky und Bluesky: https://www.appgefahren.de/?p=400850
#appgefahren #Apple #AppleBlog #iPhone #iPad #Mac #Fediverse #SocialMedia
-
Wer #Bluesky nutzen, aber nicht den #US-Hauptzugang des sozialen Netzwerks verwenden möchte, findet seit einigen Wochen mit @eurosky.social eine europäische Alternative. Mit #mu bzw. mu.social gibt es nun auch eine Konkurrenz zur offiziellen Bluesky-Website und #WebApp, die von #Eurosky ins Leben gerufen wurde. Sie steht seit gestern zur kostenlosen Nutzung in einer ersten #Betaversion zur Verfügung.
Mehr Aktuelles zu Eurosky und Bluesky: https://www.appgefahren.de/?p=400850
#appgefahren #Apple #AppleBlog #iPhone #iPad #Mac #Fediverse #SocialMedia
-
Wer #Bluesky nutzen, aber nicht den #US-Hauptzugang des sozialen Netzwerks verwenden möchte, findet seit einigen Wochen mit @eurosky.social eine europäische Alternative. Mit #mu bzw. mu.social gibt es nun auch eine Konkurrenz zur offiziellen Bluesky-Website und #WebApp, die von #Eurosky ins Leben gerufen wurde. Sie steht seit gestern zur kostenlosen Nutzung in einer ersten #Betaversion zur Verfügung.
Mehr Aktuelles zu Eurosky und Bluesky: https://www.appgefahren.de/?p=400850
#appgefahren #Apple #AppleBlog #iPhone #iPad #Mac #Fediverse #SocialMedia
-
RE: https://social.tchncs.de/@solawi/116650903529988192
📆 Am Mittwoch ist der letzte Online-Stammtisch vor der Sommerpause.
Alle Interessierten sind willkommen, keine Anmeldung notwendig! -
RE: https://social.tchncs.de/@solawi/116650903529988192
📆 Am Mittwoch ist der letzte Online-Stammtisch vor der Sommerpause.
Alle Interessierten sind willkommen, keine Anmeldung notwendig! -
RE: https://social.tchncs.de/@solawi/116650903529988192
📆 Am Mittwoch ist der letzte Online-Stammtisch vor der Sommerpause.
Alle Interessierten sind willkommen, keine Anmeldung notwendig! -
RE: https://social.tchncs.de/@solawi/116650903529988192
📆 Am Mittwoch ist der letzte Online-Stammtisch vor der Sommerpause.
Alle Interessierten sind willkommen, keine Anmeldung notwendig! -
RE: https://social.tchncs.de/@solawi/116650903529988192
📆 Am Mittwoch ist der letzte Online-Stammtisch vor der Sommerpause.
Alle Interessierten sind willkommen, keine Anmeldung notwendig! -
Migrating from Lovable: Steps to Self-Host Your App
Lovable is a remarkable product.
You describe what you want. It builds it. You ship in hours instead of weeks.
That’s genuinely impressive, and I’ve used it to launch things I would have otherwise shelved for “when I have more time.”But “when I have more time” eventually arrives.
And when it does, you start asking different questions:
“What happens if they change pricing?”
“Can I run this on my own infrastructure?”
“Where exactly does my data live?”Those aren’t paranoid questions. They’re the right questions.
This post is about answering them — practically, with actual steps you can follow.Why Leave Lovable?
Before anything else: you might not need to.
Lovable is a solid platform. If your app is a side project, an internal tool, or an early-stage product with low traffic, staying there is probably the right call. The cost of self-hosting is real — you own the ops now.
But there are situations where moving makes clear sense:
Cost at scale
Lovable’s pricing is per-project and per-usage.
Once you’re past early stage, running your own stack on a VPS or cloud provider is often ~3–5x (or more) cheaper.Data residency
Some industries (healthcare, finance, defense) require you to control where data lives.
“It’s on Lovable’s servers” isn’t an acceptable answer in those conversations.Customization ceiling
Lovable generates clean React/Supabase apps, but it has opinions. When you need a specific architecture, edge functions, a custom auth flow, or native mobile builds outside their defaults — you hit the wall.Ownership
At some point, the code is yours.
You should be able to run it. Anywhere.What You’re Actually Working With
Lovable generates a specific stack.
Understanding it before you touch anything is important.A typical Lovable export looks like this:
- Frontend: React (Vite), TypeScript, Tailwind CSS, shadcn/ui components
- Backend/DB: Supabase (Postgres, Auth, Storage, Edge Functions)
- Routing: React Router
- State/Fetching: TanStack Query, sometimes Zustand
- Deployment: Previously Lovable’s own hosting; they now push to GitHub and can connect to Netlify/Vercel
The code is real – It’s readable. There’s no magic proprietary runtime you need to reverse-engineer.
That’s the good news.The less-good news:
Supabase is tightly integrated.
The app talks to a Supabase project by project URL and anon key. If you want to move away from Supabase (or self-host Supabase), that’s a bigger migration than just moving the frontend.For most people: keep Supabase, move the frontend.
That’s the path of least resistance.Step 1: Export Your Code
First things first.
Go to your Lovable project → click the GitHub button → connect your GitHub account → push the project.
You now have a real repository with real code. Clone it locally:
git clone https://github.com/your-username/your-lovable-project.git cd your-lovable-project npm installBefore you do anything else, make sure it runs locally:
npm run devIf it opens in your browser and works: great. If it doesn’t: check your
.envfile (more on that in a moment).Step 2: Understand Your Environment Variables
This is where most people get stuck.
Lovable injects environment variables automatically. When you run this yourself, you’re responsible for them.Create a
.envfile in your project root:VITE_SUPABASE_URL=https://your-project-ref.supabase.co VITE_SUPABASE_ANON_KEY=your-anon-key-hereFind these in your Supabase dashboard → Project Settings → API.
One important thing: never commit your
.envto git. Add it to.gitignoreimmediately if it isn’t already there.echo ".env" >> .gitignoreFor production deployments, you’ll set these as environment variables in your hosting provider’s dashboard — not as files checked into the repo.
Step 3: Build for Production
npm run buildThis generates a
dist/folder. Everything in there is static — HTML, CSS, JavaScript bundles. No Node.js server required to serve it.You can host this on:
- Vercel (easiest, free tier is generous)
- Netlify (similar to Vercel, excellent DX)
- Cloudflare Pages (fastest globally, very generous free tier)
- A plain VPS with Nginx (most control, most work)
My default recommendation:
1. Cloudflare Pages for public-facing apps
2. VPS + Nginx if you want full control and have ops comfort.Step 4: Deploy to Cloudflare Pages (Recommended)
If you just want it running fast with zero infrastructure overhead:
- Push your repo to GitHub (done in Step 1)
- Go to Cloudflare Pages → Create Project → Connect GitHub
- Select your repo
- Set build settings:
- Build command:
npm run build - Build output directory:
dist
- Add your environment variables (VITE_SUPABASE_URL, VITE_SUPABASE_ANON_KEY)
- Deploy
Done.
Your app is live on a Cloudflare CDN edge network in ~2 minutes, with automatic deployments on every push to main.
Step 5: Deploy to a VPS (The “Real Self-Hosting” Path)
For maximum control, run it on your own server.
I recommend fly.io (so you don’t need to install/maintain anything – just build your webapp in docker) or Hetzner — the value is absurd compared to AWS or GCP for basic hosting needs.Provision your server, then SSH in:
ssh root@your-server-ipInstall Nginx:
apt update && apt install nginx -yCreate your site directory and copy the build:
mkdir -p /var/www/myapp # From your local machine: scp -r dist/* root@your-server-ip:/var/www/myapp/Or better: set up a CI/CD pipeline that does this automatically on push.
Configure Nginx:
server { listen 80; server_name yourdomain.com; root /var/www/myapp; index index.html; # This is critical for React Router — all paths serve index.html location / { try_files $uri $uri/ /index.html; } # Cache static assets aggressively location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff2)$ { expires 1y; add_header Cache-Control "public, immutable"; } }Save to
/etc/nginx/sites-available/myapp, symlink it:ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/ nginx -t && systemctl reload nginxAdd HTTPS with Let’s Encrypt:
apt install certbot python3-certbot-nginx -y certbot --nginx -d yourdomain.comCertbot auto-renews.
You’re done.Step 6: The Native App Situation
If your Lovable app has a native mobile wrapper — this is where things get interesting.
Lovable has been expanding into native capabilities using Capacitor under the hood. If your project has native bindings, you’ll find a
capacitor.config.tsin the project root.The good news:
Capacitor is open-source and you own the workflow entirely.For iOS:
npm run build npx cap sync ios npx cap open iosThis opens Xcode with your project. From there, you archive and submit to the App Store exactly like any other iOS app. You need an Apple Developer account ($99/year).
For Android:
npm run build npx cap sync android npx cap open androidThis opens Android Studio. Build → Generate Signed Bundle/APK → distribute via Play Store or sideload directly.
The webview URL matters.
In development, Capacitor talks to localhost. In production, you need to point it at your live web app. Edit
capacitor.config.ts:import { CapacitorConfig } from '@capacitor/cli'; const config: CapacitorConfig = { appId: 'com.yourcompany.yourapp', appName: 'Your App', webDir: 'dist', server: { // Remove this for production — use bundled assets instead // url: 'http://localhost:5173', androidScheme: 'https' } }; export default config;For most native apps, you want the
webDirapproach — the built assets are bundled directly into the native app binary. This means offline support works and you don’t depend on your web server being up for the app to function.Run
npx cap syncafter every build to keep the native project in sync with your web build.Step 7: Handling Supabase at Scale
You moved the frontend. Supabase is still doing the backend work.
For most apps: that’s fine. Supabase is genuinely good infrastructure.
But if you want to self-host Supabase too (for compliance, cost, or curiosity), they publish an official Docker Compose setup:
git clone --depth 1 https://github.com/supabase/supabase cd supabase/docker cp .env.example .env # Edit .env with your secrets docker compose up -dThis runs the full Supabase stack — Postgres, GoTrue (auth), PostgREST, Realtime, Storage, and Studio — on your own hardware.
It’s more maintenance burden. But it’s also complete ownership.
My honest take: use Supabase managed unless you have a specific reason not to.
Their managed infrastructure is well-run and the pricing is reasonable until you’re at serious scale.Step 8: Setting Up CI/CD So You Don’t Do This Manually Again
Manually copying files to a server is how you get paged at 2am because you forgot a step.
Here’s a minimal GitHub Actions workflow that builds and deploys on every push to main:
# .github/workflows/deploy.yml name: Deploy on: push: branches: [main] jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 - name: Setup Node uses: actions/setup-node@v6 with: node-version: '24' cache: 'npm' - name: Install & Build run: | npm ci npm run build env: VITE_SUPABASE_URL: ${{ secrets.VITE_SUPABASE_URL }} VITE_SUPABASE_ANON_KEY: ${{ secrets.VITE_SUPABASE_ANON_KEY }} - name: Deploy to Server uses: appleboy/[email protected] with: host: ${{ secrets.SERVER_HOST }} username: ${{ secrets.SERVER_USER }} key: ${{ secrets.SSH_PRIVATE_KEY }} source: "dist/*" target: "/var/www/myapp" strip_components: 1Add your secrets in GitHub → Settings → Secrets and variables → Actions.
Push to main. It deploys automatically.
That’s the whole loop.The Checklist Before You Pull the Plug on Lovable
Don’t cancel your Lovable plan until you’ve verified all of this:
- [ ] App runs locally with
npm run dev - [ ] Production build succeeds with
npm run build - [ ] All environment variables are set correctly in production
- [ ] Supabase Row Level Security policies are configured (don’t rely on Lovable having set these correctly)
- [ ] Auth flows work end-to-end (sign up, sign in, sign out, password reset)
- [ ] Any storage/file uploads work against your Supabase bucket policies
- [ ] Edge functions (if any) are deployed to Supabase
- [ ] Custom domain is pointing to your new hosting
- [ ] HTTPS is working
- [ ] Native builds open and run correctly (iOS Simulator + Android Emulator at minimum)
- [ ] CI/CD pipeline deploys successfully from a test push
Run through this list twice.
Yep… On the second time you’ll catch something you missed.What I’ve Learned From Doing This
Lovable is excellent for getting to a working product quickly.
Self-hosting is excellent for owning what you built.These aren’t in conflict — they’re a sequence.
Build fast on Lovable.
Validate the idea.
Get real users.
Then, when the infrastructure costs start mattering or the compliance questions start arriving, migrate.The migration is maybe 4–6 hours of focused work for a typical app.
That’s worth doing on a quiet Sunday, not during a crisis.Do it before you need to.
Questions? Find me on GitHub
#cloud #developerProductivity #entrepreneurship #lovable #selfHosting #webapp -
Migrating from Lovable: Steps to Self-Host Your App
Lovable is a remarkable product.
You describe what you want. It builds it. You ship in hours instead of weeks.
That’s genuinely impressive, and I’ve used it to launch things I would have otherwise shelved for “when I have more time.”But “when I have more time” eventually arrives.
And when it does, you start asking different questions:
“What happens if they change pricing?”
“Can I run this on my own infrastructure?”
“Where exactly does my data live?”Those aren’t paranoid questions. They’re the right questions.
This post is about answering them — practically, with actual steps you can follow.Why Leave Lovable?
Before anything else: you might not need to.
Lovable is a solid platform. If your app is a side project, an internal tool, or an early-stage product with low traffic, staying there is probably the right call. The cost of self-hosting is real — you own the ops now.
But there are situations where moving makes clear sense:
Cost at scale
Lovable’s pricing is per-project and per-usage.
Once you’re past early stage, running your own stack on a VPS or cloud provider is often ~3–5x (or more) cheaper.Data residency
Some industries (healthcare, finance, defense) require you to control where data lives.
“It’s on Lovable’s servers” isn’t an acceptable answer in those conversations.Customization ceiling
Lovable generates clean React/Supabase apps, but it has opinions. When you need a specific architecture, edge functions, a custom auth flow, or native mobile builds outside their defaults — you hit the wall.Ownership
At some point, the code is yours.
You should be able to run it. Anywhere.What You’re Actually Working With
Lovable generates a specific stack.
Understanding it before you touch anything is important.A typical Lovable export looks like this:
- Frontend: React (Vite), TypeScript, Tailwind CSS, shadcn/ui components
- Backend/DB: Supabase (Postgres, Auth, Storage, Edge Functions)
- Routing: React Router
- State/Fetching: TanStack Query, sometimes Zustand
- Deployment: Previously Lovable’s own hosting; they now push to GitHub and can connect to Netlify/Vercel
The code is real – It’s readable. There’s no magic proprietary runtime you need to reverse-engineer.
That’s the good news.The less-good news:
Supabase is tightly integrated.
The app talks to a Supabase project by project URL and anon key. If you want to move away from Supabase (or self-host Supabase), that’s a bigger migration than just moving the frontend.For most people: keep Supabase, move the frontend.
That’s the path of least resistance.Step 1: Export Your Code
First things first.
Go to your Lovable project → click the GitHub button → connect your GitHub account → push the project.
You now have a real repository with real code. Clone it locally:
git clone https://github.com/your-username/your-lovable-project.git cd your-lovable-project npm installBefore you do anything else, make sure it runs locally:
npm run devIf it opens in your browser and works: great. If it doesn’t: check your
.envfile (more on that in a moment).Step 2: Understand Your Environment Variables
This is where most people get stuck.
Lovable injects environment variables automatically. When you run this yourself, you’re responsible for them.Create a
.envfile in your project root:VITE_SUPABASE_URL=https://your-project-ref.supabase.co VITE_SUPABASE_ANON_KEY=your-anon-key-hereFind these in your Supabase dashboard → Project Settings → API.
One important thing: never commit your
.envto git. Add it to.gitignoreimmediately if it isn’t already there.echo ".env" >> .gitignoreFor production deployments, you’ll set these as environment variables in your hosting provider’s dashboard — not as files checked into the repo.
Step 3: Build for Production
npm run buildThis generates a
dist/folder. Everything in there is static — HTML, CSS, JavaScript bundles. No Node.js server required to serve it.You can host this on:
- Vercel (easiest, free tier is generous)
- Netlify (similar to Vercel, excellent DX)
- Cloudflare Pages (fastest globally, very generous free tier)
- A plain VPS with Nginx (most control, most work)
My default recommendation:
1. Cloudflare Pages for public-facing apps
2. VPS + Nginx if you want full control and have ops comfort.Step 4: Deploy to Cloudflare Pages (Recommended)
If you just want it running fast with zero infrastructure overhead:
- Push your repo to GitHub (done in Step 1)
- Go to Cloudflare Pages → Create Project → Connect GitHub
- Select your repo
- Set build settings:
- Build command:
npm run build - Build output directory:
dist
- Add your environment variables (VITE_SUPABASE_URL, VITE_SUPABASE_ANON_KEY)
- Deploy
Done.
Your app is live on a Cloudflare CDN edge network in ~2 minutes, with automatic deployments on every push to main.
Step 5: Deploy to a VPS (The “Real Self-Hosting” Path)
For maximum control, run it on your own server.
I recommend fly.io (so you don’t need to install/maintain anything – just build your webapp in docker) or Hetzner — the value is absurd compared to AWS or GCP for basic hosting needs.Provision your server, then SSH in:
ssh root@your-server-ipInstall Nginx:
apt update && apt install nginx -yCreate your site directory and copy the build:
mkdir -p /var/www/myapp # From your local machine: scp -r dist/* root@your-server-ip:/var/www/myapp/Or better: set up a CI/CD pipeline that does this automatically on push.
Configure Nginx:
server { listen 80; server_name yourdomain.com; root /var/www/myapp; index index.html; # This is critical for React Router — all paths serve index.html location / { try_files $uri $uri/ /index.html; } # Cache static assets aggressively location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff2)$ { expires 1y; add_header Cache-Control "public, immutable"; } }Save to
/etc/nginx/sites-available/myapp, symlink it:ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/ nginx -t && systemctl reload nginxAdd HTTPS with Let’s Encrypt:
apt install certbot python3-certbot-nginx -y certbot --nginx -d yourdomain.comCertbot auto-renews.
You’re done.Step 6: The Native App Situation
If your Lovable app has a native mobile wrapper — this is where things get interesting.
Lovable has been expanding into native capabilities using Capacitor under the hood. If your project has native bindings, you’ll find a
capacitor.config.tsin the project root.The good news:
Capacitor is open-source and you own the workflow entirely.For iOS:
npm run build npx cap sync ios npx cap open iosThis opens Xcode with your project. From there, you archive and submit to the App Store exactly like any other iOS app. You need an Apple Developer account ($99/year).
For Android:
npm run build npx cap sync android npx cap open androidThis opens Android Studio. Build → Generate Signed Bundle/APK → distribute via Play Store or sideload directly.
The webview URL matters.
In development, Capacitor talks to localhost. In production, you need to point it at your live web app. Edit
capacitor.config.ts:import { CapacitorConfig } from '@capacitor/cli'; const config: CapacitorConfig = { appId: 'com.yourcompany.yourapp', appName: 'Your App', webDir: 'dist', server: { // Remove this for production — use bundled assets instead // url: 'http://localhost:5173', androidScheme: 'https' } }; export default config;For most native apps, you want the
webDirapproach — the built assets are bundled directly into the native app binary. This means offline support works and you don’t depend on your web server being up for the app to function.Run
npx cap syncafter every build to keep the native project in sync with your web build.Step 7: Handling Supabase at Scale
You moved the frontend. Supabase is still doing the backend work.
For most apps: that’s fine. Supabase is genuinely good infrastructure.
But if you want to self-host Supabase too (for compliance, cost, or curiosity), they publish an official Docker Compose setup:
git clone --depth 1 https://github.com/supabase/supabase cd supabase/docker cp .env.example .env # Edit .env with your secrets docker compose up -dThis runs the full Supabase stack — Postgres, GoTrue (auth), PostgREST, Realtime, Storage, and Studio — on your own hardware.
It’s more maintenance burden. But it’s also complete ownership.
My honest take: use Supabase managed unless you have a specific reason not to.
Their managed infrastructure is well-run and the pricing is reasonable until you’re at serious scale.Step 8: Setting Up CI/CD So You Don’t Do This Manually Again
Manually copying files to a server is how you get paged at 2am because you forgot a step.
Here’s a minimal GitHub Actions workflow that builds and deploys on every push to main:
# .github/workflows/deploy.yml name: Deploy on: push: branches: [main] jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 - name: Setup Node uses: actions/setup-node@v6 with: node-version: '24' cache: 'npm' - name: Install & Build run: | npm ci npm run build env: VITE_SUPABASE_URL: ${{ secrets.VITE_SUPABASE_URL }} VITE_SUPABASE_ANON_KEY: ${{ secrets.VITE_SUPABASE_ANON_KEY }} - name: Deploy to Server uses: appleboy/[email protected] with: host: ${{ secrets.SERVER_HOST }} username: ${{ secrets.SERVER_USER }} key: ${{ secrets.SSH_PRIVATE_KEY }} source: "dist/*" target: "/var/www/myapp" strip_components: 1Add your secrets in GitHub → Settings → Secrets and variables → Actions.
Push to main. It deploys automatically.
That’s the whole loop.The Checklist Before You Pull the Plug on Lovable
Don’t cancel your Lovable plan until you’ve verified all of this:
- [ ] App runs locally with
npm run dev - [ ] Production build succeeds with
npm run build - [ ] All environment variables are set correctly in production
- [ ] Supabase Row Level Security policies are configured (don’t rely on Lovable having set these correctly)
- [ ] Auth flows work end-to-end (sign up, sign in, sign out, password reset)
- [ ] Any storage/file uploads work against your Supabase bucket policies
- [ ] Edge functions (if any) are deployed to Supabase
- [ ] Custom domain is pointing to your new hosting
- [ ] HTTPS is working
- [ ] Native builds open and run correctly (iOS Simulator + Android Emulator at minimum)
- [ ] CI/CD pipeline deploys successfully from a test push
Run through this list twice.
Yep… On the second time you’ll catch something you missed.What I’ve Learned From Doing This
Lovable is excellent for getting to a working product quickly.
Self-hosting is excellent for owning what you built.These aren’t in conflict — they’re a sequence.
Build fast on Lovable.
Validate the idea.
Get real users.
Then, when the infrastructure costs start mattering or the compliance questions start arriving, migrate.The migration is maybe 4–6 hours of focused work for a typical app.
That’s worth doing on a quiet Sunday, not during a crisis.Do it before you need to.
Questions? Find me on GitHub
Rate this:
#cloud #developerProductivity #entrepreneurship #lovable #selfHosting #webapp -
Migrating from Lovable: Steps to Self-Host Your App
Lovable is a remarkable product.
You describe what you want. It builds it. You ship in hours instead of weeks.
That’s genuinely impressive, and I’ve used it to launch things I would have otherwise shelved for “when I have more time.”But “when I have more time” eventually arrives.
And when it does, you start asking different questions:
“What happens if they change pricing?”
“Can I run this on my own infrastructure?”
“Where exactly does my data live?”Those aren’t paranoid questions. They’re the right questions.
This post is about answering them — practically, with actual steps you can follow.Why Leave Lovable?
Before anything else: you might not need to.
Lovable is a solid platform. If your app is a side project, an internal tool, or an early-stage product with low traffic, staying there is probably the right call. The cost of self-hosting is real — you own the ops now.
But there are situations where moving makes clear sense:
Cost at scale
Lovable’s pricing is per-project and per-usage.
Once you’re past early stage, running your own stack on a VPS or cloud provider is often ~3–5x (or more) cheaper.Data residency
Some industries (healthcare, finance, defense) require you to control where data lives.
“It’s on Lovable’s servers” isn’t an acceptable answer in those conversations.Customization ceiling
Lovable generates clean React/Supabase apps, but it has opinions. When you need a specific architecture, edge functions, a custom auth flow, or native mobile builds outside their defaults — you hit the wall.Ownership
At some point, the code is yours.
You should be able to run it. Anywhere.What You’re Actually Working With
Lovable generates a specific stack.
Understanding it before you touch anything is important.A typical Lovable export looks like this:
- Frontend: React (Vite), TypeScript, Tailwind CSS, shadcn/ui components
- Backend/DB: Supabase (Postgres, Auth, Storage, Edge Functions)
- Routing: React Router
- State/Fetching: TanStack Query, sometimes Zustand
- Deployment: Previously Lovable’s own hosting; they now push to GitHub and can connect to Netlify/Vercel
The code is real – It’s readable. There’s no magic proprietary runtime you need to reverse-engineer.
That’s the good news.The less-good news:
Supabase is tightly integrated.
The app talks to a Supabase project by project URL and anon key. If you want to move away from Supabase (or self-host Supabase), that’s a bigger migration than just moving the frontend.For most people: keep Supabase, move the frontend.
That’s the path of least resistance.Step 1: Export Your Code
First things first.
Go to your Lovable project → click the GitHub button → connect your GitHub account → push the project.
You now have a real repository with real code. Clone it locally:
git clone https://github.com/your-username/your-lovable-project.git cd your-lovable-project npm installBefore you do anything else, make sure it runs locally:
npm run devIf it opens in your browser and works: great. If it doesn’t: check your
.envfile (more on that in a moment).Step 2: Understand Your Environment Variables
This is where most people get stuck.
Lovable injects environment variables automatically. When you run this yourself, you’re responsible for them.Create a
.envfile in your project root:VITE_SUPABASE_URL=https://your-project-ref.supabase.co VITE_SUPABASE_ANON_KEY=your-anon-key-hereFind these in your Supabase dashboard → Project Settings → API.
One important thing: never commit your
.envto git. Add it to.gitignoreimmediately if it isn’t already there.echo ".env" >> .gitignoreFor production deployments, you’ll set these as environment variables in your hosting provider’s dashboard — not as files checked into the repo.
Step 3: Build for Production
npm run buildThis generates a
dist/folder. Everything in there is static — HTML, CSS, JavaScript bundles. No Node.js server required to serve it.You can host this on:
- Vercel (easiest, free tier is generous)
- Netlify (similar to Vercel, excellent DX)
- Cloudflare Pages (fastest globally, very generous free tier)
- A plain VPS with Nginx (most control, most work)
My default recommendation:
1. Cloudflare Pages for public-facing apps
2. VPS + Nginx if you want full control and have ops comfort.Step 4: Deploy to Cloudflare Pages (Recommended)
If you just want it running fast with zero infrastructure overhead:
- Push your repo to GitHub (done in Step 1)
- Go to Cloudflare Pages → Create Project → Connect GitHub
- Select your repo
- Set build settings:
- Build command:
npm run build - Build output directory:
dist
- Add your environment variables (VITE_SUPABASE_URL, VITE_SUPABASE_ANON_KEY)
- Deploy
Done.
Your app is live on a Cloudflare CDN edge network in ~2 minutes, with automatic deployments on every push to main.
Step 5: Deploy to a VPS (The “Real Self-Hosting” Path)
For maximum control, run it on your own server.
I recommend fly.io (so you don’t need to install/maintain anything – just build your webapp in docker) or Hetzner — the value is absurd compared to AWS or GCP for basic hosting needs.Provision your server, then SSH in:
ssh root@your-server-ipInstall Nginx:
apt update && apt install nginx -yCreate your site directory and copy the build:
mkdir -p /var/www/myapp # From your local machine: scp -r dist/* root@your-server-ip:/var/www/myapp/Or better: set up a CI/CD pipeline that does this automatically on push.
Configure Nginx:
server { listen 80; server_name yourdomain.com; root /var/www/myapp; index index.html; # This is critical for React Router — all paths serve index.html location / { try_files $uri $uri/ /index.html; } # Cache static assets aggressively location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff2)$ { expires 1y; add_header Cache-Control "public, immutable"; } }Save to
/etc/nginx/sites-available/myapp, symlink it:ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/ nginx -t && systemctl reload nginxAdd HTTPS with Let’s Encrypt:
apt install certbot python3-certbot-nginx -y certbot --nginx -d yourdomain.comCertbot auto-renews.
You’re done.Step 6: The Native App Situation
If your Lovable app has a native mobile wrapper — this is where things get interesting.
Lovable has been expanding into native capabilities using Capacitor under the hood. If your project has native bindings, you’ll find a
capacitor.config.tsin the project root.The good news:
Capacitor is open-source and you own the workflow entirely.For iOS:
npm run build npx cap sync ios npx cap open iosThis opens Xcode with your project. From there, you archive and submit to the App Store exactly like any other iOS app. You need an Apple Developer account ($99/year).
For Android:
npm run build npx cap sync android npx cap open androidThis opens Android Studio. Build → Generate Signed Bundle/APK → distribute via Play Store or sideload directly.
The webview URL matters.
In development, Capacitor talks to localhost. In production, you need to point it at your live web app. Edit
capacitor.config.ts:import { CapacitorConfig } from '@capacitor/cli'; const config: CapacitorConfig = { appId: 'com.yourcompany.yourapp', appName: 'Your App', webDir: 'dist', server: { // Remove this for production — use bundled assets instead // url: 'http://localhost:5173', androidScheme: 'https' } }; export default config;For most native apps, you want the
webDirapproach — the built assets are bundled directly into the native app binary. This means offline support works and you don’t depend on your web server being up for the app to function.Run
npx cap syncafter every build to keep the native project in sync with your web build.Step 7: Handling Supabase at Scale
You moved the frontend. Supabase is still doing the backend work.
For most apps: that’s fine. Supabase is genuinely good infrastructure.
But if you want to self-host Supabase too (for compliance, cost, or curiosity), they publish an official Docker Compose setup:
git clone --depth 1 https://github.com/supabase/supabase cd supabase/docker cp .env.example .env # Edit .env with your secrets docker compose up -dThis runs the full Supabase stack — Postgres, GoTrue (auth), PostgREST, Realtime, Storage, and Studio — on your own hardware.
It’s more maintenance burden. But it’s also complete ownership.
My honest take: use Supabase managed unless you have a specific reason not to.
Their managed infrastructure is well-run and the pricing is reasonable until you’re at serious scale.Step 8: Setting Up CI/CD So You Don’t Do This Manually Again
Manually copying files to a server is how you get paged at 2am because you forgot a step.
Here’s a minimal GitHub Actions workflow that builds and deploys on every push to main:
# .github/workflows/deploy.yml name: Deploy on: push: branches: [main] jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 - name: Setup Node uses: actions/setup-node@v6 with: node-version: '24' cache: 'npm' - name: Install & Build run: | npm ci npm run build env: VITE_SUPABASE_URL: ${{ secrets.VITE_SUPABASE_URL }} VITE_SUPABASE_ANON_KEY: ${{ secrets.VITE_SUPABASE_ANON_KEY }} - name: Deploy to Server uses: appleboy/[email protected] with: host: ${{ secrets.SERVER_HOST }} username: ${{ secrets.SERVER_USER }} key: ${{ secrets.SSH_PRIVATE_KEY }} source: "dist/*" target: "/var/www/myapp" strip_components: 1Add your secrets in GitHub → Settings → Secrets and variables → Actions.
Push to main. It deploys automatically.
That’s the whole loop.The Checklist Before You Pull the Plug on Lovable
Don’t cancel your Lovable plan until you’ve verified all of this:
- [ ] App runs locally with
npm run dev - [ ] Production build succeeds with
npm run build - [ ] All environment variables are set correctly in production
- [ ] Supabase Row Level Security policies are configured (don’t rely on Lovable having set these correctly)
- [ ] Auth flows work end-to-end (sign up, sign in, sign out, password reset)
- [ ] Any storage/file uploads work against your Supabase bucket policies
- [ ] Edge functions (if any) are deployed to Supabase
- [ ] Custom domain is pointing to your new hosting
- [ ] HTTPS is working
- [ ] Native builds open and run correctly (iOS Simulator + Android Emulator at minimum)
- [ ] CI/CD pipeline deploys successfully from a test push
Run through this list twice.
Yep… On the second time you’ll catch something you missed.What I’ve Learned From Doing This
Lovable is excellent for getting to a working product quickly.
Self-hosting is excellent for owning what you built.These aren’t in conflict — they’re a sequence.
Build fast on Lovable.
Validate the idea.
Get real users.
Then, when the infrastructure costs start mattering or the compliance questions start arriving, migrate.The migration is maybe 4–6 hours of focused work for a typical app.
That’s worth doing on a quiet Sunday, not during a crisis.Do it before you need to.
Questions? Find me on GitHub
Rate this:
#cloud #developerProductivity #entrepreneurship #lovable #selfHosting #webapp