Deploy a Bolt.new export: host your Bolt app on ohmyho.st

A Bolt.new export is an ordinary repository — usually Vite and React with Supabase — minus the one thing that made it run: the environment. The .env stays behind, so the first deploy of an export fails on missing values rather than on anything you built.

Use your selected Bolt GitHub export or accessible downloaded files, paste one prompt into your coding agent, and the agent separates public build configuration from private runtime secrets, builds the app, deploys it to a protected Dev host and promotes it to Prod once you have checked it. Free grants 200 credits a month, Paid is $10 for 1,000 credits shared by every project you run.

bolt export · github repoyour agentmcpohmyho.stproject_createsource_linkdeployment_plandeployment_createhostingpostgreslink a domainemaillive url
The agent reads llms.txt, calls the MCP tools (project_create, source_link, deployment_plan, deployment_create and the rest of the 114-tool catalog) and returns the live URL. Deployment and promotion use a plan followed by an execution step.

Export from Bolt

Bolt gives you two ways out: keep its selected GitHub export or work with accessible downloaded files.

GitHub connection. Connect GitHub from the project's settings. Bolt creates a private repository on a main branch and commits every change that does not break the project (support.bolt.new/integrations/git, read 2026-09-20). When GitHub is your selected source, the repository Bolt just made is what your agent links. Accessible ZIP contents can instead be saved as managed versions from a local checkout through the deploy Skill. Keep an existing project's current source until you explicitly request a switch. Bolt keeps committing to that branch while the connection is on. Decide who owns main before your agent starts editing; two authors on one branch is how a working app ends up with a broken lockfile.

ZIP download. The download gives you the code and nothing else: no .env values, no Supabase keys, no database rows, no uploaded files. Extract it into the selected local checkout and save managed versions, or push those files to a GitHub repository when you choose that route. Continue with the same prompt.

Either way, check the framework first. ohmyho.st runs Vite with React, Next.js and TanStack Start from managed versions or a selected GitHub repository. A Bolt project built on Expo, Astro or SvelteKit is outside that set and will not deploy here. There are no containers.

What breaks after export

Three things stop working the moment the code leaves Bolt. None of them is a surprise once you know where to look.

The .env must be recreated. Bolt's Supabase integration kept the project URL and anon key in an environment file that the ZIP does not carry and the repository should not. Those two are public client values by design. Verify their non-secret build configuration for the selected source; managed snapshots exclude .env files, so necessary public build values must be saved in the supported source configuration. Anything private, such as a third-party API key or a Supabase service-role key, is different: your agent uses the local stdin command from secret_set_command or the supported remote portal input from secret_input_request, per environment; the value never enters chat or source. A browser bundle cannot hold a private key at all; if your Bolt app called a service-role key from the browser, that is a bug to fix before hosting, not a secret to move. Read secrets for the exact command shape.

Callback URLs point at the old host. Every project gets a Dev and a Prod host on <three-words>.check.omh.st. Supabase Auth, Better Auth, WorkOS AuthKit and any OAuth provider still list Bolt's preview or Netlify URL. Add the Dev host first, the Prod host after promotion and your own domain last. The agent tests a real login on each one; the ohmyho.st login is separate from your app's users. Details in application auth.

SPA rewrites are Netlify files. Bolt's built-in hosting is Netlify, so a _redirects or netlify.toml rule sends every path to index.html for React Router. Those files mean nothing on ohmyho.st. Your agent runs ohmyhost init --dry-run to read what the Vite build needs, then loads a deep link such as /settings after a reload on Dev before promoting. A route that works only from the home page is the most common first bug after a Bolt export.

Two smaller ones. Bolt projects rarely pin a package manager, and ohmyho.st needs exactly one packageManager field with one matching lockfile; the agent adds it. Supabase Realtime has no conversion path here; if your app subscribes to live rows, keep that part on Supabase.

Paste this prompt

Open the repository in Claude Code, Cursor or Codex and paste this. The agent reads the Skill, installs the CLI and the MCP server if they are missing, and shows you a sign-in link with a confirmation code. You sign in once in the browser; the agent does the rest through the 114 MCP tools.

Read https://ohmyho.st/llms.txt and https://ohmyho.st/skills/ohmyhost-get-started/SKILL.md. Connect this agent to ohmyho.st and develop and deploy this application using only the capabilities it needs. Read the existing project source first and follow the get-started Skill to reuse GitHub or managed versions for this workspace. After signing in, use the user and organization that whoami reports; never guess an account, organization or project ID. Follow the deployment Skill, keep my existing project decisions and verify the app.

Every expensive step is two calls: deployment_plan shows the quoted build and its effects, deployment_create runs it only after you confirm. The same pattern covers promotion, rollback and deletion.

How to move your app from Bolt

  1. Export. Keep Bolt's selected GitHub repository, or extract the ZIP into the local checkout you want to save as managed versions. Confirm the intended files/commit; if GitHub stays connected, stop editing in Bolt or account for its further commits on main.
  2. Inventory. The agent runs ohmyhost init --dry-run and reports blockers: framework and version, package manager pin, Netlify-only files and which Supabase capabilities the code actually uses. A package name alone is not a reason to replace anything.
  3. Decide about Supabase. Keep it after checking the export: declare the external browser origins it uses, update callback URLs and verify login, reads, writes and files on Dev. Or migrate the database to managed Postgres with the Supabase migration Skill, which converts the capabilities you select and leaves your auth provider alone unless you ask.
  4. Create and link. The agent creates the project with project_create, choosing US or EU once (the region cannot change later and prices are identical), then saves the chosen managed version or links the selected GitHub repository through source_link and the GitHub consent flow. Isolated Dev and Prod data is the recommendation; two databases consume credits separately.
  5. Plan, set secrets, deploy. deployment_plan quotes the build. You supply Dev's private values through the local command from secret_set_command or the supported remote private input link. deployment_create starts the build; the agent polls operation_get until it is done.
  6. Verify Dev, then promote. Dev is protected by default: project_dev_share_link_get returns a reusable share link you can open again or pass to a tester. Test a deep-link reload, a login and one write. Then promotion_plan and promotion_execute move the same artifact to Prod without a rebuild and without copying Dev records over Prod data. Update the Prod callback URLs.

Read the deployment Skill for every command and the Vite guide for the runtime contract.

Custom domain and mail (metered)

The platform host works on Free. Transactional mail needs Paid, which is $10 a month for 1,000 credits, and uses credits on top. Your own domain needs Paid too, or on Free a project that shows the “Powered by ohmyho.st” flag, and uses credits unless the flag shows. The domain serves Prod and requires an active Prod deployment.

Domain. The agent calls domain_paid_plan for the hostname, shows the CNAME and validation records, then domain_paid_apply. If your DNS is on Cloudflare, domain_cloudflare_authorize lets the platform set the records for you; otherwise you paste them at your DNS provider. A linked hostname is metered at 32.857143 credits per 1 paid custom hostname for a 744-hour month, about 32.86 credits a month, with no domain credits while the flag shows. Once domain_paid_status reports HTTPS ready, the agent updates your auth provider's callback URLs one last time. Read domains.

Mail. If your Bolt app sends its own mail (welcome, reset, receipts) through Supabase Auth or an external provider, keep that integration and verify its auth mail on Dev. Its browser calls need declared browser origins; server calls need declared egress and private runtime secrets. If you want ohmyho.st to send, the agent runs mail_setup for a mail subdomain, you add the DNS records mail_status returns, and mail_status reports when sending is ready. The domain has no monthly fee; every send is metered at 0.18 credits per 1 sent recipient for its one recipient. Transactional mail is sent and processed in the US regardless of your project's region, and you need no mail provider account of your own. Read email.

What it costs

One balance, every project, no per-project fee. Free grants 200 credits per UTC month and Paid grants 1,000 for $10; monthly credits expire at period end. Paid-only top-ups carry over until downgrade to Free (100 credits per dollar up to $100, 125 per dollar above it). Nothing recharges on its own.

A Bolt export that keeps Supabase is close to the cheapest thing you can host. There is no database here to meter, and Workers bandwidth is not charged.

Item Credits
5 build minutes 6.02
20,000 requests 1.97
200,000 CPU-ms 1.31
1 deployed script 6.57
Total: A Bolt export that keeps Supabase, on the platform host, for one month about 15.88

About $0.16 of credit value at the standard rate.

That fits inside the Free 200 credits with room to spare. Move the database to managed Postgres and add your own domain, and the picture looks like this:

Item Credits
5 build minutes 6.02
20,000 requests 1.97
200,000 CPU-ms 1.31
2 active database hours at 512 MiB RAM, including disk and seven-day backups 40.00
1 deployed script 6.57
1 custom hostname 32.86
Total: A Bolt export with managed Postgres on its own domain for one month about 88.74

About $0.89 of credit value at the standard rate.

The database line follows RAM and active time. One active database hour at 512 MiB RAM costs 20.00 credits; the 256 MiB size available on Free costs 10.00 credits. Databases sleep after five idle minutes, with no active-RAM charge while asleep. Allocated disk and seven-day backups are included. Customer files and retained Worker scripts keep their separate rates. A deployed script (about 6.57 credits a month) and an unflagged custom hostname remain metered. Set an optional project budget to continue or stop, and read it with project_budget_get. A zero balance starts the seven-day grace period; inspect current usage rather than assuming an inactive browser means an idle backend.

Keeping Supabase means Supabase keeps billing you. Its free tier stays free; Supabase Pro starts at $25 a month for the first project's compute, and that invoice does not move to ohmyho.st. List prices checked on 2026-09-28 — Supabase pricing.

FAQ

Do I have to leave Supabase?

Keeping it is an option to verify. Inventory the actual export, declare its exact browser origins in runtime.browser, declare server-side calls separately in runtime.egress.allow, and add the real Dev and Prod hosts to Supabase's redirect URLs. Verify login, protected reads and writes, and any used files or backend functions on Dev before moving traffic. Migrate only the capabilities you choose; there is no managed Realtime conversion, so a retained external subscription needs its own verified flow. Your auth provider is never swapped without your decision.

Can I keep editing in Bolt after the move?

You can, but pick one author for main. Bolt commits every non-breaking change to the connected branch, and your agent deploys the exact commit you name, so a Bolt edit that lands mid-review is not in the plan you confirmed. Most people finish in Bolt, export once and continue in Claude Code or Cursor.

Does the ZIP export include my database?

No. The ZIP carries code only; database rows, uploaded files and secret values stay in Supabase and in Bolt's settings. To move rows, take a Supabase Postgres dump and let the migration Skill convert the schema you select. Files move through the runtime storage client, and secrets are re-entered per environment through local stdin or the supported remote private portal input.

What happens when my credits run out?

A zero balance starts one seven-day grace period; your app, database and domain keep running through it. After it, only unfunded services suspend, and your data, an SQL export and buying credit stay available. A Paid subscription or a top-up clears it. A project budget in stop mode blocks new billable work earlier, on that project alone.

Can I get my data out again?

Yes, on demand. The Owner asks for an export and receives a password-encrypted ZIP with a portable SQL dump, at most one accepted request per project per rolling 24 hours, downloadable through a signed link valid for 24 hours. It is free, works at zero credits and restores on any Postgres host. There is no schedule and no bucket destination. Read backups.

Sources

From Lovable · Deploy from Claude Code · Cost breakdown · Host a Lovable app after export