> ## Documentation Index
> Fetch the complete documentation index at: https://docs.instapods.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Import from AI builders

> Deploy a Claude artifact or ChatGPT canvas as an InstaPods pod in one step.

If you've built something in an AI builder and want to turn it into a real, share-able URL, the import flow takes you from a public artifact link (or pasted source) to a running pod — no manual file syncing, no preset picking.

Supported tools:

* **Claude artifacts** at `https://claude.ai/public/artifacts/<id>` — fetched and parsed end-to-end (HTML, React, SVG, Mermaid, and code snippets).
* **ChatGPT canvases** at `https://chatgpt.com/canvas/shared/<id>` — fetched and parsed end-to-end (HTML, React, code, document).
* **Anything else** (v0.dev, Bolt.new, Lovable.dev, hand-written) — copy the source out of the original tool and use the paste-source path. ChatGPT chat shares (`/s/cb_*`, `/share/*`) also fall into this bucket; their content is auth-gated client-side and can't be auto-fetched.

<Tip>
  Lovable apps are full-stack and push to GitHub, so the [Deploy a Lovable app](/guides/deploy-lovable-app) guide (GitHub auto-deploy) is a better fit than pasting source.
</Tip>

## From the dashboard

1. Open **Import** from the sidebar (or visit `/dashboard/import`).
2. Paste a Claude artifact URL or ChatGPT canvas URL into the **Import from URL** tab.
3. Click **Preview** to see the parsed artifact (title, type, file list, inline iframe) before committing.
4. Click **Deploy** to create the pod. You're redirected to the pod's detail page where a status strip narrates the import as it finishes.

If you don't have a supported URL — for example, you copied source from v0 — switch to the **Paste source** tab, paste the body, optionally pick a type (HTML, React, SVG, Mermaid, code), and deploy.

## From the CLI

```bash theme={null}
# Deploy a Claude artifact in one shot
instapods import https://claude.ai/public/artifacts/72d792c1-067c-48ea-9907-ebfb0492f7c0

# Deploy a ChatGPT canvas
instapods import https://chatgpt.com/canvas/shared/6a05f2c770348191b0491c2729ef9ee0

# Preview without creating a pod
instapods import https://claude.ai/public/artifacts/<id> --dry-run

# Paste-mode for tools without auto-fetch support
instapods import --paste --from-file ./component.jsx --title "My Component" --type react

# Pipe straight from the clipboard (macOS)
pbpaste | instapods import --paste --title "From clipboard" --type html
```

Useful flags:

* `--name <pod-name>` — override the auto-derived name (defaults to a slug of the artifact title).
* `--region <slug>` — pick a region instead of the auto-resolved one.
* `--plan <slug>` — `launch` (default), `build`, `grow`, `scale`, `turbo`.
* `--dry-run` — fetch + parse only, don't create a pod.
* `--wait <seconds>` — how long to wait for the import to finish before returning (default 180, `0` skips the wait).

The CLI prints `✓ Imported "title" from claude (1 file)` once the backend's `import_complete` event lands. If the import partially succeeds or fails, you'll see a yellow `⚠` or red `✗` line with the reason.

## What happens behind the scenes

1. The backend fetches the artifact (or parses the pasted source) and normalizes it into one or more files plus a target preset (`static` for HTML/SVG/React, etc.).
2. A pod is created via the normal lifecycle service. If you didn't supply a name and the slug is already taken, the importer auto-suffixes (`-2`, `-3`, …). Explicit names still error if they collide.
3. The pod warms up; in parallel, a background goroutine waits for it to reach `running` and then pushes each artifact file via the per-server exec client.
4. Pod events narrate the journey: `import_started` → `import_complete` (or `import_partial` / `import_failed`). The dashboard's status strip and CLI both watch these events.

Once the strip turns green you can click the artifact's public URL — the pod is live.

## React artifacts

Claude's React artifacts deploy as a single-page `static` pod that loads React + Tailwind from CDNs and compiles the JSX in-browser with `@babel/standalone`. This trades a slower first paint for instant deployment with no build step. To convert into a real bundled app, edit the pod's files (`src/App.jsx` and `index.html`) or `instapods deploy` over the top with your own Vite/Next.js project.

## Troubleshooting

* **"pod 'xyz' already exists"** — happens when you supply an explicit `--name` that collides. Either drop the flag (we'll auto-suffix) or pick a different name.
* **"no importer matches URL"** — the URL doesn't match either `claude.ai/public/artifacts/<id>` or `chatgpt.com/canvas/shared/<id>`. Copy the source out of your tool and use paste mode.
* **"Claude returned HTTP 404" / "ChatGPT returned HTTP 404"** — the artifact is private or has been deleted. Make sure the share link is public ("Publish" in Claude, "Share canvas" in ChatGPT).
* **Status strip stays on "Importing…" longer than expected** — the pod is still warming up. The strip polls every 3s for up to 5 minutes. Check the events tab for the latest state.
