Share an HTML report in Slack

Slack previews images, PDFs, text files and code snippets. It does not preview HTML. Upload report.html to a channel and it becomes a download — and whoever clicks it now has a copy on their laptop, with all the usual failures: missing sibling assets, fetch blocked on a file:// origin, and nothing usable at all on a phone.

So people screenshot instead. It renders inline, everyone can see it, and the conversation can actually happen. That is a real advantage and the reason the habit is universal.

It just costs you everything else: the numbers are an image, the image isn't searchable, and it's wrong as soon as the report regenerates.

Post a link

Publish the report once — drag the file or folder into Comma — and paste the URL into the channel.

Slack unfurls it into a preview card with the report's title and description, so the message carries context rather than being a bare blue link. One click opens the actual report: styling intact, scripts running in a sandboxed iframe, sortable tables still sortable. See interactive HTML reports.

Nobody downloads anything.

From CI, in the same job

# 1. publish the report (stable id → stable URL)
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 report.html \
        --arg title "Nightly — $(git rev-parse --short HEAD)" \
        '{title: $title, html: $html}')"

# 2. tell the channel
curl -fsS -X POST "$SLACK_WEBHOOK_URL" \
  -H "Content-Type: application/json" \
  -d "$(jq -n --arg url "https://commareports.com/p/$REPORT_ID" \
        '{text: "Nightly report: \($url)"}')"

Because step 1 PATCHes a saved report id, the URL never changes. The link posted in #eng last month still opens the current report — which is the opposite of how a CI artifact link behaves. See publishing from CI.

The part that survives the scroll

A screenshot gets a thread under it. That thread is gone in a week — not deleted, just unfindable, three thousand messages up.

Comments on the report are attached to the report: select the number, leave a thread, and it stays anchored to that number across every revision. Six months later the question "why is this metric defined this way?" is answered next to the metric, by the person who asked it, instead of being asked again. See commenting on HTML.

Slack is a good place to notify people. It is a bad place to store the discussion of a document.

Check access before you paste

The link's reach is a property of the report, not of the channel. Set it before posting, especially in a channel with guests or external connections:

  • private or team — the viewer needs access; the unfurl still works for people who have it.
  • registered — any signed-in Comma user with the link.
  • public — anyone with the URL, no account.

Link permission is separate: view, comment, or edit. See sharing & access control.

Why the unfurl works at all

Link-preview bots are allowed to fetch share pages specifically so the card renders, while search and AI crawlers are blocked from them and every share page carries X-Robots-Tag: noindex. Pasting a report link into a channel does not put it in a search index.

Try it

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

Publish a report to link →

Related