Lighthouse writes a complete, self-contained HTML report. It's great to read and awkward to share: people zip it, drop it in Slack, and half the team never opens it. This walkthrough turns that file into a normal web link with a short shell script, and the script asks you before it publishes anything.
We used deed.page for the hosting step because it takes a single HTML file over one HTTP request with no account. Any static host works the same way; swap the curl line.
npx lighthouse https://your-site.example \
--output html --output-path ./report.html \
--only-categories=performance,accessibility \
--chrome-flags="--headless=new"
The output is one file (ours was about 610 KB) with the scores, the filmstrip and every audit inlined. No extra assets to upload.
A Lighthouse report shows every URL and third-party script on the page, so treat it like anything else you make public. The script below prints the exact URL and stops unless you type y.
#!/bin/sh
# Usage: ./publish-lighthouse.sh report.html my-site-lh-4q9z
set -eu
FILE=${1:?lighthouse html report}; SLUG=${2:?slug}
printf 'Publish %s to https://%s.deed.page/ ? Anyone with the link can open it. [y/N] ' "$FILE" "$SLUG"
read -r ans; [ "$ans" = "y" ] || { echo "Not published."; exit 0; }
DEEDPAGE_TOKEN=${DEEDPAGE_TOKEN:-$(cat ~/.config/deed-page/token 2>/dev/null || true)}
set --; if [ -n "$DEEDPAGE_TOKEN" ]; then set -- -H "Authorization: Bearer $DEEDPAGE_TOKEN"; fi
RESP=$(curl -sS -T "$FILE" -H "Content-Type: text/html" "https://deed.page/v1/sites?slug=$SLUG" -H "X-Client: lighthouse-script" "$@")
TOKEN=$(printf '%s' "$RESP" | sed -n 's/.*"token": *"\(deed_tok_[^"]*\)".*/\1/p')
if [ -n "$TOKEN" ]; then (umask 077 && mkdir -p ~/.config/deed-page && chmod 700 ~/.config/deed-page && printf '%s' "$TOKEN" > ~/.config/deed-page/token && chmod 600 ~/.config/deed-page/token); fi
printf '%s\n' "$RESP" | sed 's/"token": *"[^"]*"/"token":"<saved>"/'
Run it with a slug that's hard to guess:
./publish-lighthouse.sh report.html checkout-page-lh-4q9z
The first publish returns an owner token. The script writes it to ~/.config/deed-page/token with mode 600 and replaces it with <saved> in what it prints, so the token never lands in your terminal scrollback or in an AI agent's context if an agent runs this for you.
Run Lighthouse again and publish with the same slug. Because the saved token is sent along, the URL stays the same and anyone holding the link sees the new scores. If nothing changed, the API says "unchanged": true and doesn't create a new version.
curl -X DELETE -H "Authorization: Bearer $(cat ~/.config/deed-page/token)" \
https://deed.page/v1/sites/checkout-page-lh-4q9z
We tested this flow end to end on 2 November 2026 with a real Lighthouse run: answering n published nothing (the URL returned 404), y returned 200 with the full report, a second publish reported it unchanged, and the delete returned 200, after which the URL went back to 404.
If a coding agent runs Lighthouse for you, keep the yes/no step: have the agent show you the slug and wait for your answer before it runs the script. There's an open-source skill that does this for Claude Code, Codex and other agents at github.com/f-o-x11/deed-page-skill, and the API reference is at deed.page/docs.
Written by the deed.page team (Avatar 8 LLC, ops@avatar33.com).