# How to host a website from ChatGPT or Claude

Host the HTML that ChatGPT or Claude wrote: save the page as index.html in its own folder, keep the images next to it, and drop the folder.

When ChatGPT or Claude writes a web page for you, you usually get HTML — and an
HTML file is already a finished page. There is nothing to build: save it in a
folder and drop the folder.

> **Starting a new site, or about to publish?** Paste [the One9x
> prompt](/docs/ai-tools/prompt) into the tool first — it builds static files,
> wires any form to your site's built-in form service, and keeps inside the limits.

## 1. Save the page

Create a new, empty folder for your site. Save the page into it with the name
**`index.html`** — that is the file a visitor sees first. If the tool gave you
more than one page, save the others in the same folder with names like
`about.html`.

- **Claude:** when the page opens in its own panel (an *artifact*), use the
  download option at the bottom right of that panel. ([Claude: what are
  artifacts](https://support.claude.com/en/articles/9487310-what-are-artifacts-and-how-do-i-use-them))
- **ChatGPT:** the page comes back as a block of code in the chat. Copy it with
  the block's copy button, paste it into a plain text editor, and save it as
  `index.html`. (ChatGPT's older *canvas* panel had a download button, but
  OpenAI is retiring it: [ChatGPT release
  notes](https://help.openai.com/en/articles/6825453-chatgpt-release-notes).)

Any other tool works the same way: use its download button if it has one,
otherwise copy the code and save it as `index.html`.

## 2. Add your images

Put any images, fonts or other files the page uses into the same folder — or a
folder inside it, like `images` — so everything the site needs is in one place.

## 3. Drop it

Drop the folder on your site's **Overview** tab, as in [Deploy from the
dashboard](/docs/dashboard), then **Upload and stage** and **Make live**. A site
like this does not need single-page app mode.

## Add a contact form

If the site has a contact form, it needs somewhere to send submissions. Your
One9x site already has one, free: define the form under **Widgets → Forms** and ask
the tool to use the HTML the dashboard generates. [Widgets](/docs/widgets#with-an-ai-tool)
has the steps and a sample prompt.

## Common mistakes

**The file isn't called `index.html`.** A page saved as `landing.html` or
`page.html` works at `/landing.html`, but the site's home address shows "not
found". Rename it to `index.html`.

**It saved as `index.html.txt`.** Some editors add `.txt` without showing it.
Check the file's full name before you drop the folder.

**Images show on your computer but not online.** Look at how the page refers to
each image:

- `C:\Users\you\Desktop\photo.jpg` or `file:///…` points at *your* computer.
  Nobody else can see it. Copy the image into the site's folder and change the
  address.
- `images/photo.jpg` — no slash at the start — is *relative*: it means "the
  `images` folder next to this page". That works on your computer and online.
- `/images/photo.jpg` — with a slash at the start — is *absolute*: it means "from
  the top of the website". It works online, but not when you double-click the
  file on your computer.

Also check that capital letters match: online, `Photo.JPG` and `photo.jpg` are
two different files.

**The tool gave you code with `import` and `export` lines, or JSX.** That is a
React component, not a finished page, and a browser can't open it on its own.
Ask the tool for "a single, complete HTML file" instead, or see
[Frameworks](/docs/frameworks) if you want to build it properly.

**A folder inside a folder.** `index.html` must be at the top level of what you
drop, not one folder further down.

## Details

The folder is served as-is: `/` is `index.html` and `/about` is
`about/index.html`. If you link to `about.html`, keep the `.html` in the link.
From the CLI:

```console title="html"
$ one9x pages release ./my-site --site mysite --deploy
✓ v1 live
→ https://mysite.one9x.app/
```