SaaS.Dev

How an App is served

In the design, every App answers on the Startup's own Domain, derives its screens on each request, and calls one API behind every screen.

In the design, every App a Startup runs answers on the Startup's own Domain, under its own Brand. Each request derives its screens from the live definition and calls one API behind them.

Every Interface on the Startup's own Domain

Each Interface mounts at one path on the Startup's Domain. For leaseclock.com, the API, the screens for each kind of person and the builder all sit under leaseclock.com.

Path on leaseclock.comServesWho signs inRow
/apievery read and every Verb of every Noundevelopers and Agents, each with a keyAPI only
/mcpthe MCP server over the same VerbsAgents, each with a keyAPI only
/dashboardthe Portal: sign-in, members and seats, the Customer's Offer, usage, keys and invoiceseach Customer's owner and membersPortal
/adminthe Admin: one list, record page, create form and edit form per Nounthe Startup's own teamScreens for the team
/appeach Persona's home screen, lists and forms, inside its Access Levelpeople at each CustomerApp per Persona
/studioSaaS.Studio: the builder, operations and analyticsthe founder and operatorsSaaS.Studio

The SDK and CLI ship as the Startup's own leaseclock packages. Headless SaaS serves /api, /mcp, /dashboard and /admin; SaaS adds /app.

Derived on each request

No screen is built ahead of time. Each request names the App by its Domain and path, and reads the live Version of the definition. The rules then project the Noun in view.

StepWhat happensFor leaseclock.com/admin/leases/lease_1
1The Domain and path name the Startup and the Appleaseclock.com, /admin: the Admin
2The App reads the live Version of the definitionthe Version at sha256:9f2c4e1a7b3d
3The rules project the Noun into a screenthe Lease record page, titled by residentName
4The person's Access level bounds the screena team member holding admin sees every button
5The screen reads its record through the APIGET leaseclock.com/api/leases/lease_1
6The screen renders in the form the request acceptsHTML for a browser, Markdown for an Agent, JSON for a native client

A published change reaches the next request with no build per screen. Add renewalNoticeDays?: integer to Lease, and both forms show a number box on the next load, by control-number.

The same request with Accept: text/markdown returns the screen an Agent reads, from the same projection. One screen, three renderings shows all three renderings of one screen.

curl https://leaseclock.com/admin/leases/lease_1 -H "Accept: text/markdown"
# Maya Ortiz

| Field | Value |
| --- | --- |
| Resident Email | maya@example.com |
| Starts On | 2025-12-01 |
| Ends On | 2026-11-30 |
| Monthly Rent | 1450 |
| Status | active |
| Property | 14 Elm Street |

Actions: Renew, Terminate, Edit

One API behind every screen

Every button calls its Verb through the same API the CLI calls. Renew on the Lease record page sends POST leaseclock.com/api/leases/lease_1/renew, and the Verb refuses or completes there.

A screen holds no rule of its own. A refused Lease.renew shows the reason the Verb gives, the same words a CLI caller reads in the refused Action.

In the design, Verb rules run behind the API, not in the browser. The four guarantees that wait on App guarantees need that move before they print.

Under the Startup's brand

A Customer of leaseclock.com meets only leaseclock.com. The sign-in screen, every email and every invoice carry the Startup's Brand, and no address names the platform's namespace.

A Customer who outgrows the screens keeps the same records at /api. The key from /dashboard reads every record the person sees at /app.

What runs today

Three things serve today:

  • the definition, and the term pages generated from it;
  • the reads of every Noun, the GET operations, under the Startup's namespace, as GET /leaseclock.com/leases/{id};
  • the 19 Admin rules, at the Admin build pinned to commit 9ab30202.

That Admin build derives its screens in the browser from the definition it is given, and runs Verb rules there too. Admin: derivation rules and edge cases lists every rule it applies.

Contents