Products
What a Startup sells: an App, an API, a Site, a Service, an agent sold as a service, or data, each sold through Offers.
A Product is what a Startup sells: an App, an API, a Site, a Service, an agent or data, each sold through an Offer. How products work maps each onto its kind.
| Product | What it is | Kind | Build it in code |
|---|---|---|---|
| App | The signed-in product your customers use | Software | apps/ · reference |
| API | Your Verbs, sold to developers and agents | Software | products/ · API |
| Site | Public Pages, storefront, Portal and Domains | Every kind gets one | sites/ · reference |
| Service | Work agents deliver, priced per outcome, hour or month | Service | products/ · reference |
| An agent sold as a service | One agent doing one job for your customers | Agent | products/ · reference |
| A data product | A Dataset, queried or downloaded | Data | products/ · reference |
| Offers | A Product at a Price, on terms | Any | offers/ · reference |
| Pricing | Flat, per seat, metered or per outcome | Any | offers/ · reference |
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 })"
}
}
Guides. What a founder says to their agent, and the guide that does it.