SaaS.Dev

Publish my App

Say "publish my app" and your App goes out on your own Domain, every Customer runs the newest build, and the last build stays ready to restore.

In the design, publishing releases your App on your own Domain, and every Customer runs the newest build. The last build stays, so one call puts it back.

Before it runs
NeedsAn App, from Build my app, and a connected Domain, such as leaseclock.com
Who says yesYou. Your agent shows you what changed and waits for your Approval.
When it waitsA delay window of 1 business hour, in which a watcher can pause, redirect or cancel it
You leave the chatNever

What you get

In the design, one App.publish puts every set of screens on leaseclock.com live at once, over the one API.

What you getIs
1App at leaseclock.com/app, with one set of screens per PersonaApp
1screens for your own team at leaseclock.com/adminGive my team an admin
1sign-in, members and invoices for each CustomerPortal
1API that every screen calls, the same one each Interface readsInterface
1newest build in every Customer's workspace, on its next requestTenant
1previous build kept, ready to restoreVersion
3renderings at each URL: HTML for people, JSON and Markdown for agentsRenderings
1Event, App.published, for every Workflow that waits on itEvent

A Customer sees leaseclock.com and its Brand on every screen, and never the platform's name.

Your agent does

In the design, your agent finds the App, shows you the change, and calls App.publish once you say yes.

Publish my app.
Put the new lease screens live.
Ship the app to every customer.
{
  "api": "https://api.sb/leaseclock.com",
  "app": {
    "$id": "https://api.sb/leaseclock.com/apps/app_1",
    "$type": "App",
    "kind": "app"
  },
  "action": {
    "$id": "https://api.sb/leaseclock.com/actions/action_7",
    "operation": "App.publish",
    "status": "done"
  },
  "links": {
    "self": "https://api.sb/leaseclock.com/actions/action_7"
  }
}
  1. Your agent reads the App with Interface.list.
  2. It shows you each screen that changed since the last build, such as a new deposit field on the Lease forms.
  3. Once you approve, it calls App.publish, and the Action waits out its delay window.
  4. The new build serves at leaseclock.com/app, and each Customer's Tenant runs it on its next request.
  5. The previous Version stays, and App.published fires.

A call without the scope to publish ends forbidden. A call on an App in a state that cannot publish ends refused, and the Action says why.

Change it

SayWhat your agent calls
"Preview it with one customer first."Change.review on the preview, then Version.deploy for everyone
"Put the last build back."Version.deploy with the previous Version, which App.publish kept
"Serve the app at /portal instead."No call: mount: /portal in the App file, then App.publish

Under the hood

PartEntries
NounsApp, Version, Domain, Tenant, Change
CallsInterface.list, App.publish
EventsApp.published
SeatThe Engineering Lead approves App.publish
SystemsSites
DepthHow an App is served, App previews and Versions

Contents