GuideUpdated 2026-11-01View as Markdown

Review and comment on a live site

Use this for a QA pass or a design review of a site that is already live, or on staging, when you want reviewers to pin comments to exact elements instead of sending screenshots. You save each page as one self-contained HTML file, upload them all with the API, share a checklist that links every page, and read the comments back when the review is done.

Ollav hosts a copy of each page, not the live site, so the review is of the pages as they were when you saved them.

1. Save each page as one HTML file

Ollav hosts one self-contained HTML file per document (up to 15 MB), so every stylesheet, image and font has to be inside the file.

  • Use a tool that inlines everything, such as the SingleFile browser extension or its command-line version. A browser's own "Save page as" usually writes a folder of assets next to the HTML, and those relative paths won't load.
  • For pages behind a login, save them while you're signed in to the site in that browser, so the copy shows what a signed-in user sees. The saved file contains whatever was on screen, so check it for personal data before you upload it.
  • Save the state you want reviewed: open the menu, dismiss the cookie banner, scroll so lazy images have loaded.
  • Give each file a short, unique name (pricing.html, checkout.html). Uploading a file with the same name again later publishes a new version at the same link.

What the copy can't do: anything that needs your server (forms that submit, searches, logins). Client-side JavaScript still runs, and calls to public APIs that allow cross-origin requests still work. The single-file HTML guide covers the limits.

2. Upload them in bulk

Create an API key at https://app.ollav.app/keys with the upload and read scopes and keep it in an environment variable, never in a script or a file you commit:

export OLLAV_API_KEY="$(cat ~/.ollav-key)"   # or paste it at the prompt: read -rs OLLAV_API_KEY; export OLLAV_API_KEY

List the pages and the title each document should get. A title that says what it is, like Site: Pricing page, makes the dashboard and the checklist readable:

pricing.html|Site: Pricing page
checkout.html|Site: Checkout
account-settings.html|Site: Account settings

Then upload every file in the list and record each page's link:

: > uploaded.tsv
while IFS='|' read -r file title; do
  url=$(curl -sS -X POST https://app.ollav.app/api/documents \
    -H "Authorization: Bearer $OLLAV_API_KEY" \
    -H "X-Ollav-Client: agent" \
    -F "file=@pages/$file" \
    -F "title=$title" | jq -r '.url')
  printf '%s\t%s\n' "$title" "$url" >> uploaded.tsv
done < pages.txt

Each upload is visible to your workspace's members only, which is the default. Publishing is limited to 30 uploads an hour per account: for a bigger site, upload in batches, and if a request answers 429, wait for the seconds in its Retry-After header. A title can be fixed later on the dashboard, or with PATCH /api/documents/{slug} and {"title": "Site: Pricing page"}.

3. Make a checklist document

One document that links every page gives reviewers a place to start and you a place to track the QA pass. Build it from uploaded.tsv and upload it like the others:

{
  echo '<!doctype html><html><head><meta charset="utf-8"><title>Site: QA checklist</title></head><body>'
  echo '<h1>Site: QA checklist</h1><p>Open each page and pin a comment to anything that looks wrong.</p><ul>'
  while IFS=$'\t' read -r title url; do
    printf '<li><label><input type="checkbox"> <a href="%s">%s</a></label></li>\n' "$url" "$title"
  done < uploaded.tsv
  echo '</ul></body></html>'
} > checklist.html

curl -sS -X POST https://app.ollav.app/api/documents \
  -H "Authorization: Bearer $OLLAV_API_KEY" \
  -H "X-Ollav-Client: agent" \
  -F "file=@checklist.html" -F "title=Site: QA checklist" | jq -r '.url'

Reviewers can comment on the checklist too, for notes that aren't about one page ("the footer is wrong everywhere").

4. Share it with your reviewers

Commenting is for members of the workspace, so the simplest setup is to invite the reviewers to the workspace at https://app.ollav.app/workspace and send them the checklist's link. Every page is then open to them.

For a reviewer from outside your team, share single pages from the dashboard instead (Share on a document): they become a guest who can view, comment on and react to just those pages.

Reviewers open a page, press the ✎ button, click the element that needs a change and write the comment. The pin stays on that element, and replies, reactions and resolving happen in the thread beside it.

5. Read the comments with the API

When the review is in, read every page's open threads as Markdown (the key needs the read scope):

for slug in $(curl -sS https://app.ollav.app/api/documents \
    -H "Authorization: Bearer $OLLAV_API_KEY" -H "X-Ollav-Client: agent" \
  | jq -r '.[] | select(.title | startswith("Site: ")) | .slug'); do
  curl -sS "https://app.ollav.app/api/review?slug=$slug&format=markdown" \
    -H "Authorization: Bearer $OLLAV_API_KEY" -H "X-Ollav-Client: agent"
done > qa-review.md

Each thread comes with the text of the element it is pinned to (quote), so you can find it in your source. Add &status=all to include resolved threads. GET /api/review without format=markdown returns the same threads as JSON, with a cursor to poll for only new comments on the next run. The REST API reference has every field.

After the fixes

Save the fixed pages under the same file names and run the upload loop again. Each file becomes a new version at the same link, so reviewers keep their bookmarks, and comments from the earlier round stay attached and marked as from an earlier version. Resolve the threads you fixed, from the page or with POST /api/comments/{id}/resolve.