Deploy a site

Drop the folder Claude gave you. You get a URL.

Drop your built folder here
a .zip or .tar.gz of the build output — up to 40 MB
What should I drop?

Zip the project folder — the one with package.json in it. We run npm install and npm run build ourselves, then serve what comes out. Skip node_modules/; it is reinstalled anyway and only makes the upload slow.

Already built it yourself? Drop dist/ or out/ instead and we serve it as-is, no build. Either way, a single wrapping directory is stripped, so your index.html lands at the root.

What gets rejected, and why?

Anything escaping its own folder (../), symlinks and hardlinks, archives over 40 MB or 5000 files, and formats other than .zip / .tar.gz. You are told which rule you hit and where — not just “invalid archive”. The same rules are re-applied to whatever your build produces, because a build runs your dependencies’ install scripts too.

My project has to run — an API, a bot

Then it is not a static site: it needs a Dockerfile and a claudetohost.yaml. Read the packaging contract — and if your project has neither, ClaudeToHost writes you the exact prompt to hand back to Claude.

Can I deploy over an existing site?

Yes — open the site and drop a new archive on it. The address stays the same; only what it serves changes. While a rebuild runs, the previous version keeps serving.

The packaging contract →