Share a Jekyll build

The gap in every Jekyll workflow is the same: bundle exec jekyll serve gives you a preview, and everyone else gets either a deploy or a screenshot. For a copy review on an unpublished post, both are wrong.

Build for a non-root location

Jekyll layouts habitually reference assets absolutely — /assets/main.css — which resolves against the server root. That is why _site/index.html opened from disk renders as unstyled markup. Two fixes, both worth doing:

bundle exec jekyll build --baseurl ''

and in your layouts, prefer the filter over a bare slash:

<link rel="stylesheet" href="{{ '/assets/main.css' | relative_url }}">

Include drafts when the point is reviewing unpublished copy:

bundle exec jekyll build --drafts

Publish _site/

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

  • index.html becomes the report body.
  • Every page, stylesheet, script, font and image uploads as an asset and its reference is rewritten to the uploaded copy.
  • Scripts run inside a sandboxed iframe (allow-scripts, no allow-same-origin), so search and interactive components work.

A preview URL without a deploy, a preview branch, or a second host.

From CI, per branch

bundle exec jekyll build --drafts

curl -fsS -X PATCH "https://commareports.com/api/v1/reports/$REPORT_ID" \
  -H "Authorization: Bearer $COMMA_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d "$(jq -n --rawfile html _site/index.html \
        --arg title "Site preview — $GITHUB_HEAD_REF" \
        '{title: $title, html: $html}')"

One report id per branch gives each PR a stable preview link; PATCH it on every push and the link always shows the current build.

What review adds

  • Anchored threads on the copy — the whole reason to send a preview rather than a screenshot. See commenting on HTML.
  • Revisions, so "did you apply the edit?" is a diff of the two builds.
  • Access per report — private, team, domain-gated, or named reviewers, so an unpublished post stays unpublished. See the sharing model.

Limits

  • Entry HTML: 5 MB. Assets: 25 MB per file, 250 MB and 500 files total. An image-heavy blog archive is the case that hits the file cap — publish the section under review rather than the whole site.
  • 60 requests/minute per token.

Try it

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

Publish a site preview →

Related