Deploy a site
Drop the folder Claude gave you. You get a URL.
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.