By · Founder, Stacktree · Last updated
workflow

Publish a weekly client report to one link that updates itself.

The client bookmarks one URL. Every week your agent, an n8n workflow, or a CI job renders fresh HTML and replaces the page in place, so the link you sent months ago still opens this Monday's numbers. Gate it with a passcode or their email domain; they never create an account.

Get started free

No card · 3 pages free · about a minute

How do you send a client a report that stays current?

Publish the report once and send one link. Each week the agent renders fresh HTML and calls update_site on the same page, so the client's bookmark always shows the current numbers. No re-sending, no v3 attachments. Add a passcode or an email gate; the client never creates an account.

Why one link beats a weekly attachment

A weekly report sent as an attachment forks every week: report_final.pdf, report_final_v2, the one from the email thread the new stakeholder was not on. A single URL cannot fork. Whoever opens it sees the current version, and when someone asks in March what January looked like, you regenerate that view instead of excavating email.

This is the most common real workflow on Stacktree. Recurring client briefs are the biggest single category of pages people publish, ahead of one-off reports and audits, and the update-in-place primitive is why: the second send costs nothing, so the report becomes a place rather than a file.

What the client receives is a finished page, not a portal. See a live example report, a fictional monthly performance report published exactly this way, or browse the whole gallery.

Typical flow

  1. Monday, 8am: a schedule fires. Your agent (or an n8n workflow, or a GitHub Actions cron) pulls the week's numbers.
  2. It renders them as one self-contained HTML file: KPI band on top, channel table, what moved, what stalled.
  3. First run only: it publishes with publish_html and you send the returned URL to the client, with a passcode or gated to @client.com. Filing it under the client with client: "Acme" puts it behind their space.
  4. Every later run: it calls update_site with the same site id. Same URL, new numbers.
  5. You check the share-link records to see who opened it before the call.

Three ways to automate the schedule

From the agent itself. Any MCP client that runs on a schedule can own the whole loop: render, update_site, done. The agent keeps the site id from the first publish.

From n8n. The n8n-nodes-stacktree community node has publish and update operations. Schedule trigger, query node, LLM or code node renders the HTML, Stacktree node updates the page, Slack node tells the channel.

From CI. The GitHub Action pins the site id and replaces in place on every run:

- uses: stevysmith/stacktree-actions@v1
  with:
    file: dist/weekly-report.html
    api-key: ${{ secrets.STACKTREE_API_KEY }}
    site-id: ${{ vars.STACKTREE_SITE_ID }}

Omit site-id on the first run, then pin the returned id so the URL stays stable.

What it costs, honestly

Free keeps 3 pages for 7 days each with passcodes included, which is enough to trial the loop for a week. A weekly link that must not die wants a page with no expiry, and that starts on Solo at $19 a month, which also adds the email-domain gate, open counts, and serving the report from your own domain instead of stacktr.ee.

Run it now

1. Paste one line into your agent

Fetch and follow https://stacktr.ee/prompt.md, then publish this week's report as a private link and update the same URL on every future run.

Works in any agent that can fetch a URL. The instructions are plain Markdown you can read first.

2. Install once

npx stacktree-install

Configures Claude Code, Cursor, Codex CLI, OpenCode, or Amp. On Claude.ai, add the connector URL https://api.stacktr.ee/mcp instead; one-click setup.

3. No signup: curl it

curl -X POST https://api.stacktr.ee/sites -F file=@weekly-report.html

Publishes anonymously: a private URL that lives 24 hours, no account and no key. The response includes a claim token so you can keep the page and start updating it in place.

FAQ

Frequent questions

Does the link change when I update the report? +
No. That is the point of the workflow. update_site replaces the content under the same URL, so the link you sent in January still opens this Monday's report. A replace also does not count as a new publish against your page allowance.
Does the client need an account to open it? +
Never. The unguessable URL is the credential. If you add a passcode, they type it once; if you gate by their email domain, anyone @theirco.com passes a one-time magic-link check. Nothing to install, nothing to sign up for.
How do I know they actually read it? +
Give each recipient their own share link and Stacktree records who opened theirs and when. From Solo you also see opens, unique viewers, and when the page was last read; Studio adds time on page, scroll depth, and an attention heatmap, all aggregate rather than surveillance.
Can I run this on the free plan? +
You can trial it: free keeps 3 pages, each live for 7 days, with passcodes included. A standing weekly link wants a page that does not expire, and that starts on Solo at $19 a month, which also adds email-domain gates, your own domain, and open counts.
Keep reading

Related guides

References

Sources and further reading

Send the report once. Never send it again.

Publish this week's report free, no card. If the loop sticks, permanence starts at $19 a month.

Sign up free →