How to Share an Interactive HTML Report With a Client
An interactive HTML report is usually a bundle of HTML, CSS, JavaScript and data files, so sharing it as a link means putting that bundle on a web host where every dependency still loads. Sentway can publish a compatible standalone HTML or JSX report at a browser URL, optionally behind a server-enforced access rule, and collect form replies and analytics. Sentway hosts the report; your AI tool or your own code produces it.
Why emailing an HTML file often goes wrong
Attaching report.html to an email feels like the obvious route, but the recipient's experience depends on their mail client, browser and security settings. Many mail clients will not render an attached HTML file inline, and some strip or block scripts, so charts and filters may not run until the file is downloaded and opened separately.
Once opened from disk, the file runs from a file:// address. Links to sibling files such as data.json or a charts folder break if those files were not sent, hardcoded paths like C:/Users/you/reports point at your machine rather than theirs, and browsers restrict what a local file can fetch, so data requests that worked on your laptop can fail with cross-origin errors.
Exporting to PDF or a screenshot avoids those problems but removes the reason you built an interactive report. Tooltips, drilldowns, sorting and filters do not survive the conversion.
Before you publish: check the report is self-contained
A link only works if everything the page needs is either inside the page or reachable from the public web. Go through this list before you publish anywhere:
1. Styles and scripts: inline them, or load them from a reliable public URL. Remove references to local files.
2. Data: embed the figures the client should see in the page itself. Remove raw rows, internal notes or columns they should not see, because anything in the page source can be read by anyone who can open it.
3. Secrets: never ship API keys, database credentials or private endpoints inside the HTML. Treat every value in the file as visible.
4. External dependencies: list each CDN library, font or image host the page calls. If one is slow, blocked or removed, that part of the report breaks.
5. Environment features: a static page runs in the visitor's browser. It cannot query your database, run your Python notebook, read files on your computer or call an AI model on its own. Browser-side interactivity such as filtering embedded data usually works; features that relied on a server, a login or a local process need a separate backend and are outside what a hosted page provides.
If the report contains personal data about third parties, confirm you are allowed to share it with this client before you publish it anywhere.
Four sensible ways to share
PDF or screenshots: best when the client only needs a static record to read, print or file. Free and familiar, but no interactivity.
Cloud drive file sharing: fine when the goal is handing over the file itself, for example so the client's analyst can open it locally. The client still opens a file, so the local-file problems above may apply.
Generic static hosting such as GitHub Pages, Netlify or similar services: a good fit if you are comfortable setting up a repository or deploy, managing access yourself and serving your own domain.
Sentway: a fit when an AI assistant produced a compatible standalone page and you want it published from the same conversation, with a server-enforced gate, built-in form responses and results the assistant can read back to you. It is not a host for full backend data applications. Each site is served on its own Sentway address, so check current plans before relying on Sentway if your own domain is a hard requirement.
Step by step: publish the report with Sentway
1. Create a free Sentway account.
2. Connect a supported AI assistant through the Sentway connector. For Claude, add it from the Connector Directory: https://claude.ai/directory/sentway. Other MCP clients such as Cursor use the setup in the connector documentation. Publishing goes through a connected assistant.
3. Give the assistant your report and ask for a standalone version in a supported format, HTML or JSX, following the dependency checklist above. Ask it to list anything it removed or changed.
4. The assistant creates a site with create_site and stores the report with save_page.
5. Optionally choose who can open it with set_gate_access: public, email capture (with optional email verification), an allowlist of verified addresses, or a password. This is one site-wide gate covering every page of the site, not a separate rule per page.
6. The assistant runs publish_site. Publishing makes the saved page and the chosen access setting live together; access changes do not take effect until you publish.
7. Open the published URL in a private window. Try each filter, chart, tooltip and table, check a phone-sized screen, and confirm the content does not appear before the gate is passed.
8. Send the Sentway URL to your client.
For a confidential report, prefer an allowlist with verified email over a plain email capture gate. Email capture accepts whatever address is typed; an allowlist only admits the addresses you approved, after they prove inbox access. A password works too, but anyone the password is forwarded to can enter.
Imagine a consultant who built an interactive quarterly report with charts and drilldowns by region. Before publishing, they ask their AI assistant to check the embedded data and remove an internal margin column the client should not see. The assistant produces a standalone HTML page, creates the site, sets an allowlist containing the two client contacts and publishes.
Rather than guessing approval from page activity, the consultant adds a short acknowledgement form at the end of the report: a checkbox and a comments field. The form reply is an explicit answer they can read back later, which is more reliable than inferring sign-off from scrolling.
What about chart libraries and live data?
JavaScript chart libraries generally run in a hosted page the same way they run anywhere else in a browser, but the only proof is the deployed URL. Test the published version, not just the local file, because content security rules, blocked CDNs and missing data files show up only once the page is served.
Reports exported from Python tools such as Pandas or Plotly are HTML outputs of code that ran earlier. Export with the chart library and data embedded in the file rather than linked, then test. The Python environment that produced the report does not run in the browser just because the HTML loads, so callbacks that depended on a running server, for example a Dash app, will not work as a static page.
Live data needs a live source. If the report must show today's numbers on every visit, you need an API the browser can call safely or a hosted dashboard product. Otherwise, regenerate the report and republish it when the figures change.
Can you see who opened it?
Aggregate analytics show how many visits a published site received. With a verified email or allowlist gate, entry is tied to an address that proved inbox access, and visitor-level activity can be read back.
None of this is a read receipt. A visit shows the page was opened by someone who passed the gate, not that the right person read every chart. If you need a confirmation, ask for one with a form. The guide on seeing who viewed a page covers the options in more detail.
Send a PDF when the client only needs a static, printable record. Use a hosted analytics or business intelligence product when the dashboard must query live databases with per-user logins. Use ordinary cloud file sharing when the client wants the file itself and there is no need to serve a web page.
A prompt you can paste
Free plan
Take this HTML report/dashboard and prepare a standalone, browser-ready version for sharing with a client through Sentway. Check its CSS/JS dependencies, local file paths, private APIs and embedded data; clearly tell me what won't run without the original environment. Create the site with create_site, save the page with save_page, configure an allowlist with set_gate_access for [approved recipient emails] if I provide them, then run publish_site so the final access settings go live. Return the new URL and a checklist to manually test charts, filters, mobile layout and incognito access. Do not claim you've clicked through the deployed report unless you actually have.
Produces: A standalone report published at a new Sentway URL, a list of anything that could not run outside its original environment, and a manual test checklist.
The assistant prepares and publishes the page; it does not click through the live report for you. Run the checklist yourself before you send the link.
You can, but results vary by mail client and browser. Scripts may be blocked until the file is downloaded, and links to local data or asset files break unless everything is bundled into one file. A hosted link avoids most of that.
Does my client need a Claude or Sentway account?
No. Your client opens the Sentway URL in any browser. Depending on the gate you choose, they may enter an email, verify it from their inbox or type a password. You, the creator, need a Sentway account and a connected AI assistant.
Will JavaScript and charts work?
Browser-side JavaScript in a supported HTML or JSX page generally runs, including common chart libraries, but test the published URL. Anything needing a server, local files or private credentials will not work from a static page.
Can I password protect it or restrict it to specific people?
Yes. Choose a site-wide password, or an allowlist of approved addresses that must be verified by email. The check happens on the server before the report is sent, and it applies when you publish.
Can I share a Plotly or Python-generated report?
Yes, if it is exported as self-contained HTML with the chart library and data embedded. Python code does not run in the browser, so features relying on a live Python server need a different host.
Can I update the report at the same link?
Yes. Save the revised page and publish again. Visitors see the latest published version at the same URL.