Self-hostable · React / Vite friendly

Share built prototypes with versioned, browser-ready URLs

Package your dist/ folder, upload a zip, and send reviewers a link that opens your app exactly as built—no cloning, no local dev server, no guesswork.

Features

Everything you need to ship prototypes, not repos

Organizations and projects live in your dashboard; each upload is stored durably with a clear version history and predictable preview links.

Stable preview URLs
Pin a hostname per version (version.project.org.host), or serve the promoted latest at project.org.host.
Dashboard & organizations
Manage teams, projects, and bundle versions from a single place. Preview links stay aligned with what's in Neon.
ZIP upload contract
Upload multipart zips containing a production build. Builds without index.html return 422 so bad artifacts never silently ship.
Session or API key auth
Humans sign in via Better Auth; automation sends Authorization: Bearer with your Better Auth API key. Both paths respect org membership.
Presigned downloads
Retrieve a bundle with GET for a time-limited presigned URL (15 minutes by default) without streaming the whole object through your browser session.
Fast serving & SPA routing
Zips are pulled from R2 and cached in an in-process LRU (128 MB cap). Unknown paths fall back to index.html so client routers keep working.

Flow

How it works

Three practical steps from CI output to a link your stakeholders can click.

  1. 1
    Build
    Run your usual production build (for example Vite) and zip the output directory so index.html is present at the root or one level deep.
  2. 2
    Upload
    Use the dashboard uploader or POST the zip to the bundles API. Mark whether the version should become latest for its project.
  3. 3
    Share
    Hand off the preview hostname. Reviewers open it in any modern browser; assets and client-side routes resolve like a static host.

Preview URLs

Incoming requests whose host matches *.PLATFORM_HOST are rewritten internally to /preview/[org]/[project]/[version]/…. That keeps the public URL ergonomic while reuses the same handler for every asset path.

Version pinned

https://{version}.{project}.{org}.{platform-host}

Latest alias

https://{project}.{org}.{platform-host}

In local development, *.localhost usually resolves without extra DNS so you can test the full hostname flow on your laptop.