The App

Every line of the definition makes a screen decision. Your team works in the Admin, and your Customers work in the SaaS App, on your own domain.

Reads
Noun.Lease · Noun.Unit
Generates
3 outputs
Open

The Admin

Nobody draws these screens.

Leaseclock's Leases list with the Renew dialog open, rendered from the four files.
Definition lineScreen decision
name: Lease"Leases" in the sidebar, with a list, a record page and two forms
unit: { type: link, target: Unit }A Unit column, placed last, and a Unit picker in the forms
renter: { type: email }A mail link in the list, and an input that refuses a non-address
endsOn: { type: date }A date column and a date picker
indexed: trueThe list sorted by end date, with an "Ends before" filter
status: { type: choice }A badge and one tab per option, with no status box in the forms
required: trueA required mark, and a refusal for an empty value
says: the new end dateThe Renew dialog's one field, labelled "The new end date"
from: [active]Renew and End disabled on an ended Lease, with the reason shown
end: { to: ended }An End button on each Lease
(any Noun)Each record titled by its name, title or label, else its first text field: a Unit by its label
In all9 screens, 4 per Noun and 1 per Verb with input, and 2 Verb buttons

The SaaS App

Your Customers' SaaS App is the same screens, scoped to their Tenant and their Access level, on your own domain. The API enforces the scope; a screen only reflects it.

Buttons

Every Verb gets a button, and the button answers as the API answers. Undo runs the Action's revert.

On the screenIt reads
The Renew dialog's one field"The new end date", from says:
The preview, before you commitNothing ran.
Renew, committedDone., with Undo
Renew and End on an ended LeaseDisabled, with the reason from from: [active]: "renew runs from active; this Lease is ended"

Contents