Skip to content

Taking a test payment in five minutes

Seven commands create a Startup from a template, sell a $29 monthly plan in test, take a test payment, and show what stands before launch.

Everything runs in test until you claim the Startup, so no card is charged and no message leaves. You need node 20 or later and a terminal, and no Stripe account up front.

What you build

You build leaseclock.com, a Solo SaaS Startup that tracks lease renewal dates for small property managers. It sells one Offer, the pro plan at $29 a month, and takes its first payment from a sample Customer in test.

Steps

Terminal7 steps
  1. To create the Startup, run create startups with a template:

    npm create startups leaseclock.com -- --template solo-saas --yes
    Created Leaseclock in testStartup      startup_1State        IdeaTemplate     Solo SaaSOffer        offer_1, Pro at $29 a month, draftClaim token  ct_7Hq2xVNext: cat leaseclock/startup.ts
  2. To read the Startup as code, print its root file:

    cat leaseclock/startup.ts
    import { Startup } from 'startup-builder' export default Startup({name: 'Leaseclock',domain: 'leaseclock.com',extends: 'solo-saas',})

    Three lines. The Site, the Offer, the Roles and the Processes come from the template, and offers/pro.mdx holds the price.

  3. To put the plan on sale in test, publish the Offer:

    npx startup-builder do Offer.publish --json '{"offer":"offer_1"}'
    Published offer_1 in testPrice     $29 a monthCheckout  card, Apple Pay and Google Pay, test cards only
  4. To take a test payment, subscribe a sample Customer:

    npx startup-builder do Offer.subscribe --json '{"offer":"offer_1"}'
    Subscribed in testSubscription  subscription_1, $29 a month, renews 2026-11-23Customer      customer_1, sample, Visa 4242Invoice       invoice_1, $29.00, paidLedger        2 entries: cash and deferred revenue
  5. To see what the payment set off, list the latest Events:

    npx startup-builder show /events --fields 'seq,name,at'
    seq   name                at1     Offer.published     2026-10-22T12:00:00Z2     Offer.subscribed    2026-10-22T12:00:04Z3     Invoice.billed      2026-10-22T12:00:04Z4     Invoice.collected   2026-10-22T12:00:05Z

    Each Event can wake a Workflow. The receipt email went to a seed inbox, because test sends nothing outside.

  6. To take real money, claim the Startup with the token from step 1:

    npx startup-builder do Startup.claim --json '{"startup":"startup_1","claimToken":"ct_7Hq2xV"}'
    Claimed LeaseclockOwner of record  pending Stripe onboardingFinish at        https://connect.stripe.com/setup/s/acct_1Q7Lc

    Open the link and give Stripe your identity and bank details. The Startup gets a Stripe account of its own, and you become its owner of record.

  7. To see what stands between you and Live, preview launch with --try, which checks and stores nothing:

    npx startup-builder do Startup.launch --json '{"startup":"startup_1"}' --try
    Refused: 2 of 10 checks failfail  Test run passed           no completed test orderfail  Five slots at Commitment  0 of 5 slots at Commitment

    The template passed six checks before you typed a word, and steps 3 and 6 passed two more. The test run needs one sample Customer to receive the work, not only pay for it. The slot check needs answers and payments from outside people, which no command fakes.

Result

leaseclock.com sells a $29 monthly plan, took one test payment end to end, and has a Stripe account in its own name. Every command above was one Verb on api.sb, the same call through the API, SDK, CLI and MCP.

Launch reads 10 checks for leaseclock.com, a Solo SaaS Startup: the ones every Startup passes. Some templates add more; the launch checklist lists them all.

CheckIdKindPasses when
Offers publishedlive-offersregistryAt least one Offer is published with a price and terms; launch refuses a Startup without one.
Work definedlive-workregistryEvery published Offer has a workflow that delivers it, with each step assigned to software, an Agent, or a person.
People assignedlive-peopleregistryEvery role the workflows need is held by an Agent or a person, with instructions and limits.
Site publishedlive-siteuiThe site serves home, pricing, terms, and privacy pages under the Brand, readable by people and agents.
Test run passedlive-test-runtranscriptA sample Customer completes every published Offer end to end in test, with no real charge or message.
Portal readylive-portaluiThe customer portal on the site shows each Customer their orders, deliveries, invoices, and messages.
Agent API openlive-agent-apicontractThe API, MCP server, OpenAPI document, llms.txt, and agents.json serve every published Offer and pass conformance.
Payouts connectedlive-payoutscontractStripe takes payments for the Startup and pays out to its bank account.
Address resolveslive-addresscontractThe canonical Domain serves the Site over HTTPS with a valid certificate and, where it embeds a payment form, Stripe lists it as a payment method domain.
Five slots at Commitmentlive-slotsgradeAll five Founding Hypothesis slots hold Commitment Evidence from outside people. Slots customer, problem, approach, switch, differentiation at Commitment or stronger, outside Evidence only.

Next steps