# Reserve-first

URL: /business/reserve-first · Id: `page:business/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](/business/nouns/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](/business/nouns/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](/business/lifecycle/states/building), and deposits are its fastest source.

## Compiled on day one
The reserve page is the first output the [Founding Hypothesis](/business/founding-hypothesis) compiles. Nobody writes it.

| Part of the page | Compiled from |
| --- | --- |
| Headline | the problem slot, in the words of the [ICP](/business/nouns/icp) |
| [Offer](/business/nouns/offer) | the approach slot and its [Product Template](/business/nouns/product-template) |
| [Price](/business/nouns/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](/business/nouns/key-result) of the [Minimum Success Criteria](/business/nouns/minimum-success-criteria) |
| Disclosure | the [legal floor](/systems/legal-and-corporate/floor): the [Product](/business/nouns/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](/business/nouns/invoice).

Refund terms are the same for every reserver. No [Experiment](/business/nouns/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](/business/nouns/visitor) arrives.

Only outside buyers count. A deposit from the [Founder](/agents/founding/founder), the [Studio](/business/nouns/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](/business/nouns/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.

```ts
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:

**API**

```bash
curl -X POST "https://api.sb/platecost.app/offers/offer_1/publish?mode=try" \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY"
```

**SDK**

```ts
import { $ } from 'startup-builder'

const preview = await $.Offer.publish({ offer: 'offer_1' }, { mode: 'try' })
```

**CLI**

```bash
npx startup-builder do Offer.publish --json '{"offer":"offer_1"}' --try
```

**MCP**

```json
{
  "name": "do",
  "arguments": {
    "code": "return await $.Offer.publish({ offer: 'offer_1' })",
    "mode": "try"
  }
}
```


```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:

```bash
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](/products/selling/reserve): the Offer, the [Order](/business/nouns/order) and the conversion at ship.
- [Wants](/code/builders/startup/wants): the unmet demand that sends people to the page.
- [Test ladder](/business/test-ladder): the rungs above and below a pre-sale.