The boundary, plainly
Does anything have to execute on a server when a visitor arrives? If yes — a database query, an authenticated session, an API key that must stay secret — you have an application, and it needs a platform that runs code. If no, you have a document, and hosting it is one call.
Most of it is the static kind
Landing pages, calculators, dashboards over data baked in at generation time, interactive explainers, prototypes, single-page tools, visualisations. All of these are HTML with inline CSS and JavaScript. They run entirely in the visitor's browser, which is precisely why they render anywhere with no build step.
The link, in one step
curl -X POST https://read.botook.ai/v1/publish -F file=@index.html
# → { "url": "https://read.botook.ai/s/…" } (no account, short-lived)With an API key the link lives longer and gains the gates; without one it is anonymous and rate-limited. Either way there is no project, no build and nothing to tear down.
Built an actual application?
Then use a platform that runs code, and consider publishing the static view of it here — the screenshot-shaped summary, the report it generates, the design you want a client to sign off on. That way the private link carries the part that needs a gate, and the platform carries the part that needs a runtime.
Two things people get wrong
- Assuming it must be public. A prototype with real data in it should not be. Private is the default here precisely because "it is just a prototype" is how data escapes.
- Assuming it must be permanent. Most of this output is a conversation artifact. Letting it expire is not losing it, it is not accumulating it.
How do I know if my page is static?
Open it from your filesystem with a file:// URL. If it works, it is static. If it
needs a server, it will fail there and it will fail here.
Can I use a custom domain?
Yes — register the hostname, add the two DNS records it returns, verify, and it serves from there.
What if I want it public?
Publish it and share the link freely; nothing forces it to stay private. The difference is that exposure is a decision rather than a starting state.
Can I keep iterating after publishing?
That is the intended loop — update_site replaces the content under the same URL, as many
times as you like.