Skip to content

Build my app

Say "build the app my customers sign in to" and get an App with a screen per kind of record, a form per action, sign-in and a workspace per customer.

Your App is built from the Software you sell and the people who sign in, and ships to every customer at once. Each kind of person is a Persona.

Needs Startup

What you get

  • 1product your customers useSoftware
  • 1app at app.leaseline.app, under your brandApp
  • 1profile per kind of person who signs inPersona
  • 1list and detail screens for each kind of record a person may readDashboard
  • 1form for each action a person may takeFlow
  • 1access rule behind every buttonRole
  • 1Markdown and JSON form of every screen, for agentsDashboard
  • 1install from the browser on any phoneApp

Your agent does

Software.create → App.publish
You, to your agent

Build the app my property managers sign in to.

Give each customer a dashboard of their leases and renewal dates.

Make an app where a manager sees which renewals are due this month.

# 1. Software.create
curl -X POST https://api.sb/leaseline.app/software \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"Leaseline","promise":"Every lease renewal date in one place, with a reminder 90 days out."}'

# Look up the Interface: Interface.list
APP=$(curl "https://api.sb/leaseline.app/interfaces?where=kind%20%3D%20app&limit=1" \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" | jq -r '.interfaces[0]["$id"] | split("/") | last')

# 2. App.publish
curl -X POST https://api.sb/leaseline.app/apps/$APP/publish \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY"
import { $ } from 'startup-builder'

await $.Software.create({ name: 'Leaseline', promise: 'Every lease renewal date in one place, with a reminder 90 days out.' })
const [app] = await $.Interface.list({ where: 'kind = app', limit: 1 })
await $.App.publish({ app: app.$id })
npx startup-builder do Software.create --json '{"name":"Leaseline","promise":"Every lease renewal date in one place, with a reminder 90 days out."}'
APP=$(npx startup-builder do Interface.list --json '{"where":"kind = app","limit":1}' | jq -r '.interfaces[0]["$id"] | split("/") | last')
npx startup-builder do App.publish --json '{"app":"'"$APP"'"}'
{
  "name": "do",
  "arguments": {
    "code": "await $.Software.create({ name: 'Leaseline', promise: 'Every lease renewal date in one place, with a reminder 90 days out.' })\nconst [app] = await $.Interface.list({ where: 'kind = app', limit: 1 })\nreturn await $.App.publish({ app: app.$id })"
  }
}

Change it

  • Add an owner view that shows every property at once.
  • Hide rent amounts from the maintenance Persona.
  • Add a renewal calendar to the home screen.

Under the hood

Systems
Customer access, Sites
Nouns
Software, App, Persona, Role, Permission, Dashboard
Events
Software.created, App.published