Skip to content

One HTML file, one POST, one URL

A self-contained HTML file is already a complete website. Deploying it is one POST with a text/html content type — the URL it returns is the file, live for anyone you share it with.

Drop your Single HTML file report here — get a live link

free, no account, live for 7 days.

The artifact dead-end

The 'I made a thing, look at it' genre — a demo, a report, a generated page, an LLM artifact — keeps dying in chat uploads and email attachments that nobody can open properly.

Standing up hosting for a single file is absurd; so is pasting markup somewhere that doesn't render it.

Two lines to a live link

Hand the file to the action — or straight to the API:

.github/workflows/ci.yml

- uses: bitgate/ship-page-action@v1
  if: always()
  with:
    path: index.html

Or with plain curl — no account needed

curl -fsS -X POST https://ship.page/deploy \
  -H "Content-Type: text/html" \
  --data-binary @index.html | jq -r .url

path: index.html deploys exactly what the tool wrote — no detection to configure. The link goes in the job summary — add comment: true and it lands on the pull request too.

What you get

  • Content-Type: text/html, body is the file — the response URL serves it at the drop root
  • Inline CSS and JS, data-URI images, CDN script tags — everything the file references works, because a drop is just a static origin
  • No account for 7-day links; add an API key when you want named, redeployable URLs

Questions

Does the file have to be named index.html?

No — a single text/html upload becomes the landing page whatever the file is called. The name only matters once you deploy multi-file folders.

What about external assets?

Absolute URLs — CDNs, fonts, images — work as-is. Relative references to other local files won't exist on the drop, so inline them or deploy the folder as a zip instead.

Is the URL private?

Slugs are long and unguessable, there's no public index, and every drop serves x-robots-tag: noindex. Share the URL, share the page — nobody else finds it.

Try it on your next run

Anonymous deploys need no account and no key — paste the step, get a link. When you want stable URLs that redeploy in place, an API key and a name are all it takes.

Need to share the report with someone outside GitHub? How to share a GitHub Actions artifact without a login.