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
The Admin
Nobody draws these screens.
| Definition line | Screen 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: true | The 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: true | A required mark, and a refusal for an empty value |
says: the new end date | The 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 all | 9 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 screen | It reads |
|---|---|
| The Renew dialog's one field | "The new end date", from says: |
| The preview, before you commit | Nothing ran. |
| Renew, committed | Done., with Undo |
| Renew and End on an ended Lease | Disabled, with the reason from from: [active]: "renew runs from active; this Lease is ended" |
One Lease, every Interface
One grammar reaches the Lease on the API, SDK, CLI, MCP and Docs. Every Verb returns one Action, and every refusal names its fix.
Your Customers' API
Each Customer gets your API, MCP and Docs on your own domain, with their own key, Limit and Tenant, and a sign-in that sets what people and agents may do.