---
name: vinssi-pages
description: Publish an HTML file or folder to Vinssi Pages and hand back a shareable URL. Use when the user asks to publish, share or "give me a link to" an HTML plan, report, design doc or other static content, or after producing an HTML deliverable the user will want to open outside the terminal. No git, no build.
---

# Publish to Vinssi Pages

Vinssi Pages uploads a static file or folder and returns an unlisted URL at
`https://<name>-<random>-<workspace>.pages.vinssi.ai`. Anyone with the link
can read it; the random part makes it unguessable and search engines are told
not to index it. **Publishing is an external action: only publish content the
user asked to share, and ask first if it looks sensitive (credentials,
customer data, internal financials).**

Run the CLI as `vinssi` if it is installed, otherwise as `npx -y vinssi`.
Docs: https://vinssi.ai/docs/pages

## Publish

```sh
vinssi pages publish /absolute/path/to/report.html --json
```

- `--json` prints `{siteId, versionId, url, bytes, fileCount}`. Parse it and
  give the user the `url` as a link.
- A single `.html` file becomes the site's index page. A folder is published
  as-is and should have `index.html` at its root; relative asset paths work.
  Dotfiles and symlinks are skipped.
- To **update the same URL**, pass `--site <siteId>`. Keep the siteId from the
  first publish if the user may iterate.
- `--name <n>` sets the display name and URL prefix (defaults to the filename).
- Limits: 50 MB compressed, 2,000 files.

## Manage

```sh
vinssi pages list --json
vinssi pages versions <siteId>
vinssi pages rollback <siteId>
vinssi pages delete <siteId>
```

## Auth

- The CLI reads `~/.vinssi/credentials.json`; `VINSSI_TOKEN` overrides it.
- If it is not signed in, or fails with `UNAUTHORIZED`, ask the user to run
  `vinssi login` (it opens a browser). Do not retry in a loop.

## Verify

`curl -s -o /dev/null -w "%{http_code}" <url>` should return 200 before you
hand the link over. A just-published site can return 404 for about ten
seconds; one retry after a short wait is enough.
