# Presets: Prototype or Ship to testers

A preset decides how far a run goes and which accounts it needs. Pick the smallest one that does what you want. You can start small and run again later with more.

The **Preset** picker sits next to **Build it** on the home page and in the Idea Studio. With no choice, a run uses the default, the larger "Ship to testers" path. The console's **Setup** page has the same Prototype / Testers switch, so you can see what each needs before you start.

## At a glance

| | **Prototype** | **Ship to testers** |
|---|---|---|
| What you get | Your app's GitHub repo (quality checks on) and a live **web preview** on your domain, or free on `workers.dev` with no domain | The above, plus iPhone builds in **TestFlight** and Android builds in **Play internal testing** |
| Stages that run | spec, design, backend, build, security, verify, experience, web launch | All of those, plus Ship |
| Backend (database, sign-in) | On (Supabase) | On (Supabase) |
| Store build and submit | None. The Ship stage does not run. | Builds upload for testing. You tap Submit; Starwisp never submits for you. |
| Accounts you need | 5 (below) | 8 or more (below) |
| Slow vendor waits | None | Apple and Google review and verification: days to weeks |
| Your hands-on time | Under 90 minutes, if the accounts already exist | Longer, mostly waiting on vendors |
| Run time | Hours, unattended (estimate: 6 to 9 hours) | Hours, unattended (estimate: 6 to 9 hours) |
| How hard the agents work | Lighter: smaller Design and Build crews, Sonnet helper agents, lean prompts. Same Verify gates and Experience bar. | Full crews, every helper on Opus |
| Claude cost (estimate) | about $135 to $225, typical about $170 | about $265 to $310 |
| Total variable cost per app (estimate) | about $135 to $250 | about $270 to $380 |

One run has been measured: about $290 in Claude before Launch on the full-crew settings Ship to testers still uses. The Prototype figures are estimated from it; the per-stage math is in [costs](costs.md).

## What each one needs

### Prototype

| Account | Page | Vault field |
|---|---|---|
| GitHub organization with the Starwisp App | [GitHub](vendors/github.md) | App ID, Private key (done by the installer) |
| Anthropic | [Anthropic](vendors/anthropic.md) | Anthropic API key |
| Expo | [Expo](vendors/expo.md) | Expo access token |
| Supabase | [Supabase](vendors/supabase.md) | Personal access token |
| Cloudflare (a domain is optional) | [Cloudflare](vendors/cloudflare.md) | Cloudflare API token, Account ID (Zone ID only with a domain) |

[Resend](vendors/resend.md) is needed only if your app sends email from an address of its own, and it needs a domain. The preflight on the run tells you.

## A domain is optional

Both presets run without a domain. Here is what changes:

| | **No domain** | **With a domain on Cloudflare** |
|---|---|---|
| Web address | `https://<app>.<your-subdomain>.workers.dev` (free) | `https://<app>.acme.com` |
| Landing, privacy, terms and support pages | On that address | On that address |
| Store listing support and privacy URLs (Ship to testers) | `…workers.dev/support` and `…workers.dev/privacy` | `…acme.com/support` and `…acme.com/privacy` |
| Support and privacy contact | Your own email (Identity: support email, else owner email) | `<app>-support@apps.acme.com`, forwarded to you |
| App email (its own address, replies, inbound mail) | Off | On, with [Resend](vendors/resend.md) |
| Sign-in codes by email | Supabase's built-in sender with Supabase's default email text (new free projects can't change it without custom SMTP): only to members of your Supabase organization, a few an hour. Fine for trying it yourself. | Sent through Resend from your domain, to anyone |
| Cloudflare token | Account · Workers Scripts · Edit | Plus the zone permissions in [Cloudflare](vendors/cloudflare.md) |

Still needs a domain: email sign-in for outside testers, app email of its own, and anything a vendor asks a website on your own domain for (Apple asks organizations for one when they enroll; individual enrollment does not).

Set it up in **Settings → Identity**: leave **House domain** empty and save your workers.dev subdomain as the **Free web address**. You can add a domain later.

### Ship to testers

Everything in Prototype, plus:

| Account | Page | Vault field | Lead time |
|---|---|---|---|
| Resend (only with a domain) | [Resend](vendors/resend.md) | API key, Sending domain | DNS: minutes to hours |
| Apple Developer | [Apple](vendors/apple.md) | Key ID, Issuer ID, Private key (.p8), Apple Team ID | days to **weeks** |
| Google Play | [Google Play](vendors/google-play.md) | Service account JSON key | days to weeks; **14-day closed test** for new personal accounts before production |

Optional: [Twilio](vendors/twilio.md) for SMS (2 to 4 weeks of registration), APNs push key, Firebase for Android push.

Start the slow accounts (Apple, Google) **before** your first run. A run can finish the code in a day, but you cannot upload to a store until those accounts are approved.

A first launch to both stores is realistically about 1 week with individual accounts and no SMS, and 4 to 8 weeks with organization accounts (an unverified estimate).

## Other presets

Two presets are built: Prototype and Ship to testers. A "Beta to my phone" preset (with an Android preview build) and a "Ship to the stores" preset are planned, with no date yet. Until then, use Ship to testers to get TestFlight and Play internal testing builds.

## Supported and not supported

| Supported | Not supported in v1.0 |
|---|---|
| Expo / React Native apps in TypeScript | Flutter, native Swift or Kotlin |
| iOS, Android and web | Expo Go |
| Supabase backend, Resend email, optional Twilio SMS | Other backends |
| English-language apps and store listings | Multi-language store listings |
| GitHub organizations | Personal GitHub accounts, running without GitHub |
| Your own accounts and keys at every vendor | Claude Pro/Max subscription tokens; any hosted tier |
