Updated
Host a Claude artifact at its own link, React included
By João Saraiva
What Claude makes comes in two kinds, and they need different things from wherever you put them. An HTML page goes up anywhere. A React component has to be built into a page first, and that step is where most of them break.
Which one you have
- HTML, if the code starts with
<!DOCTYPE html>or<html>. It is a whole page already. - React, if it starts with
importlines and hasexport default functionin it. It is a component, not a page. In Claude, the artifact window supplies the page around it, React itself, Tailwind's styles and the libraries it imports. - ChatGPT's canvas makes the same two kinds, and the same applies to each. Publish a ChatGPT canvas as a link.
An HTML page: any static host
A static host takes your files and serves them as they are, at an https address. GitHub Pages, Cloudflare Pages, Netlify and tiiny.host all work this way, and so does Solta. Some want an account and a project first; Netlify Drop takes a folder or a zip with no account to start, according to Netlify's own guide, read on 13 October 2026.
If the page loads other files, such as images, a stylesheet or a CSV, upload the folder rather than the page on its own, so the paths in it still point at something.
A React component: it has to be built first
A static host serves a .jsx file as it is, and a browser can't run it. The JSX has to be compiled, every import has to point at a real file, and something has to mount the component into a page. Without that, you get a blank page. tiiny.host's own page says as much: a React artifact shows a blank page once it leaves Claude, and its fix is to ask Claude to convert it into a self-contained index.html first (read on 13 October 2026).
There are three ways to do that step. The reasons behind each one are in why a React file from Claude shows a blank page.
1. Build it yourself
The way a developer would. It works on any host, and you build again after every change.
- Create a React project with Vite:
npm create vite@latest my-page -- --template react cd my-page && npm install - Replace
src/App.jsxwith Claude's file, andnpm installeach package it imports, such asrechartsorlucide-react. - Add Tailwind with its Vite plugin,
@tailwindcss/vite. If the file imports from@/components/ui/, set up shadcn/ui as well, so those components exist. - Run
npm run buildand upload thedistfolder it makes.
2. Ask Claude for one HTML file
Ask it to rewrite the component as a single HTML page that loads React from a CDN. For a simple component this works, and the result goes on any static host. Two things to know. These pages usually compile the JSX in each visitor's browser with Babel, whose own documentation advises against doing that in production. And imports from @/components/ui/ have no CDN to load from, so Claude has to rewrite those parts by hand.
3. Let Solta build it
Solta compiles the component when you publish. Paste the file Claude wrote, and it is bundled with React, Tailwind and the shadcn/ui components it imports, mounted into a page and served at its own address. Imports from npm are rewritten to pinned versions that the visitor's browser fetches from esm.sh, so a package esm.sh doesn't have won't load.

If the file has no export default and doesn't mount itself, Solta says so instead of publishing a blank page. If the component throws while it renders, the page shows the error.

What a link on Solta comes with
- An address of its own on solta.site. Your own domain, on Pro and Team.
- A choice of who can open it: public, unlisted or private on every plan; a password, or named people who verify their email once, on every plan; only your workspace, on Team. Who can open a site.
- Versions. A change waits as a draft until you publish it, and the link doesn't move.
- Embedding on your website with one snippet, for a public or unlisted site. On Free it carries a small Solta badge.
- Installing it on a phone, like an app. How to put it on your phone.
The limits: one file up to 2 MB, a folder or zip up to 50 MB, and static files only. Nothing of yours runs on a server. What does not work.
If it uses Claude while people use it
A page that asks Claude something when a button is pressed does that only inside Claude. Anywhere else, that call has to go to a model you pay for, or one each visitor brings. How a site calls a model.
From inside the chat
Add Solta to Claude or ChatGPT as a custom connector, and you can ask it to publish what it just built. The link comes back in the conversation. How to connect Claude or ChatGPT.

