A web app is another client
A browser is not a fourth implementation. It is an HTTP client of api.routes.
The box office on the landing is that client: list bills, open one. Same
BoundOp Swagger and Grok call. JSON is a detail, not the UI.
box office · a web client
GET /shows/1 is get_show
Evening bill
12 remaining
GET /shows/1 HTTP/1.1
HTTP/1.1 200 OK
content-type: application/json
{"id":1,"name":"Evening bill"}Clone if you want the process
sbt example/run
That serves /preview, /docs, and POST /mcp from the real Api. The widget above is the
same box office, replayed.
Writes still go through the Api
POST /parties is bound, documented, and (in the example) OAuth-gated. The preview UI will not
invent a second create path. If you add a host later, you bind it to this Api or you are
doing it wrong.