OpenTree DashboardSign in

$ jupyter nbconvert --to html

Send someone a notebook they can actually read

Export the notebook to HTML and publish it privately. The reader gets the analysis with its output and its charts, in a browser, without Python, without a kernel and without an account.

Export it

jupyter nbconvert --to html analysis.ipynb

That produces a self-contained analysis.html with the code, the markdown and the rendered output embedded. Everything below assumes that file.

Publish it

curl -X POST https://read.botook.ai/sites \
  -H "Authorization: Bearer otr_live_YOUR_KEY" \
  -F file=@analysis.html

Or without an account at all:

curl -X POST https://read.botook.ai/v1/publish -F file=@index.html

Why not the usual routes

RouteProblem
Send the .ipynbThe reader needs Jupyter, and probably your environment.
A public notebook viewerIt is public, and the data usually is not.
A repository renderStatic, unreliable for rich output, and again public.
A screenshotThe analysis becomes an image nobody can scroll or search.
Exported HTML, private linkReads exactly as it did for you.

What survives the export

What does not

For Plotly, export with the library included rather than referenced. The file gets larger and the page works everywhere, including offline.

Check the artifact, not the status code

A 201 means the bytes were stored. Open the link and confirm the charts actually render before you send it — an export that lost its plots is the single most common failure here.

Notebooks contain more than analysis

They also contain the connection string you pasted at 2am, the customer identifiers in cell eleven, and the token in an environment dump. Two things help: the publish-time scan blocks documents carrying obvious sensitive data, and clearing the output before exporting is still the best habit there is.

Gate it

set_password({ site_id: "…", password: "hunter2" })
set_email_gate({ site_id: "…", allowed_email_domain: "client.com" })

Re-running the analysis

Re-export and replace in place. The link in the Slack thread now shows this week's numbers:

jupyter nbconvert --to html analysis.ipynb
curl -X PUT https://read.botook.ai/sites/SITE_ID \
  -H "Authorization: Bearer otr_live_YOUR_KEY" -F file=@analysis.html

Automating it

In a nightly job, the export and the update are two lines. The recipients keep one link forever — see agent-loop hosting.

Sharing it in a chat

The link unfurls with a preview image, which is considerably more inviting than a file attachment nobody can open on a phone. More on that.

Getting comments back

Enable the toolbar and a reviewer can comment on the specific cell they disagree with — the feedback loop.

Questions

Can I share the .ipynb file itself?

This hosts web pages; publish the exported HTML. Put the source in a repository if the reader wants to run it.

Do widgets work?

No — they need a kernel. Convert them to static output first.

Is the notebook indexed?

No. Unlisted, unguessable, noindex.

Keep reading