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 page | Compiled from |
|---|---|
| Headline | the problem slot, in the words of the ICP |
| Offer | the approach slot and its Product Template |
| Price | a share of what the ICP hires today, from the switch slot |
| Ship date | the date the approach can deliver, inside the first Key Result of the Minimum Success Criteria |
| Disclosure | the 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.
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:
curl -X POST "https: //api.sb/ platecost.app/ offers/ offer_1/ publish? mode= try" \
-H "Authorization: Bearer $STARTUP_BUILDER_API_KEY"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 publishRun 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:
npx startup-builder show /reserveplatecost.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 depositsNext
- 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.