# How to deploy a website from Claude Code

By Avatar 8 (Avatar 8 LLC) · Published November 12, 2026 · https://deed.page/blog/deploy-a-website-from-claude-code

To deploy a website from Claude Code means having Claude Code upload the files it built to a host and hand you back a public HTTPS link, without you opening a dashboard. On deed.page that is one `curl` request with no account, and the Free plan holds 25 sites of up to 25 MB each ([pricing](https://deed.page/pricing)).

Claude Code writes and edits files in your project folder, but it does not host them. Most guides send you through a GitHub repo, a hosting account, or a browser sign-in first. The steps below skip all three. Every command was run against production on November 12, 2026 with a 15-minute expiry, and the test sites were then deleted.

## How do I deploy a website from Claude Code?

Ask Claude Code to build the site, then to publish it with the line below. Claude Code has a shell, so it can run the command itself and read the link from the reply.

```bash
curl -T index.html "https://deed.page/v1/sites?slug=portfolio-cc-m3t8&ref=blog"
```

The reply had `"url": "https://portfolio-cc-m3t8.deed.page/"`, `"version": "v1"`, and a `deed_tok_…` owner token shown once. Pick your own suffix; that slug is only an example, and a slug someone else owns returns `409 slug_taken` with a free suggestion ([choosing a slug](https://deed.page/blog/choosing-a-slug)). There is no sign-up, no claim link, and no default expiry; the site stays up until its owner deletes it.

## A built folder (Vite, Astro, plain HTML with assets)

Most Claude Code projects end up as a `dist/` or `out/` folder. Pack it with `tar -C` so `index.html` sits at the root, then send it with the token from the first publish:

```bash
tar -C dist -czf site.tar.gz .
curl -T site.tar.gz -H "Authorization: Bearer $DEEDPAGE_TOKEN" \
  "https://deed.page/v1/sites?slug=portfolio-cc-m3t8&ref=blog"
```

In our test that returned `"version": "v2"` at the same URL, and `/assets/app.css` served as `text/css`. Sending the same tarball again returned `"unchanged": true` without creating a new version. Sites with server code (API routes, server rendering) need a host that runs a server; deed.page serves static files only. Bigger builds go up in parts ([large sites](https://deed.page/blog/plan-upload-large-sites)).

## Deploy from Claude Code with MCP instead

If you would rather Claude Code call a tool than a shell command, add the deed.page MCP server once ([Claude Code MCP docs](https://code.claude.com/docs/en/mcp)):

```bash
claude mcp add --transport http deed-page https://deed.page/mcp
```

With `--scope project`, the command wrote a `.mcp.json` entry of type `http`. `claude mcp list` then showed the server as "Pending approval" until you run `claude` in the folder and approve it, which is how Claude Code treats every project-scoped server. There is no sign-in step on the deed.page side. The tool call Claude Code sends looks like this:

```json
{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"publish_site","arguments":{"slug":"portfolio-cc-mcp-m3t8","files":{"index.html":"<!doctype html><title>Portfolio</title><h1>Portfolio from Claude Code</h1>"}}}}
```

It returned `ok: true`, `version: "v1"`, the subdomain URL, and a token. Passing that token to `update_site` gave `v2` at the same address. The [MCP walkthrough](https://deed.page/blog/mcp-publish-walkthrough) lists the other tools.

## Make it the project's way to deploy

Claude Code reads `CLAUDE.md` at the start of every session ([memory docs](https://code.claude.com/docs/en/memory)), so one line there stops each new session from searching for a host again:

```text
Deploy: tar -C dist -czf site.tar.gz . then curl -T site.tar.gz with
Authorization: Bearer $(cat ~/.deedpage-token) to
https://deed.page/v1/sites?slug=<our-slug>. Tell me the url from the reply.
```

For a one-keystroke version, a file at `.claude/commands/deploy.md` creates a `/deploy` command ([skills docs](https://code.claude.com/docs/en/slash-commands)). Claude Code asks before it runs a new shell command; choosing "Yes, and don't ask again" saves an allow rule in `.claude/settings.local.json` ([settings docs](https://code.claude.com/docs/en/settings)).

Keep the token in a file with `chmod 600` and out of git, not in `CLAUDE.md` itself ([token hygiene](https://deed.page/blog/token-hygiene-for-agents)). deed.page stores only its SHA-256 ([trust](https://deed.page/trust)).

## FAQ

**Does Claude Code need an account to deploy?**
Not on deed.page. The first publish mints an owner token, and that token is the only credential. Some hosts in Claude Code guides, such as [Ginta](https://ginta.app/claude-code-hosting/) and [ProductEcho](https://www.productecho.com/blog/deploy-website-built-with-claude-code), ask you to sign in through a browser first.

**Can I use my own domain?**
Yes. Free includes one custom domain over the API, Hobby three, Pro twenty ([custom domains](https://deed.page/blog/custom-domains-via-api)). Claude Code can add it, but you still create the DNS records.

**Will the site disappear if nobody visits it?**
No. Sites do not expire unless you send `X-Ttl` for a throwaway page ([TTLs](https://deed.page/blog/ttl-for-throwaway-pages)). Free sites show a small "Published with deed.page" link; Hobby at $3 a month removes it.
