Lovable Migrator

Migrasi project Lovable ke GitHub + Cloudflare — lengkap dengan checklist deploy

v2 — diperkaya dari pengalaman migrasi nyata
1. Bersihkan ZIP
2. Checklist Deploy
3. Template Siap Pakai
Upload ZIP proyek Lovable

Klik di sini atau drag & drop file ZIP

Centang setiap langkah saat sudah selesai. Progress tersimpan otomatis di browser ini.

GitHub
Cloudflare — Setup awal
Cloudflare — Error umum & solusi
→ Hapus file lockfile (bun.lock dll) dari repo, commit, biarkan Cloudflare generate ulang
→ Hapus "sideEffects": false dari package.json
→ vite.config.ts salah konfigurasi plugin Cloudflare — pastikan pakai cloudflare({"{"}viteEnvironment:{"{"}name:"ssr"{"}"}{"}"}) dan diletakkan SEBELUM tanstackStart() di array plugins. Lihat tab Template.
→ Pastikan diisi di Settings → Build → Variables and secrets (bukan Workers runtime settings), dan tipe Text bukan Secret
→ Copy isi yang disarankan, paste ke wrangler.jsonc di repo, commit
Sumber data eksternal (Google Sheets dll)
→ Solusi: buat Google Apps Script Web App (Extensions → Apps Script di spreadsheet) yang pakai SpreadsheetApp.getActiveSpreadsheet(), deploy sebagai Web App dengan akses "Anyone". Lihat tab Template untuk kode siap pakai.
Verifikasi akhir
vite.config.ts — TanStack Start + Cloudflare (versi benar)
Versi resmi dari dokumentasi Cloudflare. Kalau project punya custom server.ts, tambahkan server: {"{"} entry: "server" {"}"} di dalam tanstackStart().
import { defineConfig } from "vite"; import { tanstackStart } from "@tanstack/react-start/plugin/vite"; import { cloudflare } from "@cloudflare/vite-plugin"; import react from "@vitejs/plugin-react"; import tailwindcss from "@tailwindcss/vite"; import tsconfigPaths from "vite-tsconfig-paths"; export default defineConfig({ plugins: [ cloudflare({ viteEnvironment: { name: "ssr" } }), tanstackStart({ server: { entry: "server" }, }), react(), tailwindcss(), tsconfigPaths(), ], });
wrangler.jsonc — template dasar
Ganti nama-project-anda dan tanggal compatibility_date ke hari ini.
{ "$schema": "node_modules/wrangler/config-schema.json", "name": "nama-project-anda", "compatibility_date": "2026-06-29", "compatibility_flags": ["nodejs_compat"], "main": "src/server.ts", "observability": { "enabled": true } }
Google Apps Script — proxy CSV dari spreadsheet aktif
Buka spreadsheet → Extensions → Apps Script → paste kode ini → ganti nama-nama sheet di sheetNames sesuai tab Anda → Deploy → New deployment → Web app → Execute as: Me → Who has access: Anyone.
function doGet(e) { const ss = SpreadsheetApp.getActiveSpreadsheet(); const sheet = e.parameter.sheet || "games"; const sheetNames = { games: "Games", localization: "Localization", metadata: "Metadata" }; const sheetObj = ss.getSheetByName(sheetNames[sheet]); if (!sheetObj) { return ContentService.createTextOutput("Sheet not found: " + sheet) .setMimeType(ContentService.MimeType.TEXT); } const data = sheetObj.getDataRange().getValues(); const csv = data.map(row => row.map(cell => { const str = String(cell); return str.includes(",") || str.includes('"') || str.includes('\n') ? '"' + str.replace(/"/g, '""') + '"' : str; }).join(",") ).join("\n"); return ContentService.createTextOutput(csv) .setMimeType(ContentService.MimeType.TEXT); }
register-sw.ts — service worker tanpa jejak Lovable
Pengganti aman untuk file service worker yang sebelumnya mengecek host lovable.app/lovableproject.com.
export function registerServiceWorker() { if (typeof window === "undefined") return; if (!("serviceWorker" in navigator)) return; const inIframe = (() => { try { return window.self !== window.top; } catch { return true; } })(); const isDevHost = ["localhost", "127.0.0.1"].includes(window.location.hostname); if (inIframe || isDevHost) { navigator.serviceWorker.getRegistrations().then(regs => regs.forEach(r => r.unregister()) ); return; } window.addEventListener("load", () => { navigator.serviceWorker.register("/sw.js").catch(() => {}); }); }
.gitignore tambahan untuk Cloudflare
Baris yang sebaiknya ada di .gitignore agar tidak ikut ter-upload.
dist/ .wrangler/ .env .env.local .env.production node_modules/