Skip to content

Turn my app into a business

Point your agent at the app you already built and get a Startup around it, with an Offer, a Site, terms, Roles and a claim link for Stripe.

For developers

Give your agent the app's address. Startup.import reads it into a new Startup, and Startup.build builds the business around it while the app keeps running where it runs.

For developers

What you get

  • 1business wrapped around your app, in testStartup
  • 1product that points at your app, which keeps running where it runsProduct
  • 1name, logo, colors and voice, read from the appBrand
  • 1Offer drafted from the price on your app, a draft until you publish itOffer
  • 1site with pricing, sign-up, terms and privacySite
  • 10Teams, from Product to LegalTeam
  • 38Roles, an agent named in eachRole
  • 67Systems: billing, ledger, CRM, support and the restSystem
  • 1claim link: connect Stripe and own the businessStripe's connected Account

Nothing moves. The app keeps its code, its host and its sign-in, and the Product points at it. What the business adds sits beside it: checkout, invoices, terms, books, support and an agent in every Role.

Your agent does

Startup.import → Startup.build
You, to your agent

Turn my app into a business.

I already built the app. Make it a real business.

Put a company around leaseline.app so it can sell.

# 1. Startup.import
STARTUP=$(curl -X POST https://api.sb/leaseline.app/startups/import \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"source":"https://leaseline.app","template":"solo-saas"}' | jq -r '.startup["$id"] | split("/") | last')

# 2. Startup.build
curl -X POST https://api.sb/leaseline.app/startups/$STARTUP/build \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY"
import { $ } from 'startup-builder'

const startup = await $.Startup.import({ source: 'https://leaseline.app', template: 'solo-saas' })
await $.Startup.build({ startup: startup.$id })
STARTUP=$(npx startup-builder do Startup.import --json '{"source":"https://leaseline.app","template":"solo-saas"}' | jq -r '.startup["$id"] | split("/") | last')
npx startup-builder do Startup.build --json '{"startup":"'"$STARTUP"'"}'
{
  "name": "do",
  "arguments": {
    "code": "const startup = await $.Startup.import({ source: 'https://leaseline.app', template: 'solo-saas' })\nreturn await $.Startup.build({ startup: startup.$id })"
  }
}

The agent reads the app's pages, prices and copy, then maps them onto the closest Startup Template. It asks one question when the app shows no price.

Change it

  • Charge $49 a month instead.
  • Call it Renewly.
  • Connect leaseline.com.
  • Hire an agent to answer my customers.

Under the hood

Systems
Sites, Billing, Ledger, CRM, Support
Nouns
Startup, Product, Brand, Offer, Site
Events
Startup.imported, Startup.built
Stripe objects
Account

Import reads the app and never writes to it. Every imported fact keeps its source, so a price read from the app's pricing page says so until you change it.