Embarko is inBeta

Guide

How to Host a Website Built with Claude

Built a website with Claude? Ask Claude Code to deploy it and get a live HTTPS link, no GitHub or Vercel needed.

Claude built your site, and it runs at localhost:3000, where only your computer can open it. One ask in Claude Code takes it the rest of the way.

To host a website built with Claude, ask Claude Code to deploy it.

Install Embarko’s deploy skill or paste the deployment prompt from embarko.ai, and the agent packs your project folder, uploads it and hands you a live HTTPS link. A static site is usually live within seconds, and a server app builds first, so it takes longer. No GitHub or Vercel is needed.

takeaways.log

Key takeaways

  • A website Claude builds runs on localhost, which only your own computer can open. To share it, it needs a host.
  • The usual route to a host asks for a GitHub repository, a hosting account, build settings and secret keys.
  • You have two main routes with Embarko: the Claude connector (add it once, then ask Claude to deploy) or Claude Code (paste the deployment prompt or install the skill).
  • With the connector, the site is permanent from the start. With Claude Code, the agent deploys first and asks for your email only after the site is live, then Embarko emails you a token to keep it.
  • With Claude Code, your first link needs no account. Press Keep within 24 hours and it stays at the same address. Anyone with the link can open the site.

01 — Only on your computer

Why your Claude website isn’t online yet

When Claude builds a website, it runs it on your own machine so you can try it. You’ll often see an address like localhost:3000. “Localhost” simply means “this computer”, so a link that starts with it only works for you. Send it to a friend and it points at their computer, where your site doesn’t exist.

Putting a site online is called deploying. It takes three things: a server that stays on, your site’s files copied onto it, and a public address anyone can open. Together that’s called hosting. Claude builds the site, but something else still has to host it.

Hosting is three parts

A server that stays on, your files on it and a public address: together, that’s hosting, and your friend can open the site.

02 — The usual road

Why hosting a Claude-built site gets complicated

Claude gives you a folder of code that works. The usual route to a host then asks for more than you may expect:

  1. A GitHub account and a repository, plus enough Git to push the folder Claude made.

  2. A hosting service. Vercel, Netlify and others each have their own sign-up, dashboard and vocabulary.

  3. Build and start settings, and sometimes a Dockerfile Claude didn’t write.

  4. Secret keys kept out of the code and added as environment variables on the host.

  5. Build logs to read when a deploy fails, written for developers.

Five more tabs, and your site is still at localhost:3000.

That’s fair work for a developer. For a small site Claude wrote in one sitting, it’s a long way from “it runs” to “here’s the link”.

03 — Side by side

The usual route compared with Embarko

Embarko is hosting that your AI tool runs for you. Claude packs or sends the site and checks that it’s live.

Drag the handle: each chore on the usual route lines up with what Claude Code does instead.
The usual route compared with hosting a Claude-built site on Embarko
The usual routeWith Embarko
Push Claude’s folder to a GitHub repository No repository. Claude sends the files directly.
Sign up for a host such as Vercel With Claude Code, your first link needs no account.
Configure the build, maybe add a Dockerfile No Dockerfile. Embarko detects the language and builds the site itself.
Read the build logs yourself Claude checks the status and hands you the link.

04 — Your starting point

Which Claude did you build it with?

“Built with Claude” can mean a few different setups, and each has its own route to a live link.

Where does your site live?

Claude Code: a project folder on your computer

Best route
The deploy skill or the copied prompt. The agent packs the folder and uploads it over HTTP.
Good to know
The first deploy needs no account and is temporary until you keep it.

Claude in a chat, with the Embarko connector

Connector already added?
Best route
Add the Embarko connector once, then ask Claude to deploy. Claude sends your site’s files with deploy_app.
Good to know
No terminal and no token, and the site is permanent from the start. It works even where a sandbox blocks Embarko. A very large site may not fit in one call: use Claude Code or the upload page.

A Claude Artifact

Does it call window.storage?
Best route
Put the files in a project, then deploy with the connector or Claude Code.
Good to know
An artifact that calls window.storage is rejected at deploy. Replace it with SQLite, with the file under DATA_DIR. That makes it a server app.
Pick where your site lives, and follow its route to a live link.
See them side by side
The Claude setups and the best route to a live link for each
Where your site livesBest routeWhat to know
Claude Code: a project folder on your computerThe deploy skill or the copied prompt. The agent packs the folder and uploads it over HTTP.The first deploy needs no account and is temporary until you keep it.
Claude in a chat, with the Embarko connectorAsk Claude to deploy. It calls the connector’s deploy_app tool with your site’s files.No terminal, no token and nothing to keep. It works even where a sandbox blocks Embarko.
Claude in a chat, with no connector and no terminalAdd the connector once. If you can’t, ask Claude for a .zip of the site and use the upload page.Nothing Claude does from inside the chat can reach Embarko until the connector is added.
A Claude ArtifactPut the files in a project, then deploy with the connector or Claude Code.An artifact that calls window.storage is rejected at deploy. Replace it with SQLite under DATA_DIR.

Is your site only in a Claude chat? Add the Embarko connector and ask Claude to deploy, as the next section shows. If you can’t add it, save the files into a project folder and use Claude Code, or ask Claude for a .zip and use the upload page.

05 — The connector route

How to host a website built with Claude with the connector

A connector lets Claude deploy and manage your apps from inside the chat, signed in as you. Claude is the only AI tool with an Embarko connector today. It needs no token, nothing to install, and it works where a sandbox blocks ship.embarko.ai. Only you can add it.

1. Add the connector once

Open claude.ai/directory/embarko, add Embarko and sign in. It’s the same sign-in as embarko.ai, so you’ll see the apps and workspaces you already have. If Claude says it can’t reach Embarko, it will give you this one link and ask you to connect first.

2. Ask Claude to deploy

With the connector added, ask Claude in plain words, for example:

Deploy my portfolio site to Embarko and send me the link

Claude calls deploy_app with your site’s files (text as it is, images and other binaries as base64), then calls read_app to check the status until the site is live. A plain static site is usually live straight away. You’ll get a link like your-site-name.embarko.app.

3. What the connector can do

The four tools the Embarko connector gives Claude
ToolWhat it does
deploy_appDeploys or updates an app from its files. The app goes straight into your account: permanent, nothing to keep.
read_appShows status, logs, details and analytics.
update_appSets environment variables, connects your own domain, rolls back and sends feedback.
app_danger_zoneRenames or deletes an app, only after you confirm.

4. Know the limit

A connector call carries the whole site inside one tool call, so it’s limited by how much Claude can write in one reply, well before the 25MB cap. Send source files only: no node_modules, build output or videos. Images the site shows are fine, but very large media (over about 5MB each) should live on an outside host. There’s no way to split one deploy across several calls. If your site is too big, use Claude Code with the HTTP upload, or the upload page.

Or upload a zip

If Claude can’t reach Embarko and you can’t add the connector, there’s a route that needs no terminal. Ask Claude for the site as a .zip to download, then sign in at embarko.ai/app, choose Deploy an app and Upload file, and pick the folder or .zip. The browser packs it, the site goes into your account, and it’s permanent from the start.

06 — What Claude built

Is your site static or a server app?

This decides how it’s published and what it can do. Check what Claude built for you:

A folder with index.html and its CSS, JS and images

Static site.

Published with no build and no server, usually live within 2 seconds.

No logs, no environment variables and no DATA_DIR. A static site can’t later become a server app. The Free plan lists unlimited static websites (pricing).

A Vite, Create React App, Lovable or Bolt project

Built on Embarko, then served as a website.

Send the project with its package.json and build script, not a built dist folder. No start script or server is needed, and links to inner pages load the app.

Values the build reads, such as VITE_ ones, can’t come from .env. Put public values in a committed config file, and never put a secret key in frontend code.

A site with a Node or Python backend

Server app, one process.

It reads its port from PORT and listens on 0.0.0.0. Keep data in SQLite under DATA_DIR, which survives redeploys, and keep your own copy of important data. The Free plan lists 1 dynamic app (pricing).

Pick what Claude built. The scan finds the file that decides how Embarko treats it.
See it as a table
Static site or server app: how Embarko treats what Claude built
What Claude builtHow Embarko treats itWhat to know
A folder with index.html and its CSS, JS and imagesStatic site. Published with no build and no server, usually live within 2 seconds.No logs, no environment variables and no DATA_DIR. A static site can’t later become a server app.
A Vite, Create React App, Lovable or Bolt projectBuilt on Embarko, then served as a website.Send the project with its package.json and build script, not a built dist folder. No start script or server is needed, and links to inner pages load the app.
A site with a Node or Python backendServer app, one process.It reads its port from PORT and listens on 0.0.0.0. Keep data under DATA_DIR, which survives redeploys.

Needs Postgres, live updates, scheduled jobs, two apps in one project or a GPU? Here’s the route for each, in the FAQ.

07 — Four steps

How to host a website built with Claude, step by step

Four steps. Tap a number when you’ve done it. 0 of 4 done.

preflight.check

Before you start

  • Your site runs locally.
  • Claude Code can run commands and reach the internet. It may ask you to approve them.
  1. Open the project in Claude Code

    Start Claude Code in the folder that holds your site. That folder is what gets uploaded.

  2. Give Claude the deploy instructions

    Option A, the skill (faster)

    Run this once in your terminal:

    npx skills add embarko-ai/skill --skill embarko-deploy -g

    This needs Node.js, because the command uses npx. The skill packages and deploys for you, and its source is at embarko.ai/skill. If npx isn’t found, install Node.js or use Option B, which needs nothing installed.

    Option B, the prompt

    Open embarko.ai, copy the deployment prompt and paste it into Claude Code. It tells the agent how to deploy, so you don’t have to learn the API.

    deployment-prompt.txt What this does: tells Claude Code how to pack, upload and check your site.
    Deploy this app to Embarko — cloud hosting for small apps. No Dockerfile, no signup.
    
    Read https://embarko.ai/docs/quickstart.md and follow it. Nothing to install.
    Deploy anonymously first — no token, no account — then give me the live URL.
    Only once it's live, ask me for my email: Embarko mails back a token that makes the app permanent.
    
    Faster, if your tools let you install one: npx skills add embarko-ai/skill --skill embarko-deploy -g

    Option C, the Claude connector

    Working in the Claude chat instead of Claude Code? Add Embarko to Claude once at claude.ai/directory/embarko and sign in, then ask Claude to deploy. It sends your site’s files with deploy_app, needs no token, and the site is permanent from the start. See the connector section for the steps.

    Here’s an example of what to ask:

    Deploy my portfolio to Embarko and share the live link
  3. Let Claude Code do the deploy

    It packs the project (leaving out node_modules, .git and .env files), uploads it, and checks the status about every 10 seconds for a server app, or about every 2 seconds for a static site, until it reaches live. A static site is usually live in the first reply, and a server app builds first, so it takes longer. It then opens the link itself to check the main feature works, and gives you the link and the exact time the site will be deleted if you don’t keep it. Claude Code may ask you to allow the commands.

    Claude Code · ~/my-portfoliolive
    1. > Deploy my portfolio to Embarko and share the live link
    2. ● Packed my-portfolio left out: node_modules, .git, .env
    3. ● Uploaded · 202 Accepted build started, not live yet
    4. ● status: building 0:10
    5. ● status: building 0:20
    6. ✓ status: live · https://your-site-name.embarko.app

    A server app builds first, so Claude Code checks the status until it says live.

    • A first reply of “202 Accepted” only means the build has started. Only live counts. See Is it live?
    • If Claude Code says it can’t reach Embarko, see if something goes wrong below.
  4. Open your link and keep it

    Claude Code gives you the address, your-site-name.embarko.app. Open it and click around to confirm it works. A site made without signing in lasts 24 hours with no reminder email, and the agent tells you the exact time it will be deleted. It offers to keep the site once it’s live: say yes and give your email, then Embarko emails you a token, you paste it back, and the agent redeploys the same name with it. The link stays the same, and the reply says claimed. How keeping works.

    your-site-name.embarko.app

    Click around: Projects, About and Contact. Then keep it.

localhost:3000your-site-name.embarko.appOnly you can open it

Finish the four steps and your site gets a live link.

Stuck at any step? Failed deploys often come down to the port, a missing setting or the main file not sitting at the top of the folder.

Open the fix list

Good to know

Languages
Embarko detects Node, Python, Go, Ruby, PHP, Rust, Java and plain static sites.
Dockerfile
Delete any Dockerfile Claude added. Embarko builds the site itself, and a Dockerfile is a common reason a deploy fails. See the quickstart.
Memory
Each server app gets 256MB, which can’t be raised, and runs as one process.
Site names
Lowercase letters, digits and dashes, 3 to 63 characters, not starting or ending with a dash. The name becomes your subdomain and must be unique across all of Embarko. If it’s taken, the agent picks a close variant and tells you. Some names, such as www, api, app, admin, docs and help, are reserved. See app names.

Try a site name

  • Lowercase letters, digits and dashes
  • 3 to 63 characters 12
  • Not starting or ending with a dash
  • Unique across all of Embarko

Fits the rules: my-portfolio.embarko.app

Upload size
Connector and JSON uploads are limited to 25MB and 2,000 files. A .tar.gz upload has no file count limit. See deploy.

08 — Later

Changing the site later

Ask Claude to deploy again with the same name. With the connector, deploy_app updates the same app. With Claude Code, the agent redeploys with your token. Embarko keeps your last 5 builds, so you can undo a bad update: it switches back to an earlier successful deploy with no rebuild, keeps your current environment variables and domains, and never rolls back your data in DATA_DIR. Since Embarko isn’t where your code lives, keep your own copy too. A local Git repository is enough.

Redeploy my site to Embarko with the same name.

Your own domain

You can use a domain you already own. Claude connects it and tells you the exact DNS record, and you add that record where your domain is managed. A root domain gets an A record and a subdomain gets a CNAME. You can also do it yourself in the dashboard: open embarko.ai/app, choose the site and open its Domain tab. The pricing page lists your own domain on the Creator plan.

A subdomain gets a CNAME record.

A root domain gets an A record, and a subdomain gets a CNAME.

Troubleshooting

If something goes wrong

Pick what you’re seeing to get the likely cause and the fix.

What are you seeing?

deploy.log
$pick what you see

Failed deploys often come down to the same three things:

  1. 1

    The port.

    A site that listens on a fixed port or only on localhost.

  2. 2

    A missing setting.

    A key or setting that lived in a .env file and is missing on the host.

  3. 3

    The main file.

    The project’s main file not sitting at the top of the folder.

If the link doesn’t open, or the status says failed or crashed, ask Claude Code:

Make my site read its port from the PORT environment variable and listen on 0.0.0.0, then redeploy.
See every error at once
deploy.log: what you see, and the fix
Common deploy errors, their likely cause and the fix
What you seeLikely causeFix
403 host_not_allowed or a network errorYour own environment blocks ship.embarko.ai. Nothing was deployed.Switch route: add the connector, or ask for a .zip and use the upload page.
409 app_name_taken or 409 app_name_reservedSomeone already uses the name, or it’s a reserved name.Pick a different name. Don’t retry the same one.
422 no_manifest_at_rootpackage.json (or similar) is in a subfolderPackage from the folder the error names.
422 app_nested_in_subdirectoryYour root package.json hands the build to a subfolder such as frontend/Deploy the folder named in deployThisInstead. A frontend and a backend are two apps.
The status says failedThe build failed. For example, Exit code 127 means a command in the build script wasn’t found.Read the logs, fix the cause and redeploy with the same name.
The status says crashedIt built but stopped running.Read the logs for errors, fix them and redeploy.
Site gone after a dayIt was never keptDeploy it again and keep it this time.
The link doesn’t open, or the page doesn’t workThe site isn’t reading PORT, isn’t listening on 0.0.0.0, saves data outside DATA_DIR, or needs WebSockets or scheduled jobsFix the cause, then redeploy with the same name.

Every code is in the errors reference.

Written by

The Embarko team
Published
Updated
Read time
14 min
Questions answered
11

09 — Questions

FAQ

What does it mean to host a website?

Hosting means putting your site’s files on a server that stays online and giving it a public address. Without it, a site built with Claude only exists on your own computer at an address like localhost:3000, which nobody else can open.

How do I host a website built with Claude?

Add the Embarko connector to Claude and ask it to deploy, or paste the deployment prompt from embarko.ai into Claude Code. Either way you get a live HTTPS link. No GitHub repository or Vercel account is needed, and the first deploy needs no account of any kind.

Should I use the connector or Claude Code?

Use the connector if you work in the Claude chat and want the site permanent from the start with no terminal. Use Claude Code if your project is a folder on your computer, or the site is too big for one connector call. The connector deploys the site’s files from the chat, and Claude Code uploads the project folder.

Do I need GitHub or Vercel to host a Claude-built site?

No. Embarko takes your site’s files directly, so there’s no repo to create and no account to connect. Embarko isn’t where your code lives, so keep your own copy: a local Git repository, a copy in cloud storage or a backup of the folder all work.

Will my website stay online?

Yes, once it’s in your account. A site deployed with the connector is permanent from the start. A site deployed over HTTP is deleted 24 hours after its first deploy unless you keep it: Embarko emails you a token, you paste it back, and the agent redeploys the same name with it. The link stays the same.

Can I host a Claude Artifact?

Yes, if it works as a normal web app. Put its files in a project and deploy that. An artifact that uses window.storage is rejected at deploy with a 422 unsupported_storage_pattern error. Replace it with SQLite, with the database file under the DATA_DIR folder, because only that folder survives a redeploy. That makes it a server app, not a static site.

What if my site needs something else?

If your site needs something else, here’s the route:

What to do if your site needs something Embarko doesn’t run
If your site needsWhat to do
Postgres or MySQLEmbarko has no managed database. Use SQLite with its file under DATA_DIR, and keep your own copy because data isn’t backed up.
Live updates (WebSockets)Not supported. Use regular HTTP requests, with the browser polling.
Scheduled jobsNot supported. Put the job behind an HTTP route protected by a secret, and call it from an outside scheduler.
A frontend and a backendThey’re two apps. Deploy the backend first, point the frontend at its address, and allow the frontend in the backend’s CORS.
Sign-in or a private siteEmbarko doesn’t provide login or private apps yet. Build sign-in into the app itself.
More than 256MB of memoryEach app gets 256MB, which can’t be raised, so a site that needs more has to stay on a host built for it.

Is it safe to put my Claude website online?

Keep secret keys out of your project files. The deploy leaves .env files out of the upload, and you can add keys as environment variables, which Embarko stores write-only so nobody can read them back. Also remember that anyone with your link can open the site, so if it uses your AI key, set a spending limit with your AI provider if they offer one.

Can I use my own domain?

Yes, if you already own one. Claude connects the domain and tells you the one DNS record to add, and you add it where your domain is managed. The pricing page lists your own domain on the Creator plan. See own domain for the steps.

What if Claude can’t reach Embarko?

An error such as 403 host_not_allowed means your environment blocks ship.embarko.ai and nothing was deployed. Add the Embarko connector, which works from outside your sandbox, or ask Claude for a .zip and use the upload page at embarko.ai/app.

Is it free?

There’s a Free plan with unlimited static websites and 1 dynamic app, with Embarko branding. Creator is $9/month billed yearly for up to 5 dynamic apps, and Team is $23/month billed yearly for up to 20. Prices are from embarko.ai/pricing and can change.

Only your computer can open it

Your turn

Built something with AI? Ask it to deploy to Embarko.

Install the skill or copy the prompt, and get a live link without creating a repo.

  1. Copy
  2. Paste into Claude Code
  3. Share your link

Keep reading: How to deploy an AI app · Deploy an app without GitHub · Agent quickstart · Troubleshooting reference · Pricing

Your turn

Seen enough?
Ship something.

Copy the Embarko prompt, paste it into your AI agent, and your app goes live on its own link.

  1. Copy
  2. Paste into your agent
  3. Share your link