Share a Next.js static export

Preview deployments are a solved problem right up until they are not: a fork without secrets, a client who should not see a public preview URL, a build you want reviewed before the project has any infrastructure at all.

output: 'export' gives you a static out/ directory in those cases. The remaining question is the same one as always — where does it go so one other person can look at it.

Publish the build

// next.config.js
module.exports = { output: "export", images: { unoptimized: true } };
next build

Drag out/ (or a zip of it) into the app:

  • index.html becomes the report body.
  • CSS, JS, fonts and images upload as assets, with their references rewritten to the uploaded copies — the step that decides whether the preview renders or shows a page with no styles.
  • Scripts run inside a sandboxed iframe, so client-side React, routing within the exported pages, and interactive components keep working.

Leave basePath and assetPrefix unset for a preview build. Both bake in a hostname the preview is not being served from.

What a static export cannot do

API routes, middleware, server actions, ISR and dynamic image optimization all need a server at request time and are not in the export. images: { unoptimized: true } is required for the same reason. For a visual and content review — which is what most previews are — none of that matters.

Private by default

An unreleased marketing site is not something to leave on a guessable URL. Every report is private until you change it: team, email-domain gate, named reviewers, or a password-protected link for a client. See the sharing model.

Feedback lands on the page

  • Anchored threads on the headline, the image, the pricing row — see commenting on HTML.
  • Revisions. Rebuild and PATCH the same report id; the reviewer sees the new build at the URL they already have.
  • An agent can read the comments back through MCP when the person making the edits is Claude Code.

Limits

  • Entry HTML: 5 MB. Assets: 25 MB per file, 250 MB and 500 files total — a large app with a page per route plus per-route JS chunks can pass 500 files. Export a section when the point is review.
  • 60 requests/minute per token.

Try it

Comma is free — unlimited reports, unlimited commenters, unlimited revision history.

Create your first report →

Related