SaaS.Dev

Build my app

Say "build the app my customers sign in to" and get an App per Persona over your API, with screens inside each Access level and a workspace per Customer.

In the design, an App is where the people at each Customer sign in and work with your records. Each kind of person is a Persona, and each sees the screens its Access Level reaches.

Before it runs
NeedsA Startup with its Nouns, such as Property and Lease in leaseclock.com
Who says yesYou. Your agent shows you the run and waits for your Approval.
You leave the chatNever: it all happens in the chat
First question at Idea"Who signs in, and what is the first thing they do?"
First question at Live"Preview it with one customer first?"

What you get

In the design, leaseclock.com gets these parts from one App file and its definition. The screens for your own team come first, and derive today.

What you getIs
1product your customers use, leaseclock.comSoftware
1App at leaseclock.com/app, under your BrandApp
3Personas, one per kind of person who signs in: manager, assistant, landlordPersona
1list and record page for each Noun a Persona may readApp rules
1form for each Verb a Persona may call, with its declared inputsVerb
1Access level behind every screen and buttonAccess Level
1workspace per Customer, holding its records apart from every otherTenant
1Markdown and JSON rendering of every screen, for agentsRenderings
4screens per Noun for your own team: a list, a record page and two formsGive my team an admin

Your agent does

Your agent creates the Software, writes the App file, then publishes the App. Each tab is the same run.

Build the app my property managers sign in to.
Give each customer a list of their leases and renewal dates.
Make an app where a manager sees which renewals are due this month.

Between the first call and the last, your agent writes the App file. It names each Persona, the Access level it holds and the list it opens on.

apps/app/app.mdx
---
kind: saas
mount: /app
nouns: [Property, Lease]
personas:
  manager: { access: admin, opens: leases }
  assistant: { access: member, opens: leases }
  landlord: { access: viewer, opens: properties }
---

In the design, App.publish ends done, and every Customer's Tenant runs the new build.

{
  "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_3",
    "operation": "App.publish",
    "status": "done"
  },
  "links": {
    "self": "https://api.sb/leaseclock.com/actions/action_3"
  }
}

A manager at Harbor Lets signs in and opens on the Lease list. A landlord at Harbor Lets opens on Property, and reads every lease without a form or a button.

Change it

In the design, each ask changes the App file or the definition, and the screens follow on the next publish.

SayWhat changes
"Add an owner view that shows every property at once."A fourth Persona, owner: { access: viewer, opens: properties }
"Let the landlord read leases and change nothing."Nothing: the viewer Access level grants no write, so the landlord gets no form and no button
"Add a renewal calendar to the home screen."A screen the definition cannot derive, built in a slot: see Change what a screen shows

Under the hood

Contents