Skip to content

Reserve-first

The first test every Startup runs is a refundable deposit on a reserve page published on day one, which settles the switch slot with money.

Reserve-first is the first test every Startup runs: a refundable deposit on a reserve page, published the day the Startup is created. It settles the switch slot with money, the one answer politeness cannot fake.

Why money first

When building costs almost nothing, the risk left is building what nobody wants. A hundred people who call an Idea great have bought nothing, so Opinion weighs zero.

A deposit is Commitment: the buyer gives something up. Commitment from outside buyers on the customer, problem and switch slots opens Building, and deposits are its fastest source.

Compiled on day one

The reserve page is the first output the Founding Hypothesis compiles. Nobody writes it.

Part of the pageCompiled from
Headlinethe problem slot, in the words of the ICP
Offerthe approach slot and its Product Template
Pricea share of what the ICP hires today, from the switch slot
Ship datethe date the approach can deliver, inside the first Key Result of the Minimum Success Criteria
Disclosurethe legal floor: the Product is not built, and the page names the ship date

Terms that keep a deposit honest

A deposit refunds in full on request, at any time before the ship date. If the Startup misses the date, every deposit refunds automatically. At ship, the deposit pays the first Invoice.

Refund terms are the same for every reserver. No Experiment varies them, and a Price test runs as a sibling Offer to new buyers.

Reading the result

The threshold is fixed before the page goes live: how many deposits, from how many people reached, by what date. Nobody moves it after the first Visitor arrives.

Only outside buyers count. A deposit from the Founder, the Studio or a sibling Startup is kept on the record and never passes a gate. A miss is a result: every reserver is refunded, and the Decision records what the week settled.

Write it

The page compiles from the Founding Hypothesis, so startup.ts holds only the two values nothing else can supply: the ship date and the threshold. The deposit defaults to the first period of the Price, and no field sets the refund terms.

TypeScript
import { Startup } from 'startup-builder'

export default Startup({
  name: 'Platecost',
  domain: 'platecost.app',
  extends: 'solo-saas',
  hypothesis: { /* the five slots */ },
  reserve: {
    ships: '2027-01-15',
    threshold: { deposits: 8, reached: 40, by: '2026-11-05' },
  },
})

Creating the Startup compiles the reserve Offer as offer_1. Rehearse its publish to read the page before anyone sees it:

Terminal
curl -X POST "https://api.sb/platecost.app/offers/offer_1/publish?mode=try" \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY"
Text
try  Offer.publish   offer_1, reserve   nothing written

Headline     Stop rebuilding the food-cost sheet every weekend.   from: Hypothesis#problem@v1
Offer        Plate costs from every invoice you photograph         from: Hypothesis#approach@v1
Price        $79 a month, $79 refundable deposit                   from: Hypothesis#switch@v1
Ships        2027-01-15                                            inside Key Result 2
Disclosure   Platecost is not built. It ships 2027-01-15.          legal floor
Threshold    8 deposits from 40 reached, by 2026-11-05             fixed at publish

Run it without --try to put the page live. Once it is live, the threshold takes no edit.

To read the result, ask for the record:

Terminal
npx startup-builder show /reserve
Text
platecost.app   reserve page   live since 2026-10-22

reached     40    outside ICP members sent to the page
deposits    9     outside, $711 held
excluded    1     the Founder's deposit, kept on the record
threshold   8 by 2026-11-05   passed 2026-11-02
grade       switch at Commitment, from 9 deposits

Next

  • Reserve: the Offer, the Order and the conversion at ship.
  • Wants: the unmet demand that sends people to the page.
  • Test ladder: the rungs above and below a pre-sale.