---
url: https://saas.dev/docs/app
md: https://saas.dev/docs/app.md
reads: [Noun.Lease, Noun.Unit]
generates: 3 of 34 outputs
next: https://saas.dev/docs/customers.md
---

# 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.

## 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](https://startupbuilder.dev/business/nouns/tenant) and their [Access level](https://startupbuilder.dev/business/nouns/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](https://saas.dev/docs/interfaces.md#what-ran). 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" |

Read next: [What your Customers get](https://saas.dev/docs/customers.md)