By · Founder, Stacktree · Last updated
use case

Share an HTML file with a client, as a link they just open.

No attachment, no download, no login, no account for them. Publish the file, gate it to the client's company if you want, and send one link. It opens in any browser, stays out of search, and you can expire or revoke it after the handoff.

Start free

How do you share an HTML file with a client?

Publish the file to Stacktree and send the link. The page lives at an unguessable URL that is never listed or indexed, opens in any browser with nothing to install and no account to create, and keeps the same URL when you revise the file. To restrict it further, add a password or lock viewing to the client's email domain; to end it, set an expiry, revoke the link, or have it burn after the first read.

Why not just email the file?

Because an emailed .html file is the worst version of your work. It arrives as an attachment the client has to download and open from their file system, where it renders as a local file rather than a page. Gmail caps attachments at 25 MB, which self-contained AI-generated files bump into surprisingly often. And security tooling is right to be suspicious: HTML attachments are a documented malware-delivery technique, so your deliverable competes with phishing for the benefit of the doubt. A link has none of these problems.

Chat is no better. Paste HTML into Slack and you get a code block; attach it and the client still ends up downloading a file. If the work is a page, the client should receive a page.

How do I share large HTML files?

This is the question that sends people hunting, usually right after a mail server bounces the attachment. The answer is to stop moving the file and start moving a link. Upload once (drag and drop, one API call, or one MCP tool call from the agent that wrote it) and the size problem ends at your side of the wire. The client's browser fetches the page from a CDN the same way it fetches any website, whether the file is 40 KB or 40 MB.

Send it without making it public

Private by default means the URL itself is the first gate: an unguessable token, no public gallery, no directory, no sitemap entry, crawlers opted out. Nobody finds the page by searching; only the people you send it to know it exists. This is the property the publish buttons built into AI tools do not offer, because their links are designed for the opposite job.

Share with a client without a login

When "anyone with the link" is not tight enough, add a gate. Neither one requires the client to have or create an account:

  • Password. You set a passcode and tell the client. Forwarding the link alone opens nothing. Free on up to 3 sites; unlimited on Pro.
  • Email-domain gate. You allow @yourclient.com. A viewer enters their work email, clicks a one-time magic link, and reads for 24 hours per verification. Forward the URL outside the company and it stops at the gate. Free on 1 site; unlimited on Pro.

Gated pages also unfurl in Slack and Teams as a locked graphic that leaks no title and no description, so even the preview of a confidential deliverable stays quiet.

One link per recipient: expire it, cap it, revoke it

For handoffs with more than one stakeholder, mint each person a signed share link on top of the same page: label it ("CFO", "legal review"), give it its own expiry, cap how many times it can be opened, and revoke it individually if a thread leaks. The underlying page and everyone else's links are untouched. Share links are free on every plan.

For the genuinely sensitive file

  • Burn-after-read deletes the page after the first view. One open, then gone.
  • Expiry scheduling ends the link on a date you pick, so a preview never outlives the engagement.
  • End-to-end encryption encrypts the page in your browser with AES-GCM; the key rides in the URL fragment and never reaches the server, so the host cannot read what it stores. Free, no plan gate.
  • A pre-flight scan checks the file for API keys, emails, and card numbers before it goes live, and blocks by default when an agent publishes over MCP.

Did they actually read it?

Sending is half the job; the other half is knowing it landed. Every plan shows opens, plus reactions and notes viewers can leave anchored to specific parts of the page, which flow back to the agent that built it. Pro adds "How it's read": time on page, scroll depth, read-to-end rate, and a dwell heatmap, aggregate and anonymous rather than surveillance.

Publish straight from the agent that made it

Most HTML files that need to reach a client were written by an AI five minutes earlier. Skip the export-and-upload step: Claude Code, Claude.ai (one-click OAuth connector), Codex, Cursor, and any MCP client can publish the file directly with publish_html and return the private link in the same conversation. Revisions go through update_site, so the link you sent on Monday shows Thursday's version without a resend. Prefer hands-on? Drag the file onto the dashboard instead.

Two finishing touches for client work: paid plans render no Stacktree badge on the page, and you can serve the link from your own domain. See custom domains for putting the deliverable on reports.yourco.com, and pricing for what sits in each plan.

FAQ

Frequent questions

How do I share large HTML files? +
Host the file and send a link instead of attaching it. Gmail caps attachments at 25 MB, and a large self-contained HTML file (the kind AI tools produce, with inlined styles, data, and images) gets unwieldy fast. Published to Stacktree, the size is handled once at upload; the client just opens a URL, and the page streams from a CDN like any other website.
How do I share an HTML file with colleagues? +
Same flow, one different gate: publish the file and restrict viewing to your company's email domain. Anyone @yourco.com opens it after a one-time magic-link check; nobody creates an account. For a quick internal share, the unguessable link alone is usually enough.
How do I send a page to a client without making it public? +
Publish it to a host that is private by default. A Stacktree URL is an unguessable token: it is never listed, never indexed, and never appears anywhere you did not send it. That is the opposite of the publish-buttons in Claude and ChatGPT, which mint links designed to be shared onward. Add a password or an email-domain gate if you want a second layer on top.
Can I share an HTML file with a client without a login? +
Yes, and without them creating an account either. A password gate means you tell the client one passcode. An email-domain gate means anyone @yourclient.com proves they own such an address via a one-time magic link, then reads for 24 hours per verification. Both open in any browser; neither involves signing up for anything.
Does the client have to download anything? +
No. That is the point of hosting it: the link opens as a normal web page, interactive parts included. An emailed .html file arrives as a download the client has to open from their file system, which looks alarming and sometimes gets flagged, because malicious HTML attachments are a documented attack technique (Microsoft calls it HTML smuggling). A link avoids the whole category of problem.
Can I revoke access after I send it? +
Yes, at several levels. Give each recipient their own signed share link with a label, an expiry, and a cap on opens, and revoke any one of them individually without touching the others. Or set an expiry on the whole site, or delete it outright. For a one-shot handoff, burn-after-read deletes the page after the first view.
Can I tell if the client actually read it? +
Free plans show how many people opened the page (an approximate unique-viewer count), plus any reactions and notes viewers leave on it. Pro adds "How it's read": time on page, scroll depth, read-to-end rate, and a dwell heatmap, all aggregate and anonymous, not session replay. See page engagement.
The file came out of Claude / ChatGPT. Can the agent publish it for me? +
Yes. Stacktree is MCP-native: Claude Code, Claude.ai (one-click OAuth connector), Codex, Cursor, and any MCP client can call publish_html and hand you back the private link in the same conversation that produced the file. When the client asks for changes, the agent calls update_site and the link you already sent shows the new version.
Keep reading

Related guides

References

Sources and further reading

Turn the file into a link the client can just open.

Private by default, gates and revocation included. Free to start, no card.

Sign up free →