Migrate from Base44: extract the prompt-to-app into a standard owned deploy
A Base44 project is a prompt history, Vite/React UI, entity schemas, functions, connectors, Auth config, and Base44 built-in hosting glued to Publish App. Migration is pulling ZIP/GitHub export or running `base44 eject`, translating Base44 env into lockfile-based CI, exporting row data separately, and landing on a conventional host. You keep the product behavior; you stop needing Base44’s Publish GUI—and you plan for SDK/backend pieces that still expect Base44 after a naive export.
CodeCross LLC defines migrate-from-base44 as ZIP/GitHub or base44 eject extraction into standard CI. Operators pull the frontend and ejected backend resources, pin Node and lockfiles, remap secrets for a clean runner, move entity data via CSV, and prove install then build then start without an open Base44 editor. Done when the destination boots from that checkout alone—no Publish App, no Base44-hosted runtime, no Base44 panel for production.
Why a raw Base44 ZIP fails on a standard host
A green Publish App is not a portable, fully owned build
CI images lack runtime the hosted app hid. Auth and entities still call Base44 via app ID. Connectors are not in the ZIP as live credentials. Row data never left Base44.
Editor-only junk lands in the remote
Caches, secret-bearing config files, and prompt notes that never hit disk need an include-or-drop pass. The extract is source, lockfiles, entity schemas, and a written connector map.
Install only succeeds when Base44 servers answer
Replace “available because Publish App” steps with install, Vite build to dist, and a host start. Fail the pipeline if Auth/entity calls you intended to replace still require Base44.
Base44 .env gets committed “just this once”
Export names into a template. Mint new values on the destination. Rotate old Base44 secret values after cutover.
Eject copies schemas, not live rows
Capture table CSV dumps separately. Reconnect or replace connectors by hand. Update Auth callbacks that still hardcode Base44 hostnames before DNS moves.
The extract sequence that actually boots
Pull, pin, remap rows, then prove start without Base44 open
Product behavior stays. Publish App GUI and Base44 backend assumptions leave. The destination is a conventional start command.
01
Take ZIP/GitHub source, lockfiles, schemas, and function entrypoints
Leave Base44 caches and secret-bearing config out. Capture table CSV dumps separately so CI does not invent entity rows.
02
Pin Node and encode Base44’s start path as a CI job
Version files or the base image. Fail if the app only boots when Base44 servers answer Auth/entity calls you intended to replace.
Never commit Base44 .env. Dual-write or restore rows, then verify the destination database on a clean runner.
04
Prove install → test → build → start with Base44 closed
The destination boots from that checkout alone. Publish App is no longer required for production.
How to
Extract a Base44 tree into standard owned CI
ZIP/eject-plus-normalization. Success is install → test → build → start with no open Base44 editor and no Publish App for production.
Step 01
Decide what belongs in the extract versus what stays behind
Take ZIP or GitHub source, lockfiles, entity schema files, function entrypoints via eject, Auth config maps, and a written map of connectors. Leave caches and secret-bearing config out. Capture table CSV dumps separately.
Step 02
Turn Base44 Publish and env into portable CI
List VITE_BASE44_* and server secrets Base44 assumed. Pin Node. Replace Publish-only steps with install, Vite build, and a host start or static publish.
Step 03
Mint destination secrets and remount Auth
Export names into an env template. Never commit Base44 .env. Update Auth callbacks and CORS that still hardcode Base44 hostnames before DNS moves.
Step 04
Restore entity rows and reconnect connectors
Eject copies schemas, not live rows. Restore CSV into the destination database. Reconnect or replace connectors by hand.
Step 05
Prove the destination boots from checkout alone
install → test → build → start with the Base44 editor closed. Rotate old Base44 secret values after cutover. Publish App is then optional.
Read next
Proof, the essay, and sibling intents
These pages are already on the site. Use them to pressure-test the bet before a call.
What belongs in the Base44 extract versus what stays behind?
Take ZIP or GitHub source, lockfiles, entity schema files, function entrypoints (via eject), Auth config maps, and a written map of connectors. Leave Base44 caches, `.app.jsonc` secrets, and editor-only junk out of the remote. Capture table CSV dumps separately—eject copies schemas, not live rows. Prompt-history notes that never hit disk need an explicit “include or drop” pass.
How do you turn Base44 Publish and env into CI?
List env vars Base44 assumed (`VITE_BASE44_*` and server secrets). Pin Node in the CI image. Replace “available because Publish App” steps with `npm ci` / `pnpm i`, build (often Vite → `dist`), and a host start or static publish. Fail the pipeline if the app only boots when Base44 servers answer Auth/entity calls you intended to replace.
How should secrets, Auth, and data cutover work during the Base44 extract?
Export secret names into an env template; mint new values on the destination; never commit Base44 `.env`. Restore entity data into the destination database; reconnect or replace connectors by hand. Update Auth callbacks and CORS that still hardcode Base44 hostnames before DNS moves. Rotate old Base44 secret values after cutover so leaked panel copies die.
Why does “download the Base44 ZIP” without normalization fail on standard hosts?
CI images lack Base44-injected runtime the hosted app hid; Auth and entities still call Base44 via app ID/base URL; connectors are not in the ZIP as live credentials; row data never left Base44. Normalize install, replace Base44 backend dependencies you are exiting, and env first; then push. A green Base44 Publish App is not a portable, fully owned build.
Boot from checkout—not from the Publish App GUI.
Bring the ZIP or eject and the start command Base44 assumed. We will say whether this is a portable Vite tree — or an app that only runs while Base44 servers answer.
“What impressed us most about CodeCross was their ability to deeply understand our vision and translate it into a complete digital solution. Unlike many agencies that just focus on technical delivery, CodeCross approached our project like true partners.”